芯片码率控制使用说明
前言
本文档主要介绍芯片码率控制的参数意义和使用方法。对码率控制中常见的问题,特别是低码率场景的参数调节方法做了专题介绍。
说明:
未有特殊说明,Hi3516DV500、Hi3516CV610、Hi3511CV100与Hi3519DV500内容完全一致。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
码率控制参数的意义和使用方法
CBR参数说明及使用方法
表 1 CBR属性
一般场景设置为(GOP/输出帧率)即可;关注长期码率稳定,短期波动不在意的可以设置大一些,例:DVR存盘。设大可以提高重编码判决的门槛, 重编码次数会减少,但是码率波动会加大。 |
|||
表 2 CBR高级参数—帧级
控制I帧占比,限制静止场景I帧过大,可能会引起呼吸效应。如果I帧大小超出max_i_proportion倍P帧,则I帧QP会增加,从而限制I帧大小。 |
|||
限制最差的图像质量,当QP调整到这个值的时候,不会再往上调,可能会导致码率上冲。关注码率的场景设置成51,关注质量的场景根据需要设置。 |
|||
VBR参数说明及使用方法
表 1 VBR属性
表 2 VBR高级参数—帧级
ABR参数说明及使用方法
表 1 ABR属性
表 2 ABR高级参数一帧级
限制最差的图像质量,当QP调整到这个值的时候,不会再往上调,可能会导致码率上冲。关注码率的场景设置成51,关注质量的场景根据需要设置。 |
|||
AVBR参数说明及使用方法
表 1 AVBR属性
表 2 AVBR高级参数—帧级
QVBR参数说明及使用方法
表 1 QVBR属性
表 2 QVBR高级参数—帧级
CVBR参数说明及使用方法
表 1 CVBR属性
长期码率的统计时间:最大值1440,单位由高级属性long_term_stats_time_unit确定,默认为分钟(即60秒),算法尽量使该统计时间内的平均码率不超过long_term_max_bit_rate。 |
|||
如果需要尽量节省码率,long_term_min_bit_rate可设为0。如果需要最终平均码率为固定植,可将long_term_max_bit_rate |
表 2 CVBR高级参数—帧级
宏块级码率控制参数说明及使用方法
宏块级码率控制参数如表1所示。
表 1 宏块级码率控制参数
码率过高丢帧参数及使用说明
码率过高丢帧参数如表1所示。
表 1 码率过高丢帧参数
超大帧策略高级参数及使用说明
超大帧策略高级参数如表1所示。
表 1 超大帧策略高级参数
GOP结构参数的意义和使用方法
单参考P帧GOP结构属性说明及使用方法
单参考P帧编码GOP结构参数如表1所示。
表 1 单参考P帧编码GOP结构参数
双参考P帧GOP结构属性说明及使用方法
双参考P帧编码GOP结构参数如表1所示。
表 1 双参考P帧编码GOP结构参数
在一个GOP中,按照固定间隔编码一些质量更好的P帧,称为Special P帧。通过时域参考的相关性,提升编码整体图像质量。 |
|||
智能P帧GOP结构属性说明及使用方法
说明:
Hi3519DV500/Hi3516CV610/Hi3511CV100不支持adv_smart_p。
smart_p/adv_smart_p智能P帧编码GOP结构参数如表1所示。
表 1 smart_p/adv_smart_p智能P帧编码GOP结构参数
虚拟I帧仅参考长期参考帧,可以独立解码。用于错误恢复或播放器Seek。在smart_p帧编码模式下,虚拟I帧的间隔等于gop。 |
B帧GOP结构参数说明及使用方法
说明:
此小节 Hi3519DV500/Hi3516CV610/Hi3511CV100不支持。
B帧编码GOP结构参数如表1所示。
表 1 B帧编码GOP结构参数
码率控制专题
码率更稳定
码率更稳定方法参见表1。
表 1 码率更稳定方法
图像质量提升
提升图像质量方法参见表1所示。
表 1 提升图像质量方法
ot_venc_h264_cbr_param::max_qp ot_venc_h265_cbr_param::max_qp |
调节呼吸效应
调节呼吸效应方法参见表1。
表 1 调节呼吸效应方法
限制I帧幅度
限制I帧幅度参见表1。
表 1 限制I帧幅度方法
减少运动拖影和色度拖影
运动拖影主要发生在纹理比较平坦的区域,减少运动拖影可以调整纹理级宏块码率控制参数。减少色度拖影可以调整色度量化参数偏移,参见表1。
表 1 减少运动拖影和色度拖影的方法
通常情况纹理简单的静止区域更容易出现拖影,通过纹理级码率控制可以降低简单区域的QP,减少拖影,但是纹理复杂的区域会相应减少比特分配,降低图像质量。 |
||
ot_venc_h264_trans::chroma_qp_index_offset |
||
码率控制的起始QP
当前码率控制算法内部包含起始QP的经验算法。该算法选择典型场景根据码率、分辨率等计算合适的起始QP,但是不能得到适应每个场景的绝对合适的起始QP值。
- 如果起始QP选择偏大,会导致编码的最初一段时间内码率不足,图像质量稍差;
- 如果起始QP选择偏小,会导致编码的最初一段时间码率超出。
- 如果客户觉得我们算法计算的经验值不合适,可以通过ot_venc_rc_param::first_frame_start_qp配置合适的起始QP值。该接口在创建通道后,开始第一帧编码之前调用有效。
VBR、AVBR、CVBR和QVBR的运行机制
- VBR的运行机制:运动场景等编码压力大的时候,通过调节start_qp使码率不超出最大码率;静止等编码压力小的时候,start_qp钳位到min_qp,此时码率会低于最大码率,达到节省码率的目的;
- AVBR的运行机制:编码增加运动检测方法,在运动时调高目标码率,并控制start_qp使码率不超出最大码率;静止时调低目标码率,达到节省码率的目的;但降码率会在某些场景下轻微损失一些图像细节。
- QVBR的运行机制:利用PSNR客观图像评价指标,动态调整码率,在PSNR较小时主动升高目标码率,PSNR较大时主动降低目标码率,达到节省码率和保证图像质量的双重目的。
- CVBR的运行机制:设置了瞬时,短期与长期码率的限制,在场景简单时存储码率,存储的码率用于提升复杂场景的图像质量,从而保证图像质量的长期平稳。
VBR、AVBR、CBR和CVBR的差异
- VBR和AVBR的差异:VBR是被动节省码率而AVBR是主动节省码率;在静止时AVBR使用的QP可以高于min_qp,从而在静止时节省更多码率。AVBR可主动向上向下双向动态调整码率,从而保证编码图像质量平稳。
- CVBR和VBR的差异:CVBR与VBR一样追求较平稳的图像质量,但增加了在不同统计时间内的码率限制,以分别满足传输带宽和储存空间的限制。
- CVBR和AVBR的差异:CVBR输出码率的变化不依赖于运动检测,而是根据场景情况带来的编码压力自动变化;同时,CVBR追求在编码压力变化时达到较平稳的图像质量,使用长期码率的统计,并在长期码率满足用户要求的前提下,对目标码率进行调整,以尽量满足图像质量平稳的要求。
- CVBR和CBR的差异:CBR的输出不区分场景,即在场景简单时不会降低码率,场景复杂时不能使用额外码率。而CVBR的码率根据场景而自动变化,即在场景简单时会降低码率,场景复杂时能使用额外码率,最终达到更稳定质量,且平均码率不超过目标码率的效果。
低码率场景
-
降低ISP模块AE的灵敏度,增大AE反应延迟,避免光线明暗变化后AE的频繁调节。
建议参数:
适当增加AE从亮到暗及从暗到亮调节的延迟。
适当降低AE变化敏感度。
-
增加3DNR去噪强度,适当增加TF和SF强度;适当降低Sharpen强度,降低图像细节。
建议参数:
适当增大SF(空域滤波强度)和TF(时域滤波强度);调整的时候注意保持SF大约是TF的4倍。
-
设置较大的GOP,同时码率统计时间stats_time与GOP值设置相匹配。使用SmartP/AdvSmartP模式,bg_interval应该与stats_time相匹配。
建议参数:
GOP设置为帧率的4~10倍,例如帧率30fps,GOP设置为120~300,stats_time设置为4~10秒。
-
适当降低帧率,或者设置编码PSkip的方式降低帧率。
建议参数:
目标帧率设置为15fps;
ot_venc_frame_lost_strategy::mode= OT_VENC_FRAME_LOST_P_SKIP;
ot_venc_frame_lost_strategy::frame_gap = 2。
-
打开基于纹理的宏块级码率控制,设置推荐参数即可。
- 对于固定安装_录像机_等偏静止场景,建议使用SmartP/AdvSmartP模式编码;对于镜头有运动但对延时要求不高的场景建议使用BipredB模式编码;对于其他场景建议使用DualP模式编码。
注意事项
注意事项如下:
- gop:最好设置为编码帧率的整数倍,如果不是整数倍,I帧的分布在时间上会不均匀,导致瞬时码率波动;中高码率下GOP可以等于编码帧率;低码率下 g需要适当加大。
- stats_time:设置为(GOP/编码帧率)的整数倍,例如帧率25fps,GOP50,统计时间应该设为2秒、4秒等;统计时间与GOP不匹配会导致瞬时码率不稳定,导致图像质量也不稳定;一般场景设置为GOP的1倍即可,关注长期码率稳定,短期波动不在意的可以设置大一些。点播场景如果使用请求I帧接口会造成短时间码率过冲,增加统计时间可以减少码率过冲造成的QP变化,使图像质量更稳定。
- src_frame_rate:设置为VI的帧率,编码内部帧率控制会校验时间戳来计算是否丢帧,时间戳是VI采集的时候打上的,因此src_frame_rate要与VI实际的帧率保持一致;src_frame_rate如果与VI实际帧率不一致,实际码率与目标码率会不一致。
- max_i_proportion:对超出P帧大小max_i_proportion倍的I帧进行限制,这个功能可以有效抑制静止场景下I帧的大小;
- max_qp、max_i_qp:对最大QP进行限制。偏重码率,不在意质量的建议值51;关注质量,不在意码率上冲的可以设置为[40,51];
- min_qp、min_i_qp:对最小QP进行限制。希望在图像静止或小运动的时候节省码率,CBR建议设置为[10,20];VBR建议设置为[24,32]。
- 超大帧丢帧是丢弃已经编码的当前帧;码率过冲丢帧是丢弃下一帧。两种丢帧方法不矛盾,可以配合使用。
- ROI和OSD保护可能会影响到码率控制,如果在低码率场景设置了面积较大、QP值较小的ROI或OSD保护,会降低整体图像质量;也可能会造成码率过冲。
- CVBR模式中,对于较简单场景,最终码率有可能低于long_term_min_bit_rate。
- CVBR的min_i_qp和min_qp对码率控制的效果有影响。如果min_i_qp和min_qp设置过小,则简单静止场景码率始终无法节省,复杂运动场景也无法使用更多码率编码,导致CVBR的效果接近CBR。如果min_i_qp和min_qp设置过大,会影响图像质量,码率始终低于long_term_max_bit_rate,不能完全使用码率额度,造成图像质量不够好。min_i_qp和min_qp的一组推荐值如表1,具体针对不同场景使用时客户可以在此基础上调整。
- ABR码控的适用场景:监控场景(动静结合)、瞬时运动场景、云台转动场景。
- ABR码控的副作用:对于一段时间内有长期较为复杂的场景时,ABR码控存在码率耗尽过快的情况,后期一段时间内的瞬时码率相对CBR一段时期恒定平稳的瞬时码率少,会存在一些运动过后糊、缺块等图像质量质量问题。
- ABR码控GOP配置注意:由于ABR的码率控制需要统计P帧的码率,因此无法适配GOP=1的参数配置,当GOP=1时,ABR码控调节机制失效。
表 1 CVBR的min_i_qp和min_qp参数推荐值