赞
踩
使用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)
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 # 输出路径
]
#!/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......."
该方式当文件路径太过复杂如下划线等太多时,调用ffmpeg 命令,可能或导致文件名提取不准确,部分视频文件不能处理。建议在同一目录使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。