12

我正在尝试将带有 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 视频(使用命令)对视频进行编码时,我可以获得恒定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。怎么回事?这甚至不接近!

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

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

4

4 回答 4

7

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

这是我将低延迟 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 = 比特率 = B = 目标比特率
  • vbv-bufsize = B / fps(在本视频中为 24 fps)

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

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

于 2011-10-14T20:15:12.563 回答
4

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

于 2014-04-28T07:00:32.177 回答
0

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

于 2011-08-27T14:49:54.700 回答
0

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

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

于 2012-07-12T20:29:44.570 回答