使用FFmpeg编码H.264 CBR视频

时间:2011-08-19 17:50:42

标签: ffmpeg h.264 libx264

我正在尝试使用ffmpeg将视频编码为具有恒定比特率的H.264(通过libx264库)。我知道,我知道,VBR通常是首选,但对于这个特定的工作,我需要使用CBR(只要它是每秒这么多千字节;它不必是每帧精确的千字节,afaik) 。我用于测试的示例视频来自此处:http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iTunes.mov.zip(来自http://support.apple.com/kb/HT1425

使用MPEG-4 Video(使用命令ffmpeg -i sample_iTunes.mov -b 819968 -minrate 819968 -maxrate 819968 out.mov)对视频进行编码时,我可以获得恒定的比特率,并且比特率是预期的。通过QuickTime Inspector读取视频的规格,它的数据速率为844.94 kbit / s。凉。

但是,当我将编解码器更改为libx264时,它似乎完全忽略了我的比特率请求!我正在尝试的命令是“ffmpeg -i sample_iTunes.mov -vcodec libx264 -vpre medium -b 819968 -vb 819968 -minrate 819968 -maxrate 819968 -bufsize 400000 test.mov”。但是当我通过QuickTime Inspector检查视频的规格时,它的数据速率为254.74 kbit / s。 WTF?那甚至不是很接近!

我尝试过更改这么多参数并添加大量不同的东西,我花了2天时间用Google搜索,但我似乎无法让它工作。如果我使用MainConcept H.264编码器对视频进行编码,我可以得到一个恒定的比特率,但我需要这个才能使用ffmpeg。

如果有人可以帮我弄清楚如何用FFmpeg进行CBR H.264编码,我会永远爱你!

4 个答案:

答案 0 :(得分:6)

我也一直在努力尝试让CBR脱离x264。我发现Dark Shakari的这篇博客post非常有趣。

以下是我对低延迟CBR视频到MPEG传输流的看法:

ffmpeg -i sintel_trailer-720p.mp4 -an -tune zerolatency \
       -x264opts bitrate=4000:vbv-maxrate=4000:vbv-bufsize=166 \
       -vcodec libx264 -f mpegts -muxrate 4000K -y trailer.ts

根据x264开发人员的博客,你设置了:

  • vbv-maxrate = bitrate = B =目标比特率
  • vbv-bufsize = B / fps(在此视频的情况下是24 fps)

最后,为-tune zerolatency的x264设置ffmpeg开关。

希望这有帮助。而且,如果有人对此有所改进,请告诉我!

答案 1 :(得分:4)

-nal-hrd cbr之后指定-bufsize 400000

答案 2 :(得分:0)

好的,所以我想我可能已经找到了部分问题。使-bufsize大于数据速率似乎已经解决了这个问题。当然,我不知道它是否正在编码真正的 CBR,但Quick Time Inspector现在读取的数据速率看起来不错。

答案 3 :(得分:0)

这可能是一个线索(假设您有比特率设置)“CBR是maxrate == bitrate并且bufsize设置为”http://ffmpeg-users.933282.n4.nabble.com/Does-constant-bitrate-exist-in-libx264-td2255554.html

bufsize应该是“接收客户端”的最大缓冲区大小。