当前位置:   article > 正文

脚本使用ffmpeg批量将视频裸流打包为可播放的mp4文件_h264裸流封装成mp4

h264裸流封装成mp4

Python脚本实现用ffmpeg批量转换视频裸流为mp4文件

使用Python脚本批量将视频裸流转换为MP4文件,可以用subprocess模块来调用FFmpeg。首先,确保已经安装了FFmpeg,并且它在系统的PATH中。

import subprocess
import os

def convert_and_rename(input_folder, output_folder):
    # 遍历输入文件夹中的所有文件和子文件夹
    for root, dirs, files in os.walk(input_folder):
        for filename in files:
            if filename.endswith(".h264"):  # 假设裸流文件的扩展名为.h264
                input_path = os.path.join(root, filename)

                # 构建输出路径,将文件路径分割并转为下划线拼接
                output_filename = "_".join(os.path.splitext(os.path.relpath(input_path, input_folder))[0].split(os.path.sep))
                output_path = os.path.join(output_folder, f"{output_filename}.mp4")

                # 打印当前处理的文件路径
                print(f"Converting: {input_path}")

                # 使用FFmpeg进行转换
                command = [
                    "ffmpeg",
                    "-i", input_path,
                    "-c", "copy",  # 使用copy参数保持原始编码
                    output_path
                ]

				#Python标准库中subprocess模块提供的一个函数,用于执行系统命令。执行指定的命令,并等待命令执行完成后返回结果
                subprocess.run(command)

                # 打印转换后文件的路径
                print(f"输入文件路径: {output_path}")
                print("="*30)

if __name__ == "__main__":
    input_folder = "your_input_folder"               # 替换为视频文件夹的路径
    output_folder = "your_output_folder"       # 替换为存储转换后MP4文件的文件夹路径

    convert_and_rename(input_folder, output_folder)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • subprocess.run(command),执行完成后,它会等待命令执行完毕,并返回一个CompletedProcess对象,其中包含了命令的执行结果,如返回码、输出信息等。通常情况下,如果命令执行成功,它将不会返回任何内容,如果命令执行失败,它将会抛出一个CalledProcessError异常。

  • 这个脚本直接使用FFmpeg将.h264文件转换为.mp4文件,保留原始编码格式。如果有其他特定参数需要调整,可以根据需要进行修改。例如:

command = [
    "ffmpeg",	#要执行的命令,FFmpeg 工具的名称
    "-f", "rawvideo",	# "-f" 参数用于指定输入格式,这里设置为 rawvideo,表示输入是原始视频数据
    "-pixel_format", "yuv420p",	# "-pixel_format" 参数指定了像素格式,这里设置为 yuv420p常用的像素格式,表示使用 YUV420 色彩编码
    "-video_size", "your_video_size",  # "-video_size" 参数用于设置视频尺寸,"your_video_size" 替换为实际的视频尺寸例如:"1280x720"
    "-framerate", "your_framerate",    # "-framerate" 参数用于设置视频的帧率,你需要将 "your_framerate" 替换为实际的帧率例如:"30"
    "-i", input_path,	# "-i" 参数用于指定输入文件的路径,这里是裸视频流文件的路径
    "-c:v", "libx264",	# "-c:v" 参数指定了视频编码器,这里设置为 libx264,表示使用 x264 编码器进行视频编码
    "-framerate",30,	# -framerate 30: 指定输入视频的帧率,根据实际情况调整。
    "-crf", 23, # -crf 23: 指定视频的恒定质量参数,取值范围为0-51,0表示无损,23是默认值,值越小,视频质量越高
    output_path	# 输出路径
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

使用Shell脚本来批量转换视频裸流为mp4文件

#!/bin/bash
#set -x

# 设置videos目录路径
videos_dir="your_input_folder"

# 遍历videos目录
#find "$videos_dir" -type f -name "*.h264" | while read input_file; do
find "$videos_dir" -type f -name "*.h264" | sort | while read input_file; do
    # 提取目录名作为输出文件名的前缀
    output_prefix=$(dirname "$input_file")
    output_name=$(basename "$input_file" .h264)
    echo "${output_prefix}_${output_name}.mp4"
    
    # 将路径分隔符替换为下划线
    output_prefix=$(echo "$output_prefix" | tr '/' '_' | tr '-' '_')
    
    # 替换H.264文件名为MP4
    output_file="${output_prefix}_${output_name}.mp4"

    # 使用ffmpeg进行转换
    ffmpeg -i "${input_file}" -c copy "${output_file}"  2>&1
    echo "Converted: ${input_file} to ${output_file}"
done
echo "finish......."
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

该方式当文件路径太过复杂如下划线等太多时,调用ffmpeg 命令,可能或导致文件名提取不准确,部分视频文件不能处理。建议在同一目录使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/491208
推荐阅读
相关标签
  

闽ICP备14008679号