一.什么是QP调节?
QP参数调节,指的是量化参数调节。它主要是来调节图像的细节,最终达到调节画面质量的作用。QP值和比特率成反比,QP值越小画面质量越高;反之QP值越大,画面质量越低。而且随着视频源复杂度,这种反比的关系会更加明显。QP调节是改变画面质量最常用的手段之一。
二.QP调节的基本概念
QP调节一般由QStep、MinQp、MaxQp这三个参数进行调节。下面我们来看看,这三个参数的作用。
2.1. QStep:
QStep指的是量化步长,QStep随着QP的增加而增加。每当QP值增加6,QStep增加一倍。在一般的编码器,H264/H265采用的是标量量化技术,用数学表达式就是:FQ = round(y/QStep),下面是QP值和QStep的对应关系图。QP值越小,整体画面越精细,否则越粗糙。
2.2. minqp最小量化步长
设置最小量化器,限制最好的图像质量(重点在静止画面),当QP达到这个值的时候,数值不会变。这就会使得在静止场景下,码率到达一定数量后不会进行调整。minqp越小,静止时候码率越大,质量越好,建议值[8,20]。
2.3. maxqp最大量化步长
设置最大量化器,最大QP值,限制最差的画面(重点在运动的时候),maxQp越小,运动时候码率就越大,质量相对越好。同样道理,当运动情况下到达一定码率后就不会调整。建议值[20,50]
这张图是运动场景和静止场景时候用QP值的调试
三.RV1126中QP值的调节
u32ThrdI、u32ThrdP:分别衡量I帧、P帧宏块复杂的一组阈值。这组阈值是从小到大依次排序,每个阈值的取值是[0,255]。这组阈值主要用于宏块级别的码率控制,并根据图像复杂程度对每个宏块进行QP调节。这部分大部分也用在CBR上面。
u32ThrdI默认值:[0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25]
u32ThrdP默认值:[0,0,0,0,3,3,5,5,8,8,8,15,15,20,25,25]
注意:u32ThrdI、u32ThrdP在一般情况下不需要设置
u32RowQpDeltaI: 基于行的宏块级别码率控制,每一行的宏块的起始QP相对于I帧的QP波动幅度值,主要用在CBR控制模式。对于码率波动比较严格的场景下,可以通过调节这个参数使得码率控制更加精确。在高码率时,该值推荐为 0;中码率时推荐该值为 0 或 1;低码率时推荐 该值为 2~5。
u32RowQpDeltaP: 基于行的宏块级别码率控制,每一行的宏块的起始QP相对于P帧的QP波动幅度值,主要用在CBR控制模式。对于码率波动比较严格的场景下,可以通过调节这个参数使得码率控制更加精确。在高码率时,该值推荐为 0;中码率时推荐该值为 0 或 1;低码率时推荐 该值为 2~5。
下面的表格就是来解释哪些范围是高码率,中码率,低码率
s32FirstFrameStartQp:第一帧QP值,默认-1。-1代表的是第一帧的起始QP由编码器内部进行计算。若是其他值,则由用户指定该合法值为第一帧起始QP。
stParamH264:主要是调节H264的QP参数
stParamH265:主要是调节H265的QP参数
stParamMjpeg:主要是调节Mjpeg的QP参数
RK_S32 RK_MPI_VENC_SetRcParam(VENC_CHN VencChn, const VENC_RC_PARAM_S *pstRcParam)
第一个传参数:Venc编码通道号
第二个传参数:VENC_RC_PARAM_S结构体指针
3.1. H264的QP调节参数
u32StepQp: QP的STEP步长,STEP步长去调节QP值
u32MaxQp****:QP的最大值,对运动画面进行限制,若忽视码率则建议51;若对质量讲究,则建议设置[20,51]。取值范围[8,51]。
u32MinQp****:QP的最小值,希望在静止画面的时候节省码率,取值范围[0,48]。VBR建议设置为[24,32],CBR建议设置[10,20]
u32MaxIQp: I帧的QP最大值,取值范围[8,51],图像运动的时候节省码率,默认和u32MaxQP的值是一致。
u32MinIQp: I帧的QP最小值,取值范围[0,48],图像静止或小运动的时候节省码率,默认和u32MinIQp是一致。
3.2. H265的QP调节参数
u32StepQp: QP的STEP步长
u32MaxQp****:QP的最大值,对运动画面进行限制,若忽视码率则建议51;若对质量讲究,则建议设置[40,51]。取值范围[8,51]。u32MinQp:QP的最小值,希望在静止画面的时候节省码率,取值范围[0,48]。VBR建议设置为[24,32],CBR建议设置[10,20]
u32MaxIQp: I帧的QP最大值,取值范围[8,51],图像运动的时候节省码率,默认和u32MaxQP的值是一致。
u32MinIQp: I帧的QP最小值,取值范围[0,48],图像静止或小运动的时候节省码率,默认和u32MinIQp是一致。
四. RV1126的QP调节DEMO
上面这个代码是调节QP的一个简单DEMO,我们重点说下QP调节部分。
s32FirstFrameStartQp:-1代表的是第一帧的起始QP由编码器内部进行计算。若是其他值,则由用户指定该合法值为第一帧起始QP。
u32StepQp:QP步长是1,QP值对应的是4,表示的是画面质量较好相对细致
u32MaxQp:maxQp这里选的是24。运动场景下,不会出现马赛克并且能够把运动细节相对清晰编码出来
u32MinQp:minQp这里选的是8。 静止场景下,能够把绝大部分静止的物体细节编码出来,比方说:植物、椅子等物体。
u32MaxIQp:maxIQp这里选的是24。这个参数主要是调节I帧的maxQP值,一般来说u32maxIQp和u32maxQp是一样
u32MinIQp:minIQp这里选的是8。这个参数主要是调节I帧的minQP值,一般来说u32minIQp和u32minQp是一样