【視頻格式轉換】.264格式轉為mp4格式

背景

視頻格式轉換是多媒體處理中的常見需求,尤其在視頻編輯、存儲或跨平臺播放時。H.264(即AVC)是一種廣泛使用的視頻編碼標準,以其高壓縮率和良好兼容性著稱,但通常以容器格式(如.264裸流文件)存儲。MP4則是一種通用容器格式,支持H.264編碼,且兼容絕大多數設備和播放器。將.264轉換為MP4可提升文件易用性,便于直接播放或分享。

概述

.264文件是純視頻編碼數據流,缺乏音頻、元信息等容器結構。轉換為MP4需將H.264流封裝到MP4容器中,通常需借助工具完成。轉換過程需注意參數匹配(如幀率、分辨率),避免質量損失。常見方法包括使用FFmpeg命令行工具、專業軟件(如HandBrake)或在線轉換服務。

一、

要將?.264?格式的視頻轉換為?.mp4?格式,可以使用?ffmpeg?工具。Python 中可以通過?subprocess?模塊調用?ffmpeg

下面是一個完整的 Python 腳本,它將當前目錄下的?.264?文件轉換為?.mp4?文件(需要你本地安裝了?ffmpeg):


? 腳本內容(保存為?convert_264_to_mp4.py):

import os
import subprocessdef convert_264_to_mp4(input_path, output_path):# 構建 ffmpeg 命令command = ['ffmpeg','-y',  # 自動覆蓋輸出文件'-i', input_path,'-c:v', 'copy',  # 復制視頻流而不重新編碼output_path]try:subprocess.run(command, check=True)print(f'? 成功轉換: {input_path} → {output_path}')except subprocess.CalledProcessError as e:print(f'? 轉換失敗: {input_path}')print(e)def batch_convert_264_to_mp4(directory):for filename in os.listdir(directory):if filename.lower().endswith('.264'):input_path = os.path.join(directory, filename)output_filename = os.path.splitext(filename)[0] + '.mp4'output_path = os.path.join(directory, output_filename)convert_264_to_mp4(input_path, output_path)if __name__ == '__main__':target_directory = '.'  # 當前目錄batch_convert_264_to_mp4(target_directory)

?? 使用說明:

  1. 確保你已經安裝了?ffmpeg,命令行中運行?ffmpeg -version?可測試是否安裝成功。

  2. Windows 下可從?Download FFmpeg?下載并配置環境變量。

  3. 將上面腳本保存為?.py?文件。

  4. 把?.264?文件放到和腳本相同的目錄。

  5. 打開命令行(終端),運行:


python convert_264_to_mp4.py

二、

如果你希望把?.264?文件拖到?.py?腳本上自動運行,只轉換拖入的那個文件。這種方式適用于?Windows 系統?中的“拖拽執行”。

下面是你要的腳本版本,支持將一個或多個?.264?文件拖到?.py?文件上運行,每個文件轉換為對應的?.mp4?文件:


? 腳本內容:convert_drag_drop.py

import sys
import os
import subprocessdef convert_264_to_mp4(input_path):if not input_path.lower().endswith('.264'):print(f"?? 不是.264文件,跳過: {input_path}")returnoutput_path = os.path.splitext(input_path)[0] + '.mp4'command = ['ffmpeg','-y',  # 自動覆蓋'-i', input_path,'-c:v', 'copy',  # 不重新編碼output_path]try:subprocess.run(command, check=True)print(f"? 成功轉換: {input_path} → {output_path}")except subprocess.CalledProcessError as e:print(f"? 轉換失敗: {input_path}")print(e)if __name__ == '__main__':if len(sys.argv) < 2:print("請將 .264 文件拖拽到本腳本上運行。")input("按下回車退出...")sys.exit(1)for file_path in sys.argv[1:]:convert_264_to_mp4(file_path)input("\n全部處理完成,按回車退出...")

📦 使用方法:

  1. 安裝好?ffmpeg,并加入系統環境變量。

  2. 將以上腳本保存為?convert_drag_drop.py

  3. 將?.264?文件拖拽到該?.py?文件圖標上,雙擊運行。

  4. 會在同目錄下生成同名的?.mp4?文件。


🧪 支持多個文件:

你也可以一次拖多個?.264?文件到腳本圖標上,它會依次轉換。

如果你希望腳本在轉換完成后不需要按回車、自動退出,只需將前面腳本中最后這行代碼刪除即可:
?


# input("\n全部處理完成,按回車退出...")

三、

我們可以用?tkinter?彈出文件選擇窗口,讓用戶手動選擇?.264?文件,然后轉換為?.mp4,并在轉換完成后自動打開輸出目錄


? 符合新需求的完整腳本如下:

import os
import subprocess
import tkinter as tk
from tkinter import filedialog
import platformdef select_file():root = tk.Tk()root.withdraw()  # 不顯示主窗口file_path = filedialog.askopenfilename(title="選擇 .264 文件",filetypes=[("H.264 視頻文件", "*.264")])return file_pathdef convert_264_to_mp4(input_path):if not input_path or not input_path.lower().endswith('.264'):print("? 未選擇合法的 .264 文件。")returnoutput_path = os.path.splitext(input_path)[0] + '.mp4'command = ['ffmpeg','-y','-i', input_path,'-c:v', 'copy',output_path]try:subprocess.run(command, check=True)print(f"? 成功轉換: {input_path} → {output_path}")return output_pathexcept subprocess.CalledProcessError as e:print(f"? 轉換失敗: {input_path}")print(e)return Nonedef open_output_folder(file_path):folder = os.path.dirname(file_path)system = platform.system()try:if system == "Windows":os.startfile(folder)elif system == "Darwin":  # macOSsubprocess.run(['open', folder])else:  # Linuxsubprocess.run(['xdg-open', folder])except Exception as e:print(f"? 無法打開目錄: {folder}")print(e)if __name__ == '__main__':input_file = select_file()output_file = convert_264_to_mp4(input_file)if output_file:open_output_folder(output_file)

📦 功能一覽:

功能描述
? 彈出窗口使用?tkinter?選擇?.264?文件
? 自動轉換使用?ffmpeg?執行?.264 → .mp4
? 自動打開目錄轉換完成后自動打開輸出文件所在的目錄
? 多平臺兼容支持 Windows、macOS、Linux(自動識別)


?? 使用說明:

  1. 安裝?ffmpeg?并配置到環境變量(命令行運行?ffmpeg -version?通過即可)。

  2. 將腳本保存為?convert_with_gui.py

  3. 雙擊運行腳本,選擇?.264?文件即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914642.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914642.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914642.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA學習筆記 使用notepad++開發JAVA-003

目錄 1 前言 2 部署notepad的java開發環境 2.1 下載并安裝notepad 2.2 設置新建文件的語言 2.3 安裝NppExec插件 2.4 編寫JAVA腳本 2.5 設置腳本執行快捷鍵 2.6 效果測試 3 小結 1 前言 JAVA可以使用記事本來編寫代碼&#xff0c;但是這種方式效率十分低下。我們可以使…

Vue Router 完全指南:從入門到實戰,高效管理前端路由

前言在現代化的前端開發中&#xff0c;路由管理是構建單頁應用&#xff08;SPA&#xff09;的核心功能之一。Vue.js 作為主流的前端框架之一&#xff0c;提供了強大的官方路由庫Vue Router&#xff0c;幫助開發者高效管理頁面跳轉、動態加載、權限控制等關鍵需求。無論是構建企…

Sentinel熱點參數限流完整示例實現

Sentinel熱點參數限流完整示例實現 1. 添加Maven依賴 (pom.xml) <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.2.7.RELEASE</version> </depend…

正則表達式深度解析:從LeetCode 3136題說起

正則表達式深度解析&#xff1a;從LeetCode 3136題說起 引言 正則表達式&#xff08;Regular Expression&#xff0c;簡稱RegEx&#xff09;是一種強大的字符串匹配工具&#xff0c;在字符串處理、數據驗證、文本搜索等場景中有著廣泛的應用。本文將以LeetCode 3136題"有效…

映美打印機-URL頁面打印

<?php /** 打印 - 映美云 https://open.jolimark.com/doc/ */ namespace Home\Controller; use Admin\Logic\OrderLogic;class PrintController extends BaseController {private $appid "";private $appkey "";//打印機編號private $deviceIds &qu…

機器學習算法 ——XGBoost 的介紹和使用

前言&#xff1a; 最近在工作中遇到一個結構化數據回歸預測的問題&#xff0c;用到了很多回歸算法&#xff08;如多元線性回歸等&#xff09;都沒有很好的效果&#xff0c;于是使用了XGBoost&#xff0c;自己也沖三個特征參數人為的增加來幾個&#xff0c;訓練出來的效果還是很…

Linux操作系統之信號:保存與處理信號

目錄 前言&#xff1a; 前文回顧與補充&#xff1a; 信號的保存 PCB里的信號保存 sigset_t 信號集操作函數 信號的處理 信號捕捉的流程&#xff1a;?編輯 操作系統的運行原理 硬件中斷 時鐘中斷 死循環 軟中斷 總結&#xff1a; 前言&#xff1a; 在上一篇文…

Spring Boot 設置滾動日志logback

Spring Boot 的 logback 框架 Spring Boot 默認內置了 Logback 作為日志實現框架&#xff0c;只需要在resources文件夾下添加一個logback-spring.xml&#xff0c;springboot會按照你的設置自動開啟logback日志功能。 配置 logback-spring.xml 實現每天產生一個日志文件&#xf…

如何定義一個只能在堆上或棧上生成對象的類

在C中&#xff0c;可以通過特定的技術手段來控制對象只能在堆(heap)或棧(stack)上創建。只能在堆上創建對象的類要實現這一點&#xff0c;我們需要阻止用戶直接實例化對象&#xff0c;而只能通過new操作符創建。class HeapOnly { public:static HeapOnly* create() {return new…

1.1 前端-vue3項目的創建

構建工具先搭好vue3框架 vue2的vue-cli腳手架基于webpack構建工具創建vue的框架. 而在vue3&#xff0c;可以通過vite構建工具創建vue3項目&#xff0c;性能更優。 兩者創建方式的區別&#xff1a;cmd命令基于的構建工具vue2/vue3vue create 項目名稱&#xff08;或 vue ui圖形化…

PHP password_get_info() 函數

password_get_info() 函數用于返回指定散列&#xff08;hash&#xff09;的相關信息。 PHP 版本要求: PHP 5 > 5.5.0, PHP 7 語法 array password_get_info ( string $hash ) 參數說明&#xff1a; $hash: 一個由 password_hash() 創建的散列值。 返回值 返回三個元素…

mac上的app如何自動分類

使用文件夾進行手動分類在Finder中創建文件夾&#xff0c;將同類應用拖入同一文件夾。右鍵點擊Dock上的應用圖標&#xff0c;選擇「選項」→「在Finder中顯示」&#xff0c;可快速定位應用安裝位置。利用Launchpad自動分組打開Launchpad&#xff08;觸控板四指捏合或按F4鍵&…

LLM面試題目 3

LLM面試題目 3 什么是自注意力機制(Self-Attention)?為什么它在LLM中很重要?如何評估LLM的性能?LLM面臨的挑戰有哪些?Transformer和RNN的區別是什么?LLM如何處理多輪對話? 題目講解 什么是自注意力機制(Self-Attention)?為什么它在LLM中很重要? 自注意力機制是一種…

linux上的軟掛載操作方法

針對linux上的軟掛載 可以查看linux已經掛載和存儲的磁盤分區 df -hfdisk 命令是檢索相同信息的另一種方法&#xff0c;可以看到所有的磁盤分區 sudo fdisk -l 要將磁盤分區 /dev/sda1 掛載到 /home/visionx/EXD1 目錄 步驟 1&#xff1a;準備工作 1.創建掛載目錄&#xff08;如…

SecretFlow 隱語 (2) --- 隱語架構概覽

在前邊兩篇文章中&#xff0c;介紹了數據要素和可信流通相關的內容&#xff0c;以及基于p2p模式的安裝方法 SecretFlow 隱語 (1) --- 快速入門 關于在Linux上部署 SecretFlow --- P2P部署模式 由于安裝過程中出現意外報錯&#xff0c;現已提交issue等待官方技術人員查閱&#x…

PHP語言基礎知識(超詳細)第二節

二十七. 數組的遍歷 1)通過函數進行遍歷:(例:demo07) (此方式不能完全遍歷數組,需要借助其他功能輔助)(不推薦,了解即可) key():返回數組中當前指針所在位置的鍵。 current():返回數組中當前指針所在位置的值。 例如:demo07: <?php/*key():返回數組中…

網絡--OSPF實驗

目錄 OSPF實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 1.IP地址劃分 2. OSPF 部署 3. 其它配置 4. 驗證測試 四、實驗步驟 1.IP 地址配置 2.OSPF 部署 3.其它配置 4.驗證測試 OSPF實驗報告 一、實驗拓撲 二、實驗要求 1、R1-R3為區域0&#xff0c;R3-R4為…

Go語言第一個程序--hello world!

文章目錄一、Go 語言程序安裝二、運行程序三、go mod tidy 命令四、遇到的問題五、VS Code 調試 go 程序的相關配置說明一、Go 語言程序安裝 Go語言下載鏈接&#xff1a;https://studygolang.com/dl 雙擊打開下一步下一步即可。 驗證安裝&#xff1a;go version 二、運行程序 創…

【MCU控制 初級手札】1.1 電阻

作者&#xff1a;電控工程手札 本博文內容著作權歸作者所有&#xff0c;轉載請務必保留本文鏈接 目錄1. 定義2. 電導3. 電阻率4. 電導率5. 伏安特性6. 開路與短路7. 功率8. 應用元件特性&#xff08;端子特性&#xff09;&#xff1a;元件的兩個端子的電路物理量之間的代數函數…

JS中async/await功能介紹和使用演示

JS 中 async/await 功能介紹與使用演示 一、功能介紹基本概念 async&#xff1a;用于聲明異步函數&#xff0c;返回一個 Promise 對象。即使函數內沒有顯式返回 Promise&#xff0c;也會隱式將返回值封裝為 Promise.resolve()。await&#xff1a;僅能在 async 函數內部使用&…