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

时间:2012-09-18 16:11:46

标签: ffmpeg x264

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

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 *等开头的文件。

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

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)的第一次通过输出作为其他比特率的第二次通过编码的输入,我得到次优编码结果吗?

1 个答案:

答案 0 :(得分:1)

使用passlogefile选项并在第一次传递时设置日志文件名。您可以在第二次传递中使用相同的选项,并使用相同的日志文件进行多次传递。但是你需要考虑相同的fps和bframes与第一次传递相同。