x264码率控制

一 码率控制性

实际上h264标准并没有码率控制这一块内容,也就是说这个是x264自己实现的,和h264无关。当然我们自己也可以实现一种码率控制算法来控制编码码率。


二 x264码率控制

x264码率控制主要分为三种

ABR = average bitrate平均码率,编码出来的视频码率在一个恒定值左右波动

CRF=constant Rate Factor 缺省值23,恒定质量编码(运动/纹理复杂场景,码率上升。静态/纹理简单的画面,码率下降)

CQP=constant quantization parameter  固定的量化参数,会随着视频运动情况 码率会上升和下降。但是码率不可控,码率大小取决于残差大小。


三 x264码率控制源码分析

当设置了bitrate的时候,x264选取的ABR码率控制方式,当设置了固定qp的时候,x264选择的是CQP码率控制方式。当仅仅设置了maxbitrate-minbitrate的时候,x264选择的是CRF码率控制方式。

x264码率控制主要是通过宏块树和qcompress两种方法控制的。

qcompress码率控制作用强的时候,宏块树弱。(qcomp参数默认0.6,qcomp越大,qcomp控制码率越强,是比较老的码率控制方式)

意思就是qcomp降低高复杂度场景的质量,节约出来的码率用来提升低复杂度场景的质量!!!主要是因为高复杂场景就算损失一点质量也是难以视觉察觉的

,除非要帧帧去截图比较差不多。而且高复杂高动态场景分码率太多就太浪费了,而且从PSNR的好看角度来看也应该分配更少的码率给那些相对于静态

场景的区域。看来qcomp=0.60(mbtree=0)保持不变就好了,除非对那些复杂帧使用了高斯模糊(大概是降噪降细节降码率)防止局部码率波动过大

的情况下可以改变下qcomp的取值。

四 源代码

double q;
    if( h->param.rc.b_mb_tree )
    {
        double timescale = (double)h->sps->vui.i_num_units_in_tick / h->sps->vui.i_time_scale;
        q = pow( BASE_FRAME_DURATION / CLIP_DURATION(rce->i_duration * timescale), 1 - h->param.rc.f_qcompress );
    }
    else
        q = pow( rce->blurred_complexity, 1 - rcc->qcompress );

    //分别是mb_tree 宏块树和qcompress两种方法码率控制,计算出来q。

qcompress根据模糊复杂度计算出q。


四 实际使用

测试发现其实在复杂运动场景,qcomp调大一些画面会看得感觉更清晰一些,但是运动得时候块效应更严重


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值