4. 码率控制专题

4.1. 码率稳定

  • 设置码率超出阈值丢帧,可以在图像变动剧烈时减少瞬时码率波动且维持图像质量

  • 建议设置:

VENC_FRAMELOST_S::bFrmLostOpen = TRUE
VENC_FRAMELOST_S::u32FrmLostBpsThr = u32BitRate * 1.2
VENC_FRAMELOST_S::enFrmLostMode = FRMLOST_PSKIP
VENC_FRAMELOST_S::u32EncFrmGaps = 1

4.2. 图像质量提升

  • u32MaxIQp,u32MaxQp为限制宏块最大QP参数。设置较低最大QP参数可确保低码率编码或场景剧烈变化时图像质量受到保证,同时也容易造成码率过冲。建议依照应用需求调整适当的最大QP

4.3. 调节呼吸效应

  • s32IPQPDelta为IP帧之间的QP差值。设置差值适当时可以减少呼吸效应。当场景为静态时建议设置较大的差值。静态场景建议值:[2, 6], 动态场景建议值:[2, 4]

  • 低照场景画面躁声较大时, 可以稍微降低s32IPQPDelta. 藉由降低I帧码率以提高P帧码率可避免高质量I帧引入过多躁声造成呼吸效应。

4.4. 限制I帧幅度

  • 设置I帧最小QP有机会降低I帧码率, 但有降低画面质量风险。使用上不容易控制,需要对场景有使用上的经验才可以有较佳的设定。码率过高情况仍可能发生。

4.5. 减少运动拖影

  • 透过纹理级码率控制可以有效减少容易察觉的平坦区域拖影,可以适当微调整纹理宏块级码率控制参数减少平坦区域拖影且增加细节。同时因增加复杂纹理区域QP使该区域失真较多。建议依照目标码率及场景调整取得平衡。

4.6. 减少色度偏移

  • cb_qp_offset,cr_qp_offset为色度质量调整参数。藉由降低色度QP增加色度图像质量,减少图像色偏现象。同时可能降低亮度图像。建议依照目标码率及场景调整取得平衡。

4.7. 码率控制的起始QP

  • 合适的起始QP应考虑场景,码率,分辨率等来设置。用户可以通过VENC_RC_PARAM_S::s32FirstFrameStartQp配置合适的起始QP值。该接口在创建通道后,开始第一帧编码之前调用有效。

4.8. 低码率场景

  • 打开基于纹理的宏块级码率控制,设置推荐参数或适当微调。例如室外场景设置u32ThrdLv=3

  • 依照场景适当降低帧率。例如目标帧率设置为20fps。

  • 设置编码PSkip的方式动态降低帧率VENC_FRAMELOST_S::enFrmLostMode = FRMLOST_PSKIP;VENC_FRAMELOST_S::u32EncFrmGaps = 1。

  • 设置较大的Gop,并且码率统计时间u32StatTime建议与Gop值设置相匹配。Gop建议设置为帧率的5~10倍,例如帧率=30fps,Gop设置为150~300,u32StatTime设置为5~10秒。

  • 对于固定安装摄像头等偏静止场景,建议使用SmartP模式。编码当使用SmartP模式时,u32BgInterval应该与u32StatTime相匹配。

  • 降低ISP模块AE的灵敏度,增加AE反应延迟可避免光线明暗变化后AE的频繁调节。

  • 增加3DNR去噪强度,并适当降低Sharpen强度,降低图像细节。

4.9. 注意事项

  • u32Gop:建议设置为编码帧率的整数倍,如果不是整数倍会因I帧的在时间上分布不均匀而导致瞬时码率波动。

  • u32StatTime:建议设置为(Gop/fps)的整数倍,例如帧率30fps,Gop=60,统计时间应该设为2秒的整数倍。如果不是整数倍码率可能会不太准确。

  • u32MaxIQp,u32MaxQp:帧内最大QP进行限制。关注质量时建议设置为[40, 46],而较容易出现码率上冲。

  • u32MinQp、u32MinIQp:帧内最小QP进行限制。适当设置能够在图像静止或小运动的时候节省码率。

  • ROI设置Qp过低时会影响码率控制稳定度。应根据目标码率适当设置ROI。

  • OSD图像通常为边缘较锐利的字体, 若OSD区域过大可能会增加编码压力。