x264帧预测大小原理
代码如下:
static float predict_size( predictor_t *p, float q, float var )
{
return (p->coeff*var + p->offset) / (q*p->count);
}
根据x264码率控制理论
假定q不变,位率与复杂度成正比,复杂度不变,位率与q成反比,右边coeff是一个常数系数。
x265有如下代码:
double new_coeff = X265_MAX((bits * q - old_offset) / var, p->coeffMin );
假设offset=0,则有
那么有了以上公式,如何衡量公式的准确性和误差:
offset就是衡量上面公式的误差,其中求取q的公式已在参考资料中给出,var和bits可通过计算和编码得到,offset,coeff可通过迭代法求取,并不断修正公式误差:
预测每帧大小代码(p->coeff * var + p->offset) / (q * p->count);转化公式为
coeff,offset除count,就变成平均coeff,offset,左边通过已编码帧加权平均bits与当前帧的var(satd)和q来缩放到当前的bits,右边是一个偏置项(类似机器学习),表示预测当前帧的大小与实际编码大小的累计加权平均偏移。
参考资料: