码率控制方法及编码器与流程

文档序号:27759390发布日期:2021-12-03 23:14阅读:351来源:国知局
码率控制方法及编码器与流程

1.本发明属于视频编码技术领域,具体涉及一种码率控制方法及编码器。


背景技术:

2.avs(audio video coding standard,音视频编码标准)是《信息技术先进音视频编码》系列标准的简称,是我国具备自主知识产权的第二代信源编码标准,也是数字音视频产业的共性基础标准。可扩展视频技术

avs3(scalable video technology of avs3,svt

avs3),通过结合intel的可扩展视频技术(svt),对avs3编码器的各个流程模块化并充分解耦,在多核处理器中实现更好的帧级以及段级的高度并行编码,有效提升avs3的编码速度。svt

avs3采用了混合编码框架,整个编码过程包括帧内预测、帧间预测、变换量化、反量化反变换、环路滤波和熵编码等模块。针对超高清视频的应用场景,svt

avs3的块划分包括四叉树划分(quad

tree,qt)、二叉树划分(binary tree,bt)以及增强型四叉树(extended quad_tree,eqt),不同的划分类型用于适应不同的纹理方向,以提升编码效率。同时,svt

avs3使用了编码单元(cu),预测单元(pu)和变换单元(tu),其中cu的尺寸支持从128x128递归划分到4x4,灵活的cu划分为了匹配图像本身的纹理复杂度。svt

avs3新增了许多关键技术,除了更加灵活的块划分之外,自适应运动矢量精度(adaptive motion vector resolution,amvr)、基于历史信息的运动矢量预测(history

based motion vector prediction,hmvp)、高级运动矢量表达(ultimate motion vector expression,umve)、仿射运动补偿(affine motion compensation,amc)以及基于位置的变换(position based transform,pbt)等编码技术被用于提升编码效率。
3.通过将avs3编码流程模块化,各个模块负责相应的编码任务并且相互独立,高度的并行化使svt

avs3的编码速度大大提升。svt

avs3将不同的编码任务分配给不同的内核(kernel),每个kernel可以被分配一个或者多个线程,并且kemel之间的工作相互独立。包括图像分析内核(pictureanalysiskernel)、码率控制内核(ratecontrolkernel)、图像决策内核(picturedecisionkernel)、运动估计内核(mofionestimationkernel)、编解码内核(encdeckernel)、熵编码内核(entropycodingkernel)等,每个kernel在接收到任务之后进行相应的处理,并将处理结果通过消息队列发送给下一个kernel进行下一步的处理,这样每个kernel之间分工明确并且提升了并行度。
4.svt

avs3的高度并行加速了avs3的编码过程,使得svt

avs3被广泛应用于低延时编码场景中,例如8k赛事直播等。然而,svt

avs3编码器的码率控制模型对编码码率的精度以及码率波动的控制都不尽人意,使得其在低延时直播场景中的广泛应用受到限制。
5.svt

avs3原码率控制模型对当前编码帧向后看若干帧,根据目标码率以及帧率计算这些帧总的目标消耗比特bit,然后在一定量化参数(quantitative parameter,qp)范围内循环qp查找最优值使得以当前qp编码这些帧后bit消耗与目标bit尽量相近。这样的码率控制模型没有考虑单帧对码率波动的影响,容易导致码率波动较大,另外实际的码率控制精度也存在较大误差。每一帧的绝对误差和失真(sum ofabsolute difference,sad)表征
每一帧的编码复杂度,根据vbv状态为当前帧寻找最优qp并估计bit消耗,然后调整vbv状态用于下一帧的编码qp调整,达到控制码率波动的目的。在编码完一帧之后将编码bit作为反馈用于更新预测模型的参数以及vbv状态。由于svt

avs3编码器的多线程特点,码率控制处理的帧顺序存在一定乱序,增加了对码率控制的挑战。


技术实现要素:

6.本发明要解决的技术问题是提供一种码率控制方法及编码器,用于基于vbv的码率控制模型,在提升码率控制精度的情况下,对码率波动进行严格控制,使码率波动在合理范围内,降低编码延时。
7.为解决上述技术问题,本发明采用如下的技术方案:
8.本发明实施例一方面提供一种码率控制方法,包括以下步骤:
9.s1,在预处理阶段,根据当前帧与前一帧的基于宏块的直方图差异的统计,对当前帧是否为场景切换帧进行判断,根据场景切换检测结果,在码率控制前调整帧处理顺序;
10.s2,根据当前帧的当前帧或宏块的绝对误差和失真来估计当前帧的预测比特以及量化参数,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内;
11.s3,一帧分成多个宏块,调整每个宏块的量化参数;
12.s4,编码完整帧之后,首先根据该帧的实际编码量化参数以及实际编码比特更新帧级预测模型参数,根据预测比特以及实际比特对视频缓冲校验器状态进行相应的更新,使下一个未编码帧在帧级码控分配量化参数时能够得到最新的视频缓冲校验器状态。
13.优选地,s2进一步具体包括:以当前帧的帧序号为起点,向后看若干帧,以初始与量化参数相关的编码参数值和对应帧的当前帧或宏块的绝对误差和失真通过帧级预测模型来预测这些帧的预测模型的预测比特,根据每一帧的预测比特,预测视频缓冲校验器状态在若干帧后的变化情况,每当视频缓冲校验器状态即将下溢或上溢,跳出当前与量化参数相关的编码参数并相应增大或减小与量化参数相关的编码参数值,并重新进行每一帧的预测比特的预测,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内。
14.优选地,s3进一步具体包括:在编码一帧过程中,首先根据已编码宏块的实际比特更新行级预测模型,然后根据未编码宏块的前帧或宏块的绝对误差和失真预测未编码宏块的比特,当编码至每行的对角线宏块时进行行级比特预测,根据视频缓冲校验器状态以及行级预测的帧比特判断是否存在上、下溢危险,并及时调整剩余未编码宏块的量化参数。
15.优选地,s1中,根据场景切换检测结果,在码率控制前调整帧处理顺序具体包括:若当前帧为场景切换帧则严格按照帧序号处理该帧;否则,以当前帧帧序号为起点,向前看若干帧,并判断该距离内是否存在场景切换帧,若该距离内存在场景切换帧,则当前帧暂时在消息队列里存放不发送至码率控制模块,直至上一个场景切换帧已被发送至码率控制处理模块;若该距离内不存在场景切换帧,则当前帧直接被发送至码率控制处理模块。
16.本发明实施例又一方面提供一种编码器,包括:
17.预处理图像决策内核,用于根据当前帧与前一帧的基于宏块的直方图差异的统计,对每一帧进行场景切换检测;
18.图像管理内核,用于根据场景切换检测结果,在码率控制前调整帧处理顺序;
19.码率控制内核,用于根据当前帧的当前帧或宏块的绝对误差和失真来估计当前帧
的预测比特以及量化参数,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内;
20.编解码内核,用于将一帧分成多个宏块,调整每个宏块的量化参数;
21.熵编码内核,用于熵编码完整帧之后将该帧实际比特消耗反馈至码率控制内核中,在码率控制内核收到反馈比特之后,以宏块为单位计算该帧的实际编码平均量化参数以及对应的与量化参数相关的编码参数值,并更新帧级预测模型参数,最后更新视频缓冲校验器状态,用于后续未编码帧的量化参数分配。
22.优选地,图像管理内核进一步包括,用于若当前帧为场景切换帧则严格按照帧序号处理该帧;否则,以当前帧帧序号为起点,向前看若干帧,并判断该距离内是否存在场景切换帧,若该距离内存在场景切换帧,则当前帧暂时在消息队列里存放不发送至码率控制模块,直至上一个场景切换帧已被发送至码率控制处理模块;若该距离内不存在场景切换帧,则当前帧直接被发送至码率控制处理模块。
23.优选地,码率控制内核进一步具体包括:以当前帧的帧序号为起点,向后看若干帧,以初始与量化参数相关的编码参数值和对应帧的当前帧或宏块的绝对误差和失真通过帧级预测模型来预测这些帧的预测模型的预测比特,根据每一帧的预测比特,预测视频缓冲校验器状态在若干帧后的变化情况,每当视频缓冲校验器状态即将下溢或上溢,跳出当前与量化参数相关的编码参数并相应增大或减小与量化参数相关的编码参数值,并重新进行每一帧的预测比特的预测,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内。
24.优选地,编解码内核进一步具体包括:在编码一帧过程中,首先根据已编码宏块的实际比特更新行级预测模型,然后根据未编码宏块的前帧或宏块的绝对误差和失真预测未编码宏块的比特,当编码至每行的对角线宏块时进行行级比特预测,根据视频缓冲校验器状态以及行级预测的帧比特判断是否存在上、下溢危险,并及时调整剩余未编码宏块的量化参数。
25.采用本发明具有如下的有益效果:
26.(1)由于多线程带来的乱序挑战,在svt

avs3的预处理过程中,对当前编码帧是否为场景切换帧进行检测,若当前帧被判断为场景切换帧,则在码率控制模块前调整帧的处理顺序,防止存在复杂场景帧与简单场景帧的混合处理影响vbv状态,从而严格控制码率波动。
27.(2)码率控制模块根据当前帧的sad以及vbv状态,通过帧级预测模型预测编码bit以及调整帧级编码量化参数。在实际编码完该帧之后,根据实际编码bit以及量化参数值,更新帧级预测模型以及vbv状态。
28.(3)在编码一帧过程中,根据实际已编码宏块的bit,以及未编码宏块的sad,使用行级预测模型对当前帧的编码bit进行更准确的预测。通过在编码过程中及时地调整宏块的量化参数防止因帧级预测不准确而导致vbv出现上、下溢的情况。
附图说明
29.图1为本发明实施例的码率控制方法步骤流程图;
30.图2为本发明实施例的编码器的原理框图。
具体实施方式
31.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
32.参见图1所示为本发明实施例的码率控制方法,包括以下步骤:
33.s1,在预处理阶段,根据当前帧与前一帧的基于宏块的直方图差异的统计,对当前帧是否为场景切换帧进行判断。若当前帧与前一帧属于同一场景,那么两帧的灰度值差异较小,即直方图差异较小;若当前帧的灰度值发生突变,随之直方图与前一帧也会存在较大差异,那么极有可能发生了场景变换,通过累计整帧的直方图差异判断是否存在场景变换。根据场景切换检测结果,在码率控制前调整帧处理顺序;
34.s2,根据当前帧的当前帧或宏块的绝对误差和失真来估计当前帧的预测比特以及量化参数,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内;
35.s3,一帧分成多个宏块,调整每个宏块的量化参数;
36.s4,编码完整帧之后,首先根据该帧的实际编码量化参数以及实际编码比特更新帧级预测模型参数,根据预测比特以及实际比特对视频缓冲校验器状态进行相应的更新,使下一个未编码帧在帧级码控分配量化参数时能够得到最新的视频缓冲校验器状态。
37.具体应用实例,s1中,根据场景切换检测结果,在码率控制前调整帧处理顺序具体包括:若当前帧为场景切换帧则严格按照帧序号(picture number)处理该帧;否则,以当前帧帧序号为起点,向前看若干帧,并判断该距离内是否存在场景切换帧,若该距离内存在场景切换帧,那么为了防止因复杂和简单场景同时编码对码率波动带来挑战,则当前帧暂时在消息队列里存放不发送至码率控制模块,直至上一个场景切换帧已被发送至码率控制处理模块;若该距离内不存在场景切换帧,说明这些帧为同一场景,复杂度相差不大,则当前帧直接被发送至码率控制处理模块。
38.具体应用实例,s2中,进一步具体包括:以当前帧的帧序号为起点,向后看若干帧,以初始与量化参数相关的编码参数值和对应帧的当前帧或宏块的绝对误差和失真通过帧级预测模型来预测这些帧的预测模型的预测比特,根据每一帧的预测比特,预测视频缓冲校验器状态在若干帧后的变化情况,每当视频缓冲校验器状态即将下溢或上溢,跳出当前与量化参数相关的编码参数并相应增大或减小与量化参数相关的编码参数值,并重新进行每一帧的预测比特的预测,当经过若干帧的编码之后,视频缓冲校验器vbv状态在一个合理范围内。
39.预测模型的预测比特predbit(正常取值范围为0~20兆)与量化参数相关的编码参数qsacle(正常取值范围为0~100)之间的预测关系如下:
[0040][0041]
其中,帧级乘积系数coeff
pic
、帧级补偿系数offset
pic
,帧级累计系数count
pic
分别为帧级预测模型的参数,sad为绝对误差和失真。
[0042]
vbv状态的合理范围通常为0.4~0.8,即为找到当前帧的最优编码量化参数,量化参数qp与qsacle关系(2)式所示。在确定当前帧最优qsacle以及predbit后,对vbv状态
(vbvbufferfill)进行更新,如(3)式所示。
[0043]
qp=12+6.0
×
log2(qscale/0.85)(2)
[0044]
vbvbufferfill

=predbit(3)
[0045]
具体应用实例中,s3进一步具体包括:由于帧级预测模型不可避免地存在误差,为了防止由于帧级预测误差导致vbv的上、下溢,在编码一帧过程中,首先根据已编码宏块的实际比特更新行级预测模型,然后根据未编码宏块的前帧或宏块的绝对误差sad和失真预测未编码宏块的比特bit,以更准确地预测当前帧的编码bit。行级bit预测如(4)式、(5)式所示。当编码至每行的对角线宏块时进行行级比特预测,根据视频缓冲校验器状态以及行级预测的帧比特判断是否存在上、下溢危险,并及时调整剩余未编码宏块的量化参数。
[0046][0047]
其中,行级乘积系数coeff
row
、行级补偿系数offset
row
、行级累计系数count
row
分别为行级预测模型的参数,sad
encoded
和sad
uncoded
分别表示当前帧已编码宏块的sad和、当前帧未编码宏块的sad和。
[0048]
predbit=predbit
uncoded
+bit
encoded
(5)
[0049]
其中,predbit
uncoded
和bit
uncoded
分别表示未编码宏块的预测bit以及当前帧已编码宏块的累计bit。
[0050]
具体应用实例,s4中,编码完整帧之后,首先根据该帧的实际编码量化参数以及实际编码bit更新帧级预测模型参数,行级与帧级的预测模型参数更新过程一致,如(6)~(9)式所示。其中actualbit表示当前帧实际编码bit,offset
old
表示之前预测bit时使用的乘积系数,coeff
temp
和offset
temp
为临时变量保存计算系数值,coeff
new
和offset
new
表示根据实际编码bit更新完的预测器乘积系数与补偿系数。由于帧级的预测bit与实际bit存在误差,需要根据预测bit以及实际bit对vbv状态进行相应的更新,使下一个未编码帧在帧级码控分配量化参数时能够得到最新的vbv状态。vbv状态(vbvbufferfill)更新如(10)式所示。
[0051][0052]
offset
temp
=actualbit
×
qscale

coeff
temp
×
sad(7)
[0053]
coeff
new
=coeff
old
×0‑
5+coeff
temp
(8)
[0054]
offset
new
=offset
old
×
0.5+offset
temp
(9)
[0055]
vbvbufferfill+=predbit

actualbit(10)
[0056]
与本发明方法实施例对应的,参见图2,所示为本发明实施例的编码器的原理框图,包括预处理图像决策内核10、图像管理内核20、码率控制内核30编解码内核40、和熵编码内核50,其中预处理图像决策内核10,用于根据当前帧与前一帧的基于宏块的直方图差异的统计,对每一帧进行场景切换检测;图像管理内核20,用于根据场景切换检测结果,在码率控制前调整帧处理顺序;码率控制内核30,用于根据当前帧的当前帧或宏块的绝对误差和失真来估计当前帧的预测比特以及量化参数,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内;编解码内核40,用于将一帧分成多个宏块,调整每个宏块的量化参数;熵编码内核50,用于熵编码完整帧之后将该帧实际比特消耗反馈至码率控制内核中,在码率控制内核收到反馈比特之后,以宏块为单位计算该帧的实际编码平均量化参数
以及对应的与量化参数相关的编码参数值,并更新帧级预测模型参数,最后更新视频缓冲校验器状态,用于后续未编码帧的量化参数分配。
[0057]
具体应用实例中,图像管理内核20进一步包括,用于若当前帧为场景切换帧则严格按照帧序号处理该帧;否则,以当前帧帧序号为起点,向前看若干帧,并判断该距离内是否存在场景切换帧,若该距离内存在场景切换帧,则当前帧暂时在消息队列里存放不发送至码率控制模块,直至上一个场景切换帧已被发送至码率控制处理模块;若该距离内不存在场景切换帧,则当前帧直接被发送至码率控制处理模块。
[0058]
具体应用实例中,码率控制内核30进一步具体包括:以当前帧的帧序号为起点,向后看若干帧,以初始与量化参数相关的编码参数值和对应帧的当前帧或宏块的绝对误差和失真通过帧级预测模型来预测这些帧的预测模型的预测比特,根据每一帧的预测比特,预测视频缓冲校验器状态在若干帧后的变化情况,每当视频缓冲校验器状态即将下溢或上溢,跳出当前与量化参数相关的编码参数并相应增大或减小与量化参数相关的编码参数值,并重新进行每一帧的预测比特的预测,当经过若干帧的编码之后,视频缓冲校验器状态在一个合理范围内。
[0059]
具体应用实例中,编解码内核40进一步具体包括:在编码一帧过程中,首先根据已编码宏块的实际比特更新行级预测模型,然后根据未编码宏块的前帧或宏块的绝对误差和失真预测未编码宏块的比特,当编码至每行的对角线宏块时进行行级比特预测,根据视频缓冲校验器状态以及行级预测的帧比特判断是否存在上、下溢危险,并及时调整剩余未编码宏块的量化参数。
[0060]
本领域技术人员可以理解的是,编码器中其他的技术实施细节同上述码率控制方法,在此不再赘述。
[0061]
为验证本发明技术方案的有效性,通过本发明方法实现的svt

avs3编码器,使用hevc的classa、classb部分通用测试序列测试。实验平台的硬件配置为intel(r)core(tm)i5

6400@2.70ghz,内存为16g,windows10 64位操作系统。编码参数为图像组(group ofpicture,gop),长度=25,b帧个数=7,参考帧个数=2。为了比较不同码率控制模型对码率波动的影响,设定输出缓存(buffer)来观察编码过程中码率的变化,其中每编码完一帧buffer减去该帧的编码bit并加上目标码率下每帧的平均bit。buffer大小buffersize=目标码率,初始buffer值bufferfill=0.7
×
buffersize,对每个序列各编码1000帧统计不同码率控制模型的编码效果差异。
[0062]
表1给出了各个测试序列采用本发明方法进行编码,相比较于原svt

avs3编码器的码率控制精度以及码率波动情况的结果。可以看到,在保证相同编码质量的情况下,所提出方法的码率控制精度远远高于原svt

avs3编码器,其中原svt

avs3编码器在所测试序列中平均码率控制精度为89.88%,控制精度较低,而本发明方法在所测试序列中平均码率控制精度为99.46%,能够实现相比原svt

avs3编码器码率控制模型更加精确的码率控制精度。
[0063]
通过设置输出buffer,来比较不同码率控制模型对码率波动的影响。其中,maxbuffer表示输出buffer在编码整个序列过程中最大的buffer状态,相应的minbuffer表示最小buffer状态。需要说明的是,当出现连续的编码帧bit大于平均bit时,输出buffer持续下降直至出现负值,此时出现下溢的情况,并且容易造成卡顿现象,降低用户体验感;当
出现连续的编码帧bit小于平均bit时输出buffer持续上升,出现上溢,但上溢情况不会造成明显的用户体验感降低。比较本发明方法与原svt

avs3编码器的码率波动情况,可以看到原svt

avs3编码器的码率控制模型编码下码率存在很大的波动,对于所测试的序列平均波动达到了2685.34ms,并且都出现了下溢情况;而本发明方法编码下码率波动明显降低,对于所测试的序列平均波动仅有267.34ms,并且也没有出现上、下溢的情况。另外,本发明方法对于编码器的计算复杂度几乎没有影响,编码速度与原svt

avs3编码器相差无几。本发明方法在保证编码质量的情况下,有效提升svt

avs3编码器的码率控制精度以及码率波动情况,对于svt

avs3编码器的低延时应用场景具有较高的价值。
[0064]
表1本发明方法与原svt

avs3编码器码率控制结果比较
[0065][0066]
通过设置输出buffer,来比较不同码率控制模型对码率波动的影响。其中,maxbuffer表示输出buffer在编码整个序列过程中最大的buffer状态,相应的minbuffer表示最小buffer状态。需要说明的是,当出现连续的编码帧bit大于平均bit时,输出buffer持续下降直至出现负值,此时出现下溢的情况,并且容易造成卡顿现象,降低用户体验感;当出现连续的编码帧bit小于平均bit时输出buffer持续上升,出现上溢,但上溢情况不会造成明显的用户体验感降低。比较本发明方法与原svt

avs3编码器的码率波动情况,可以看到原svt

avs3编码器的码率控制模型编码下码率存在很大的波动,对于所测试的序列平均波动达到了2685.34ms,并且都出现了下溢情况;而本发明方法编码下码率波动明显降低,对于所测试的序列平均波动仅有267.34ms,并且也没有出现上、下溢的情况。另外,本发明方法对于编码器的计算复杂度几乎没有影响,编码速度与原svt

avs3编码器相差无几。本发明方法在保证编码质量的情况下,有效提升svt

avs3编码器的码率控制精度以及码率波动情况,对于svt

avs3编码器的低延时应用场景具有较高的价值。
[0067]
应当理解,本文所述的示例性实施例是说明性的而非限制性的。尽管结合附图描述了本发明的一个或多个实施例,本领域普通技术人员应当理解,在不脱离通过所附权利要求所限定的本发明的精神和范围的情况下,可以做出各种形式和细节的改变。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1