如何借助1.mp4的ffprobe信息用ffmpeg转换2.mp4实现参数一致
自动匹配视频参数的最优实现方案
核心思路是通过命令行工具将ffprobe提取的参考视频参数直接作为变量传入ffmpeg,全程无需手动复制参数,可一键执行。
1. 提取参考视频参数的通用命令
你可以用ffprobe直接输出指定参数的纯数值结果,无需额外解析冗余信息:
- 提取视频流核心参数(分辨率、帧率、编码、码率):
ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,codec_name,bit_rate -of default=noprint_wrappers=1:nokey=1 1.mp4 - 提取音频流核心参数(编码、码率、采样率、声道数):
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,bit_rate,sample_rate,channels -of default=noprint_wrappers=1:nokey=1 1.mp4
2. 一键执行脚本示例(Linux/macOS Bash环境)
把参数读取和转码逻辑合并成脚本,直接运行即可输出和1.mp4参数完全一致的视频:
# 读取1.mp4的视频参数并处理帧率格式 read v_width v_height v_fps_num v_fps_den v_codec v_bitrate < <(ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,codec_name,bit_rate -of default=noprint_wrappers=1:nokey=1 1.mp4 | tr '/' ' ') v_fps=$(echo "scale=2; $v_fps_num / $v_fps_den" | bc) # 读取1.mp4的音频参数 read a_codec a_bitrate a_sample_rate a_channels < <(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,bit_rate,sample_rate,channels -of default=noprint_wrappers=1:nokey=1 1.mp4) # 执行转码生成匹配参数的视频 ffmpeg -i 2.mp4 \ -vcodec $v_codec -b:v $v_bitrate -s ${v_width}x${v_height} -r $v_fps \ -acodec $a_codec -b:a $a_bitrate -ar $a_sample_rate -ac $a_channels \ -y output.mp4
补充说明
- 如需匹配更多参数(如色彩空间、GOP长度、CRF值等),只需在
ffprobe的show_entries字段新增对应参数项,同时在ffmpeg命令中添加对应设置规则即可 - Windows环境可将上述逻辑调整为批处理脚本,变量赋值替换为批处理的
set语法即可 - 若遇编码不兼容问题,可手动固定
vcodec/acodec的取值为通用编码器(如libx264/aac),其余参数依然保持自动读取,不影响自动化效率 - 若优先匹配画质而非固定码率,可将
-b:v $v_bitrate替换为-crf参数,数值可通过ffprobe提取1.mp4的实际CRF值获取
内容的提问来源于stack exchange,提问作者Parsa Noori
相关产品推荐
相关产品推荐

