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

相关推荐
测开小菜鸟6 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
萧鼎1 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸1 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农1 小时前
Python 继承、多态、封装、抽象
开发语言·python
Python大数据分析@2 小时前
python操作CSV和excel,如何来做?
开发语言·python·excel
黑叶白树2 小时前
简单的签到程序 python笔记
笔记·python
Shy9604182 小时前
Bert完形填空
python·深度学习·bert
上海_彭彭2 小时前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
zhongcx013 小时前
使用Python查找大文件的实用脚本
python
yyfhq4 小时前
sdnet
python