x264码率控制方法:采用的码率控制算法并没有采用拉格朗日代价函数来控制编码,而是使用一种更简单的方法,即利用半精度帧的SATD(sum of absolute transformeddifference)作为模式选择的依据。SATD即将残差经哈德曼变换的4×4块的预测残差绝对值总和,可以将其看作简单的时频变换,其值在一定程度上可以反映生成码流的大小。SATD是将残差经哈达曼变换4*4块的预测残差绝对值总和。自适应宏块层码率控制策略:X264的宏块没有任何码率控制的机制,其在帧层得到一个QP后,属于该帧的所有宏块都用着统一的QP进行量化。
x264码率控制的过程基本是有以下三步:
1.对码率控制的相关变量进行初始化,如,I,P,B的初始QP值,RC的方式,VBV的初始状态等等;
2.获取编码帧的复杂度,x264用SATD表示,对于采用的不同参数的码率控制的方式,由前面已编码的Bits,复杂度,目标比特的设置等一些条件来获取编码当前帧的qp值。
3.在编码过程中,由获得qp值得到预测的bits;
x264中码率控制的相关函数:
1.在进行编码时,Encode--->x264_encoder_open(主要是进行参数的修订设置,进行初始化)---->x264_ratecontrol_new
2.encode--->Encode_frame--->x264_encoder_encode--->x264_slicetype_decide-->x264_ratecontrol_slice_type
3.encode--->Encode_frame--->x264_encoder_encode--->x264_ratecontrol_start
4.encode--->Encode_frame--->x264_encoder_encode--->x264_ratecontrol_qp
5.encode--->Encode_frame--->x264_encoder_encode--->x264_slices_write--->x264_slice_write-->x264_ratecontrol_mb
6.encode--->Encode_frame--->x264_encoder_encode--->x264_encoder_frame_end-->x264_ratecontrol_end(在编完一帧过后)
7.在编完过后,encode--->x264_encoder_close---->ratecontrolsummary/x264_ratecontrol_delete