X264代码走读一(ABR算法码控)

本文深入探讨了x264视频编码器的码率控制机制,包括CRF、CQP、ABR和CBR等编码模式,重点解析了ABR算法的工作流程和实现细节,从图像复杂度评估到量化参数调整,再到自适应量化功能,全面覆盖了x264码控的关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、码控简介

x264码率控制主要分为单次编码(1pass)和多次编码(2pass)两大类,其中单次编码主要分如下三种:

  1. CRF(constant Rate Factor):恒定质量编码(运动/纹理复杂场景,码率上升;静态/纹理简单的画面,码率下降)
  2. CQP(constant quantization parameter):固定的量化参数,随着视频运动情况,码率会上升和下降。但是码率不可控,码率大小取决于残差大小。
  3. ABR(average bitrate):编码出来的视频码率在一个恒定值左右波动。该模式下,当目标码率和峰值码率配置相等的时候,就是CBR。

二、ABR算法简介

参考《X264的平均比特率控制算法优化》文档,知道X264的ABR码控流程如下:

 

 

算法公式如下:

三、实现过程

1)计算图像的satd

X264对当前图像做抽样滤波,得到分辨率是原来一半的小图。在小图上做半像素精度预测,与原图相减得到残差Xd,再对Xd做hadamond变换并求绝对和得到SATD。

1)x264_frame_init_lowres函数中会根据原图像生成一个宽高都为原图一半的子图像,保存在frame->lowres中。

2)x264_rc_analyse_slice获取当前帧的SATD。satd保存在frames->i_cost_est变量里面。frames->i_cost_est计算过程如下图所示:

2)计算图像模糊复杂度blurred_complexity

rate_estimate_qscale函数:

3)计算量化等级参数qscale。

get_qscale函数:

4)计算rate_factor

rate_estimate_qscale函数:

5)overflow计算

rate_estimate_qscale函数:

6)根据qscale计算QP

qscale2qp函数:

至此,初始帧级QP计算出来了。但是还需要根据实际编码码率和目标码率继续微调。

7)根据VBV buffer调整帧级QP

VBV(Video Buffering Verifier,视频缓存检验器),处理各帧编码后大小不一和恒定输出码率的矛盾。可将VBV想象一个水池,水池的入口连接着encoder的输出,出口为恒定码率的网络输出。为使输出恒定,encoder必须保证水池既不上溢也不下溢。下溢会导致无数据输出,上溢会导致数据丢失。所以encoder在编码一帧时会参考当前vbv的充盈情况,并由此计算出,当前帧应当编码出多少比特,从而保证既不上溢(增加QP)也不下溢(减少QP)。

clip_qscale函数

8)关于自适应量化功能

  • X264_AQ_NONE

        不开启AQ模式,帧内宏块全部使用同一QP或者固定的QP表

  • X264_AQ_VARIANCE

        使用方差动态计算每个宏块的QP。

        

  • X264_AQ_AUTOVARIANCE

        方差自适应模式,会先遍历一次全部宏块,统计出一些中间参数,之后利用这些参数,对每个宏块计算QP。

        

 

  • X264_AQ_AUTOVARIANCE_BIASED

         

x264_adaptive_quant_frame函数

 

六、参考

http://www.joca.cn/CN/abstract/abstract16235.shtml

https://blog.youkuaiyun.com/u011875342/article/details/78110181

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值