x264速率控制

时间:2012-08-31 19:40:33

标签: video-streaming x264 bitrate

我们在视频会议项目中使用x264编码器,我们有基本的流视频工作,但是,我们无法理解各种速率控制设置如何确定最终比特率。 我们设置了以下参数:

x264_param_t params;
x264_param_default_preset(&params, "ultrafast", "zerolatency");
params.i_threads = 1;
params.i_width = width;
params.i_height = height;
params.i_fps_num = fps;
params.i_keyint_max = fps;
params.b_intra_refresh = 1;
params.b_repeat_headers = 1;
params.b_annexb = 1;

//Set rate control stuff here

x264_param_apply_profile(&params, "baseline");

如果我们只设置params.rc.i_bitrate参数,则编码器似乎会大大超过比特率。如果我们设置i_vbv_max_bitrate& i_vbv_buffer_size参数我们看到比特率为i_vbv_max_bitrate设置的峰值(有时会超调)。显然,严格控制biterate对于视频会议很重要,但文档有点不透明。还有其他人使用x264进行视频会议吗?你是如何设置编码器的?任何帮助表示感谢,提前谢谢。

1 个答案:

答案 0 :(得分:5)

如果您处于低延迟视频会议模式以获得最小的抖动和可靠的性能,则需要处于CBR模式而不是VBR模式。 VBR模式可以提供实时低延迟系统无法处理的拍摄和峰值。

对于低延迟视频通信/幸存应用程序,有专门的vbr算法,但x264没有。所以不要使用它的vbr。它的vbr用于存储。

有一个--nal-hrd cbr来启用cbr

你无法保证比特率不会超过一分,因为事情是统计的。但是,只要满足一些假设,您就可以在99%的时间内控制它。

您的vbv缓冲区大小需要是您可以从质量角度处理的最小尺寸,用于两个目的 1.比特率不允许太大的变化 2.减少端到端延迟 这是编码器假定在解码器侧可用的缓冲。质量越小越好。找到您可以处理的最小值。

需要将vbv max比特率设置为cbr目标比特率值。这是rc的指导原则,这是您允许的最大瞬时比特率。将其设置为目标比特率。记住它的指导方针。由于视频的统计性质,它可能会超出。

确保您有帧内刷新,因此我的图片已关闭。

如果没有覆盖某些设置,超快速可能不是一个好的预设。明确设置参考图片,b图片,配置文件。 把你和subme设置到更高的水平。 [如果我是你,最高级别]。这是你获得射击的一个原因。由于这个原因,编码器无法做好工作。当编码器有更好的我和subme它需要较少的位来编码发生射击的硬件!一般来说,不懂视频的人不会得到这个。他们一直在问为什么我/ subme对于比特率和射击很重要。相信我,它。当硬编码进行编码时,您获得多少拍摄完全取决于编码器的算法,而我是关键的一个。

查看您需要使用的个人资料。 Cabac提高了20%。所以,如果你能做主要的个人资料,那就去做吧。仅使用1个参考图片而不使用B图片。但如果可以使用cabac,那么使用cabac绝对没有害处。

编辑: 一般来说,没有神奇药丸。以上是多年从事多媒体和理解视频的建议。但是,您仍需要进行一些操作才能找到质量/延迟与特定于系统的其他约束之间的最佳设置。确保您在调整条款之前了解这些条款,否则您将永远在圈子中运行。还记得视频是统计的。没有什么比100%完美了。