ffmpeg - 如何对多比特率输出文件使用 ffmpeg/x264 2-Pass 编码

标签 ffmpeg x264

对多个输出文件执行 2-Pass 编码时,我收到错误

ratecontrol_init: can't open stats file 1 ffmpeg2pass-2.log

我的设置是执行单个第一遍,然后使用相同的第一遍结果进行多个第二遍编码以输出具有不同目标比特率的文件。

ffmpeg -y -i $INPUT_FILE -an -vcodec libx264 -pass 1 -b:v 700k -f rawvideo /dev/null

ffmpeg -y -i $INPUT_FILE -i out-aud.mp4 \
$AUDIO_OPTIONS_P2 -vcodec libx264 -pass 2 -b:v 250k -f mp4 out-250.mp4 \
$AUDIO_OPTIONS_P2 -vcodec libx264 -pass 2 -b:v 500k -f mp4 out-500.mp4 \
$AUDIO_OPTIONS_P2 -vcodec libx264 -pass 2 -b:v 700k -f mp4 out-700.mp4

此序列导致了上面列出的错误。我通过代码检查发现 ffmpeg/x264 为每个第二遍编码路径寻找一组不同的第一遍文件。第一个编码路径使用最初创建的文件集

ffmpeg2pass-0.log
ffmpeg2pass-0.log.mbtree

第二个编码路径需要具有以下名称的首轮文件

ffmpeg2pass-2.log
ffmpeg2pass-2.log.mbtree

第三个编码路径需要名称以 ffmpeg2pass-4* 等开头的首轮文件

我的解决方案是在运行第二遍命令之前,使用每遍所需的新名称创建指向最初创建的文件集的软链接(soft link)。

ln -s ffmpeg2pass-0.log ffmpeg2pass-2.log
ln -s ffmpeg2pass-0.log.mbtree ffmpeg2pass-2.log.mbtree
ln -s ffmpeg2pass-0.log ffmpeg2pass-4.log
ln -s ffmpeg2pass-0.log.mbtree ffmpeg2pass-4.log.mbtree

这似乎有效,因为它产生了我需要的输出编码。不过,我不知道这个方法是否合法。通过使用一个比特率 (700k) 的第一遍输出作为其他比特率的第二遍编码的输入,我是否会获得次优的编码结果?

最佳答案

使用passlogfile option并在第一次传递时设置日志文件名。您可以在第二遍中使用相同的选项,并在多次第二遍中使用相同的日志文件。但是,您需要考虑诸如相同的 fps 和 bframe 等与第一遍相同的事情。

关于ffmpeg - 如何对多比特率输出文件使用 ffmpeg/x264 2-Pass 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480902/

相关文章:

c++ - x264 num_units_in_tick 无法正确设置

c++ - x264码率控制集

video - 在 Windows 7 上使用 MinGW 构建具有视频支持的 PJSIP

shell - 在滚动 ffmpeg 脚本生成的视频之前在第一帧暂停

ffmpeg - 将 H.264 附件 B 转换为 MPEG-TS

ffmpeg - 这个绿色和黄色的ffmpeg神器是什么原因造成的?

与 xfade 合并时,ffmpeg 失败并显示 "More than 1k frames duplicated"

video - FFmpeg 并不总是完全连接视频?

android-mediacodec - 如何找到 Google Pixel 2 手机的硬件解码器实例的上限

c - X264:如何编译具有 swscale 支持的 x264?