我们在一个视频会议项目中使用x264编码器,我们有基本的流视频工作,但是,我们在理解各种速率控制设置如何确定最终比特率时遇到了问题。我们设置了以下参数:
x264_param_t params;
x264_param_default_preset(¶ms, "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(¶ms, "baseline");如果我们只设置params.rc.i_bitrate参数,编码器似乎会大大超过比特率。如果我们设置i_vbv_max_bitrate & i_vbv_buffer_size参数,我们会看到比特率达到(有时会超调) i_vbv_max_bitrate设置。显然,严格控制biterate对于视频会议很重要,但文档有点不透明。还有人在使用x264进行视频会议吗?你是如何设置编码器的?如有任何帮助,请提前感谢。
发布于 2012-09-01 04:14:21
如果您处于低延迟视频会议模式,以获得最小的抖动和可靠的性能,则需要处于CBR模式而非VBR模式。VBR模式提供了实时低延迟系统无法处理的突起和峰值。
有专门的变比特率算法用于低延迟视频通信/生存应用,但x264没有。所以不要使用它的vbr。它的vbr是用于存储的。
有一个--a hrd cbr用于启用cbr
你不能保证比特率不会超过一个点,因为这是统计上的。但是,只要满足某些假设,您就可以在99%的时间内将其保持在控制之下。
你的vbv缓冲区大小需要是从质量角度来看你可以处理的最小大小,有两个目的1.不允许比特率有太大的变化2.减少端到端延迟这是编码器假设在解码器端可用的缓冲。它越小,质量就越差。找到您可以处理的最小值。
需要将vbv最大比特率设置为cbr目标比特率值。这是rc的指导原则,这是允许的最大瞬时比特率。将其设置为目标比特率。记住这是一个指导原则。由于视频的统计性质,它可能会被夸大。
请确保您有帧内刷新,因此I图片已关闭。
在不覆盖某些设置的情况下,Ultra fast可能不是一个很好的预设。明确设置你的参考图片,b-图片,个人资料。将你的me和subme设置为更高的级别。如果我是你的话就是最高级别。这就是为什么你会受到热捧的原因之一。因此,编码器不能很好地完成工作。当编码器有更好的我和subme时,它需要更少的比特来编码发生shootup的困难部分!一般来说,不懂视频的人不会明白这一点。他们一直在问为什么me/subme对比特率和shootups很重要。相信我,确实如此。
查看您需要处理的配置文件。Cabac提供高达20%的提升。所以,如果你能做main profile,那就做吧。只使用1张参考图片,没有B图片。但是,如果你可以使用cabac来获得比特率优势,那么使用cabac绝对没有坏处。
编辑:一般来说,没有什么神奇的药丸。以上是多年从事多媒体和理解视频工作中获得的建议。然而,您仍然需要尝试在质量/延迟和特定于您的系统的其他约束之间找到最佳设置。在调整它们之前,确保你理解了它们,否则你将永远在圈子里跑来跑去。还要记住,视频是统计的。没有什么是百分之百完美的。
https://stackoverflow.com/questions/12221569
复制相似问题