用FFmpeg编码H.264 CBR视频

用FFmpeg编码H.264 CBR视频,ffmpeg,h.264,libx264,Ffmpeg,H.264,Libx264,我正在尝试以恒定的比特率将带有ffmpeg的视频编码到H.264(通过libx264库)。我知道,我知道,VBR通常是首选的,但对于这个特定的工作,我需要使用CBR(只要它是如此多的每秒千字节;它不必是精确的每帧千字节,afaik)。我用来测试的示例视频来自这里:(它来自) 使用MPEG-4视频编码视频时,我可以获得恒定的比特率(使用命令ffmpeg-I sample_iTunes.mov-b 819968-minrate 819968-maxrate 819968 out.mov),比特率与预

我正在尝试以恒定的比特率将带有ffmpeg的视频编码到H.264(通过libx264库)。我知道,我知道,VBR通常是首选的,但对于这个特定的工作,我需要使用CBR(只要它是如此多的每秒千字节;它不必是精确的每帧千字节,afaik)。我用来测试的示例视频来自这里:(它来自)

使用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。世界跆拳道联盟?还差一点

我尝试过改变很多参数,添加很多不同的东西,我花了两天时间在谷歌上搜索这个,但我似乎无法让它工作。如果我用MainConcept H.264编码器对视频进行编码,我可以得到一个恒定的比特率,但我需要它来处理ffmpeg


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

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

我也一直在努力将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)
最后,将ffmpeg开关设置为x264 of-tune zerolatency

希望这会有帮助。如果有人对此有改进,请务必告诉我

这可能是一个线索(假设您设置了比特率)“CBR是在设置了maxrate==比特率和bufsize时”


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

-bufsize 400000
之后指定
-nal hrd cbr

我仍然看到这些选项有很大的变化。但是,+1,因为它让我找到了一个在我的情况下确实有用的选项,
-muxrate
。这会将空填充添加到传输流中,以尝试实现您的CBR目标。这并不完美,但它让我离得足够近了。据我所知,
ffmpeg
实际上根本不支持CBR。最小值=平均值=最大值也不起作用。空填充尽可能接近。我可以使用这些选项so+1接近CBR。当设置为4000K时,我得到的是4000、3999.9和3999.8,所以不完全是CBR,但非常接近!如果音频同步问题需要23.976 FPS怎么办?您的命令将创建一个音频不同步的文件