【python脚本工具--h.264格式转MP4和AVI格式】

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路径

相关推荐
小叶lr18 分钟前
python 从pycharm部署到新环境
开发语言·python·pycharm
2301_7634710337 分钟前
Python单元测试(unittest)实战指南
python
xiaoxiongip66640 分钟前
动态ip适合挂什么项目
网络·爬虫·python·网络协议·tcp/ip·ip
Q_Q5110082851 小时前
springboot+python+uniapp基于微信小程序的旅游服务系统景点信息展示 路线推荐 在线预约 评论互动系统
spring boot·python·微信小程序·django·flask·uni-app
E___V___E1 小时前
设计模式--装饰器模式
python·设计模式·装饰器模式
Dan.Qiao2 小时前
pycharm如何处理python项目间引用
ide·python·pycharm
万粉变现经纪人2 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘sympy’问题
python·beautifulsoup·pandas·scikit-learn·pyqt·pip·scipy
xiaohouzi1122332 小时前
Python读取视频-硬解和软解
python·opencv·ffmpeg·视频编解码·gstreamer
念念不忘 必有回响3 小时前
Pygame模块化实战:从零构建Aliens射击游戏全流程(一)
python·游戏·pygame
☼←安于亥时→❦10 小时前
PyTorch 梯度与微积分
人工智能·pytorch·python