QP原理讲解
一.什么是QP调节
QP参数调节,指的是量化参数调节。它主要是来调节图像的细节,最终达到调节画面质量的作用。QP值和比特率成反比,QP值越小,码率越高,画面质量越好;反之QP值越大,码率越低,画面质量越低,而且随着视频源复杂度,这种反比的关系会更加明显。但是要注意的是,在设置QP值的时候会容易造成码率的波动,有时候画面质量提升了会导致码率大幅度提升,所以在提升画面质量的时候也需要考虑码率的情况。在编码中,亮度的QP最大值是51、色度的QP最大值是39,在真正开发中调节亮度的QP值为主。
QP与码率成反比示意图:
二.QP调节的基本概念
QP调节一般由QStep(调节的是整体画面)、MinQp、MaxQp(细节有这两个参数进行调节)这三个参数进行调节。下面我们来看看,这三个参数的作用。
2.1、Q_Step
QStep指的是量化步长,QStep随着QP的增加而增加。每当QP值增加6,QStep增加一倍。在一般的编码器,H264/H265采用的是标量量化技术,用数学表达式就是:FQ = round(y/QStep)(FQ是量化的值、y是输入样本点编码、QStep是量化步长、round是取整函数)。QP值越小,整体画面越精细,否则越粗糙;QP的取值范围是[0,51],当值为0的时候表示画面最精细,当值为51的时候画面最粗糙。
如图取样点有10个取样点,通过调节量化步长,来根据公式计算出的FQ的值,Fq(量化程度参数,)的值越大相当于质量越高(调节效果越明显),所以Q_STEP越小质量越高;而Q_step和QP属于线性关系,QP值越小,画面质量越高。
2.2. minqp最小量化步长
设置最小量化器,限制最好的图像质量(重点在静止画面),当QP达到这个值的时候,数值不会变。这就会使得在静止场景下,码率到达一定数量后不会进行调整。minqp越小,静止时候码率越大,质量越好,minQp取值范围是[0,48]。下面就是利用minQp做静止画面调节的细节,minqp越大,静止画面的质量越低。
2.3. maxqp最大量化步长
设置最大量化器,最大QP值,限制最差的画面(重点在运动的时候),maxQp越小,运动时候码率就越大,质量相对越好。同样道理,当运动情况下到达一定码率后就不会调整,取值范围是[8,51]。下面就是利用maxQp做运动画面调节的细节。
三、QP参数讲解
1、RV1126的QP调节参数结构体
上面就是QP调节的结构体VENC_RC_PARAM_S,这个结构体有一个公用的参数就是s32FirstFrameStartQp(初始化QP值)、还有Union联合体里面的三个通道参数的结构体,分别是stParamH264(H264的QP调节参数)、stParamH265(H265的QP调节参数)、stParamMjpeg(mjpeg的QP调节参数),这三个结构体分别对应不同的编码格式的QP调节参数。s32FirstFrameStartQp值一般填-1,-1代表的是第一帧的起始QP由编码器内部进行计算。若是其他值,则由用户指定该合法值为第一帧起始QP。注意:当VENC没有进行QP量化参数调节的时候,所有参数都是默认最差值,比如:maxQp默认值是51、minQp默认值是48、maxIQp默认值是51、minIQp默认值是48。
1.1.H264的QP参数结构体的讲解(VENC_PARAM_H264_S):
MAXQP是调节运动的,MINQP是调节静止的;
上面是H264的QP调节参数
H264的码流结构,I帧是一个完整的画面,P帧需要参考前一帧的画面;每一个帧都可以进行QP量化调节,以下的三个API都是对p或者I进行QP调节
1.1.1. u32StepQp:QP的Step步长的整数,QStep的值越小,画面整体质量越好,相反值越大画面总体质量越粗糙。注意:这里的值填整数,所以QStep的值最小是1,最大值是224
1.1.2. u32MaxQp:主要是调节P帧、B帧的最大QP值(最主要还是P帧),取值范围是[8,51]。当u32MaxQp等于8的时候,P帧在运动画面的时候画面调节最好,但是码率最高;相反当u32MaxQp等于51的时候P帧在运动调节的时候效果最差,但是码率最节省。
1.1.3.u32MinQp:主要是调节P帧、B帧的最小QP值(最主要还是P帧),取值范围是[0,48]。当u32MinQp等于0的时候,P帧在静止画面的时候画面调节最好,但是码率最高;相反当u32MinQp等于48的时候P帧在静止画面调节的时候效果最差,但是码率最节省。
1.1.4.u32MaxIQp:主要是调节I帧的最大QP值,取值范围是[8,51]。当u32MaxIQp等于8的时候,I帧在运动画面的时候画面调节最好,但是码率最高;相反当u32MaxIQp等于51的时候P帧在运动调节的时候效果最差,但是码率最节省。
1.1.5u32MinIQp:主要是调节I帧的最小QP值(最主要还是P帧),取值范围是[0,48]。当u32MinIQp等于0的时候,I帧在静止画面的时候画面调节最好,但是码率最高;相反当u32MinIQp等于48的时候I帧在静止画面调节的时候效果最差,但是码率最节省。
1.2.H265的QP参数结构体的讲解(VENC_PARAM_H265_S):
1.2.1.u32StepQp:QP的Step步长,QStep的值越小,画面整体质量越好,相反值越大画面总体质量越粗糙。注意:这里的值填整数,所以QStep的值最小是1,最大值是224
1.2.2.u32MaxQp:主要是调节P帧、B帧的最大QP值(最主要还是P帧),取值范围是[8,51]。当u32MaxQp等于8的时候,P帧在运动画面的时候画面调节最好,但是码率最高;相反当u32MaxQp等于51的时候P帧在运动调节的时候效果最差,但是码率最节省。
1.2.3.u32MinQp:主要是调节P帧、B帧的最小QP值(最主要还是P帧),取值范围是[0,48]。当u32MinQp等于0的时候,P帧在静止画面的时候画面调节最好,但是码率最高;相反当u32MinQp等于48的时候P帧在静止画面调节的时候效果最差,但是码率最节省。
1.2.4 u32MaxIQp:主要是调节I帧的最大QP值,取值范围是[8,51]。当u32MaxIQp等于8的时候,I帧在运动画面的时候画面调节最好,但是码率最高;相反当u32MaxIQp等于51的时候P帧在运动调节的时候效果最差,但是码率最节省。
1.3MJPEG的QP参数结构体的讲解(VENC_PARAM_MJPEG_S):
四、RV1126的QP调节参数的API
第一个参数:VENC_CHN是编码通道号
第二个参数:VENC_RC_PARAM_S的结构体指针