使用 Windows ffmpeg 对 H264 进行编码会导致前几秒出现“块状”

使用 Windows ffmpeg 对 H264 进行编码会导致前几秒出现“块状”

我正在使用以下代码将 10mbps 高质量 1280x720 H264 mp4 转码为低质量 H264 mp4,并且在视频上带有我们的徽标水印。

ffmpeg.exe -i test.mp4 -i watermark.png -filter_complex overlay="(main_w)-(overlay_w):(main_h)-(overlay_h)" -c:v libx264 -profile:v main -preset slow -b:v 400k -r 30 -c:a libvo_aacenc -b:a 128k -s 1280x720 -movflags faststart -f mp4 "test-done.mp4"

这些设置有效精彩的经过大量调整后得到此代码,它可以生成清晰的高动作、静止图像、多种不同色彩等视频。

问题问题是,在视频的前几秒,视频流非常不连贯。然后,大约 3-5 秒后,视频流会“自行纠正”,视频变得清晰明了。通过将预设更改为“非常慢”来减慢渲染时间只能稍微改善前几秒,但会大大增加渲染时间。

我如何告诉 ffmpeg 更加关注视频的开头?我必须采用 2 遍编码吗?我不想将渲染时间增加近一倍,因为只有视频的前几秒存在这个问题。有人可以修改我的代码以在文件开头提供更好的编码吗?

作为参考,原始的 10mbps mp4 由 Premiere 5.0 编码,开始时没有块状现象。这是我在转码后使用 ffmpeg 才见到的现象。

答案1

感谢@LordNeckbeard 提供的解决方案。 ffmpeg 似乎使用-crf而不是 来编码 x264 效果更好-v:b

因此-crf 26可以完美地消除视频编码过程开始时的块状现象。

我的最终代码现在是:

ffmpeg.exe -i test.mp4 -c:v libx264 -crf 26 -c:a libvo_aacenc -movflags faststart -f mp4 "test-done.mp4"

相关内容