我正在尝试使用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编码,我会永远爱你!
答案 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开发人员的博客,你设置了:
最后,为-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应该是“接收客户端”的最大缓冲区大小。