背景
視頻格式轉換是多媒體處理中的常見需求,尤其在視頻編輯、存儲或跨平臺播放時。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)
?? 使用說明:
-
確保你已經安裝了?
ffmpeg
,命令行中運行?ffmpeg -version
?可測試是否安裝成功。 -
Windows 下可從?Download FFmpeg?下載并配置環境變量。
-
將上面腳本保存為?
.py
?文件。 -
把?
.264
?文件放到和腳本相同的目錄。 -
打開命令行(終端),運行:
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全部處理完成,按回車退出...")
📦 使用方法:
-
安裝好?
ffmpeg
,并加入系統環境變量。 -
將以上腳本保存為?
convert_drag_drop.py
。 -
將?
.264
?文件拖拽到該?.py
?文件圖標上,雙擊運行。 -
會在同目錄下生成同名的?
.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(自動識別) |
?? 使用說明:
-
安裝?
ffmpeg
?并配置到環境變量(命令行運行?ffmpeg -version
?通過即可)。 -
將腳本保存為?
convert_with_gui.py
。 -
雙擊運行腳本,選擇?
.264
?文件即可。