H.264标准码率控制算法步骤如下:
1.计算当前帧的目标码字,并将其限定到HRD的边界中。
2.通过线性模型(式4.5)预测当前帧中基本单元的MAD。
3.为未编码基本单元分配码字。
4.通过二次R.D模型计算相应的量化步长。
5.对基本单元中每个宏块进行RDO。
其中a1和a2是该预测模型中的两个参数。a1和a2的初始值设为1和0。当每个基本单元的编码结束后,他们值也会相应的更新。该线性预测模型能够解决编码过程中的蛋鸡悖论问题。
预测模型参数aI和a2更新方法分为三步,如下所述:
第一步一数据点选择:数据点是用于更新模型参数,数据点的数量以及质量对于模型的准确性有着重要的影响。通常而言,数据点越多,模型越准确。在JM86模型中,采用滑动窗口机制进行数据点的选择,窗口大小通常为20。
第二步一计算模型参数:根据选中的数据点,算法收集预测的MAD和实际MAD的值,采用线性回归的方法,计算得到a1和a2。
第三步一去除坏的数据点:在得到al和a2之后,根据滑动窗口中数据点的参考值,用q和口2形成的预测模型计算数据点的预测值,然后将得到的值与数据点的原始预测值比较,计算误差,如果误差大于一定的值(JM中取误差的均值),则将该数据点去除,用更新后的数据点重新计算模型参数al和a2。
JVT.G012所提出的码率控制流程包括GOP层码率控制和帧层码率控制(如果选择一帧作为一个基本单元。如果一个基本单元小于一帧,那么还需要再加一层的基本单元码率控制层)。下面将分析这些层的计算过程。
具体见《基于H.264标准的码牢控制研究》