python脚本工具--h.264格式转MP4和AVI格式
视频格式
常见视频格式
常见的视频格式有许多,每种格式都有其独特的特点和用途。以下是一些常见的视频格式的说明:
MP4(MPEG-4 Part 14):
特点: MP4是一种多媒体容器格式,支持包含视频、音频、字幕和静态图像等多种数据。它广泛用于在线视频、移动设备和多媒体播放器。
优势: 高度通用,支持高质量视频和音频,适用于流媒体和下载。
AVI(Audio Video Interleave):
特点: AVI是由微软开发的视频文件格式,可以包含多个音频和视频轨道。尽管较老,仍然在某些应用中使用。
优势: 相对简单,适用于Windows平台。
H.264(MPEG-4 AVC):
特点: H.264是一种高效的视频压缩标准,由国际电信联盟(ITU-T)和国际标准化组织(ISO)的联合视频小组(JVT)制定。它采用先进的视频压缩技术,包括运动估计、帧内预测、变换和量化等。
优势:
高压缩效率: H.264 提供相对较高的视频压缩比,使得在保持较好视频质量的同时减小文件大小成为可能。
广泛支持: H.264已经成为广泛支持的视频编码标准,几乎所有现代设备和平台都能够播放和解码H.264编码的视频文件。
实时性能: H.264在实时视频传输和视频会议等应用中表现出色,具有低延迟和高效的编解码性能。
多功能性: H.264支持多种分辨率、帧率和位深度,适用于不同的应用场景,包括高清晰度(HD)、全高清晰度(Full HD)和4K视频。
网络适应性: H.264适应不同网络条件下的传输,通过提供多个编码配置(profiles)和层次(levels),可以在各种带宽和网络条件下保持视频质量。
MKV(Matroska Video):
特点: MKV是一种开放的多媒体容器格式,可以容纳多个音频、视频、字幕和图像轨道。支持高级特性如菜单和章节。
优势: 高度可扩展,支持高质量的视频和音频。
WMV(Windows Media Video):
特点: 由微软开发,主要用于Windows平台。通常与Windows Media Player兼容。
优势: 适用于Windows环境,可实现高压缩。
MOV(QuickTime Movie):
特点: MOV是由苹果公司开发的多媒体容器格式,常用于存储音频和视频轨道。常在Apple设备上使用。
优势: 支持高质量视频和音频。
FLV(Flash Video):
特点: FLV是Adobe Flash平台上使用的视频文件格式,用于在线视频流。
优势: 适用于网络流媒体,支持动态内容。
MPEG(Moving Picture Experts Group):
特点: 一系列视频和音频压缩标准,包括MPEG-1、MPEG-2和MPEG-4。
优势: MPEG-2用于DVD,MPEG-4提供更高压缩率。
3GP(3rd Generation Partnership Project):
特点: 主要用于在移动设备上播放视频,支持音频和视频。
优势: 小巧,适用于移动设备。
WEBM:
特点: WEBM是一种开放的多媒体容器格式,通常用于网络上的视频播放,支持VP8和VP9视频编码。
优势: 开放标准,适用于HTML5视频。
OGG:
特点: OGG是一种开放的容器格式,通常用于存储音频和视频数据,包括OGV作为视频扩展。
优势: 开放标准,支持音频和视频。
ffmpeg
FFmpeg(Fast Forward MPEG)是一个开源的跨平台多媒体处理工具,它可以用于处理音频、视频和多媒体文件。FFmpeg 提供了一组强大的工具和库,使用户能够执行多种多媒体操作,如转码、裁剪、合并、提取音频等。
功能:
1、音视频编解码: FFmpeg支持各种音频和视频编解码器,能够处理多种不同格式的多媒体文件。
2、格式转换: 可以执行各种格式之间的转码,包括视频格式、音频格式以及容器格式。
3、流处理: 具有流媒体处理能力,可用于实时音视频处理和传输。
4、图像处理: 支持基本的图像处理功能,如缩放、裁剪等。
5、过滤器: 提供丰富的过滤器,可用于调整、处理和增强音视频内容。
命令行工具: FFmpeg 主要通过命令行界面使用,用户可以通过输入命令完成各种操作。例如,将一个视频文件转码为另一种格式,提取视频中的音频,或者将多个视频合并成一个文件等。
开源性: FFmpeg是开源软件,遵循GNU通用公共许可证(GPL)。这意味着它可以免费使用、修改和分发。
跨平台: FFmpeg是跨平台的,可以在多个操作系统上运行,包括Linux、Windows和macOS等。
库和API: 除了命令行工具,FFmpeg还提供了一系列库和API,允许开发人员在自己的应用程序中集成多媒体处理功能。
代码
H.264 to MP4
py
import subprocess
import tkinter as tk
from tkinter import filedialog
ffmpeg_path = r'D:/tool/ffmpeg/ffmpeg-2023-11-09-git-acf63d5350-essentials_build/ffmpeg-2023-11-09-git-acf63d5350-essentials_build/bin/ffmpeg.exe'
def convert_h264_to_mp4(input_file, output_file):
try:
# 构建FFmpeg命令
ffmpeg_cmd = [
ffmpeg_path,
'-i', input_file,
'-c:v', 'libx264', # 使用libx264软件编码器
'-c:a', 'aac',
'-strict', 'experimental',
'-threads', '4', # 使用4个线程
output_file
]
# 调用subprocess执行FFmpeg命令
subprocess.run(ffmpeg_cmd, check=True)
result_label.config(text=f"转换成功,输出文件保存为: {output_file}")
except subprocess.CalledProcessError as e:
result_label.config(text=f"转换失败: {e}")
def browse_file():
file_path = filedialog.askopenfilename(filetypes=[("H.264 Files", "*.h264")])
input_entry.delete(0, tk.END)
input_entry.insert(0, file_path)
def convert_button_clicked():
input_file = input_entry.get()
if not input_file:
result_label.config(text="请选择输入文件!")
return
output_file = filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 Files", "*.mp4")])
if not output_file:
result_label.config(text="请选择输出文件!")
return
convert_h264_to_mp4(input_file, output_file)
# 创建主窗口
root = tk.Tk()
root.title("H.264 to MP4 Converter")
# 创建和布局控件
tk.Label(root, text="选择输入文件:").pack(pady=5)
input_entry = tk.Entry(root, width=50)
input_entry.pack(pady=5)
tk.Button(root, text="浏览", command=browse_file).pack(pady=5)
tk.Button(root, text="开始转换", command=convert_button_clicked).pack(pady=10)
result_label = tk.Label(root, text="")
result_label.pack(pady=5)
# 运行主循环
root.mainloop()
H.264 to AVI
py
import subprocess
import tkinter as tk
from tkinter import filedialog
ffmpeg_path = r'D:/tool/ffmpeg/ffmpeg-2023-11-09-git-acf63d5350-essentials_build/ffmpeg-2023-11-09-git-acf63d5350-essentials_build/bin/ffmpeg.exe'
def convert_h264_to_avi(input_file, output_file):
try:
# 构建FFmpeg命令
ffmpeg_cmd = [
ffmpeg_path,
'-i', input_file,
'-c:v', 'mjpeg', # 使用MJPEG编码器
'-c:a', 'aac',
'-strict', 'experimental',
'-threads', '4', # 使用4个线程
output_file
]
# 调用subprocess执行FFmpeg命令
subprocess.run(ffmpeg_cmd, check=True)
result_label.config(text=f"转换成功,输出文件保存为: {output_file}")
except subprocess.CalledProcessError as e:
result_label.config(text=f"转换失败: {e}")
def browse_file():
file_path = filedialog.askopenfilename(filetypes=[("H.264 Files", "*.h264")])
input_entry.delete(0, tk.END)
input_entry.insert(0, file_path)
def convert_button_clicked():
input_file = input_entry.get()
if not input_file:
result_label.config(text="请选择输入文件!")
return
output_file = filedialog.asksaveasfilename(defaultextension=".avi", filetypes=[("AVI Files", "*.avi")])
if not output_file:
result_label.config(text="请选择输出文件!")
return
convert_h264_to_avi(input_file, output_file)
# 创建主窗口
root = tk.Tk()
root.title("H.264 to AVI Converter")
# 创建和布局控件
tk.Label(root, text="选择输入文件:").pack(pady=5)
input_entry = tk.Entry(root, width=50)
input_entry.pack(pady=5)
tk.Button(root, text="浏览", command=browse_file).pack(pady=5)
tk.Button(root, text="开始转换", command=convert_button_clicked).pack(pady=10)
result_label = tk.Label(root, text="")
result_label.pack(pady=5)
# 运行主循环
root.mainloop()
说明:
需要安装ffmpeg并配置好环境变量。
将ffmpeg_path = r'D:/tool/ffmpeg/ffmpeg-2023-11-09-git-acf63d5350-essentials_build/ffmpeg-2023-11-09-git-acf63d5350-essentials_build/bin/ffmpeg.exe'
替换为自己的ffmpeg.exe路径