在 FFmpeg 中使用 CRF 并使用 x264 设置最大比特率

在 FFmpeg 中使用 CRF 并使用 x264 设置最大比特率

我正在尝试将视频转码为 H.264/MP4。我正在使用该crf = 20选项,但根据要求,我还想将最大比特率限制为 3 MBit/s。

我试图通过使用x264opts这样的方式作弊

-x264opts crf=20:vbv-bufsize=14000:vbv-maxrate=3000:keyint=40

这是正确的做法吗?可以这样做吗?还是我只能使用恒定比特率,而不用 CRF?

答案1

使用-maxrate-bufsize强制 VBV(视频缓冲区验证器)限制输出比特率:

ffmpeg -i input.file -c:v libx264 -crf 20 -maxrate 3M -bufsize 6M output.mp4

3M = 3 mbit/s,您也可以使用 3000k(代表 3000 kbit/s)。根据您期望客户端能够缓冲多少来设置缓冲区大小。

本指南有关使用 x264 与 FFmpeg 的更多信息(尽管它没有提到 VBV 编码)。

答案2

这只是对其他阅读此文的人的一个公平警告;我注意到 VBV(ffmpeg -maxrate for x264)是远的与适当的 2 遍速率控制编码相比,它对丢弃的比特更加不加区分。一种更好的(但也更棘手、更昂贵)方法是使用 CRF 对整个视频进行编码,然后使用带比特率目标的 2 遍对有问题的峰值片段进行重新编码。

或者,使用对 capped CRF 具有更好编码器支持的较新的编解码器(例如 AV1)

相关内容