【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

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

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

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
将 Kinetics 数据集换为 NTU-RGBD 数据集需要进行以下步骤: 1. 下载 Kinetics 数据集和 NTU-RGBD 数据集,并解压缩它们。 2. 安装 Python 和必要的依赖项(如 NumPy、Pandas 和 OpenCV)。 3. 创建一个 Python 脚本,读取 Kinetics 数据集中的所有视频文件并将其换为 NTU-RGBD 数据集中的格式。以下是一个示例脚本: ```python import os import shutil import numpy as np import pandas as pd import cv2 # 设置路径 kinetics_path = '/path/to/kinetics/dataset' ntu_path = '/path/to/ntu-rgbd/dataset' # 读取动作类别映射 class_map = pd.read_csv(os.path.join(ntu_path, 'class_map.csv'), index_col=0) # 创建 NTU-RGBD 数据集目录 if not os.path.exists(ntu_path): os.makedirs(ntu_path) # 遍历 Kinetics 数据集中的所有视频文件 for filename in os.listdir(os.path.join(kinetics_path, 'videos')): # 获取动作类别和视频 ID class_name, video_id = filename.split('_')[:2] class_id = class_map.loc[class_name]['ntu_id'] # 创建输出目录 output_dir = os.path.join(ntu_path, 'nturgb+d_rgb', 'Skeletons', 'S001', 'C001', 'P001', class_id) if not os.path.exists(output_dir): os.makedirs(output_dir) # 读取视频文件并提取帧 cap = cv2.VideoCapture(os.path.join(kinetics_path, 'videos', filename)) frames = [] while True: ret, frame = cap.read() if not ret: break frame = cv2.resize(frame, (640, 360)) frames.append(frame) # 提取帧的关键点 keypoints = [] for frame in frames: # 使用 OpenPose 提取关键点 # 这里需要引入 OpenPose 的库 keypoint = extract_keypoints(frame) keypoints.append(keypoint) # 保存关键点数据 np.save(os.path.join(output_dir, 'S001C001P001R001A{:03d}.npy'.format(int(video_id))), keypoints) # 复制 RGB 视频文件到 NTU-RGBD 数据集目录 shutil.copyfile(os.path.join(kinetics_path, 'videos', filename), os.path.join(ntu_path, 'nturgb+d_rgb', 'avi', 'S001', 'C001', 'P001', class_id, 'A{:03d}.avi'.format(int(video_id)))) ``` 4. 运行 Python 脚本,等待换完成。 5. 完成后,检查 NTU-RGBD 数据集目录,确保格式正确并且所有文件都已换成功。 需要注意的是,以上示例脚本中使用了 OpenPose 库来提取帧的关键点。如果您没有安装该库,需要先安装并配置环境。另外,由于 Kinetics 数据集和 NTU-RGBD 数据集的标注方式不同,换后的数据可能存在一定的误差。因此,在使用换后的数据集进行训练或评估时,需要注意这些差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Holy meat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值