x264中是通过qscale来进行码率控制,而非qp。
qscale是qp线性化计算的产物,qp线性化成qscale后可与bits存在对应关系:
若 qscale *= A,则 bits /= A
若 qscale /= A,则 bits *= A
即若qscale增长或降低A倍,那么以该qscale进行编码的帧的bits开销相应降低或增长A倍
但是我自己跑实验,好像并不符合这个理论。。。怎么搞得
/* Terminology:
* qp = h.264's quantizer
* qscale = linearized quantizer = Lagrange multiplier
*
* qp <==> qscale
*
*/
#define QP_BD_OFFSET (6*(BIT_DEPTH-8))
static inline float qp2qscale( float qp )
{
return 0.85f * powf( 2.0f, ( qp - (12.0f + QP_BD_OFFSET) ) / 6.0f );
}
static inline float qscale2qp( float qscale )
{
return (12.0f + QP_BD_OFFSET) + 6.0f * log2f( qscale/0.85f );
}