一种基于HEVC的Two‑Pass码率控制方法与流程

文档序号:12498214阅读:691来源:国知局
一种基于HEVC的Two‑Pass码率控制方法与流程

本发明涉及视频编码技术领域,尤其涉及一种基于HEVC的Two-Pass码率控制方法。



背景技术:

随着视频编码技术的不断进步,主流视频向高清和超高清方向发展,随之带来了视频数据量的激增,为了达到更高的压缩性能,JCT-VC联合小组推出了H.265/HEVC视频编码标准,比以往H.264/AVC标准的压缩性能提升了一倍。在视频编码标准的实际应用中,码率控制,即在既定的目标码率下获得最优的视频质量,是视频编码中不可或缺的关键部分,也是视频编码领域研究的热点。

在视频编解码的实际应用中,可以利用的带宽资源往往是有限的。每帧视频的复杂度都随着视频内容在不断变化,视频复杂度越高,输出的编码比特数也会越高,如果不对码流加以控制,编码后得到的视频码率就会不断变化,大幅度变化的码率不能满足实际传输信道和传输带宽的要求,所以,码率控制在视频编码标准的实际应用中必不可少。

码率控制是在当前带宽限制下,通过一定的码率控制方法来匹配目标码率并取得最优视频质量的一种技术手段。率失真优化(Rate-Distortion Optimization,RDO)就是在率失真理论的指导下选择最优的编码参数,以在编码输出码率和压缩后造成的失真之间取得最佳的平衡,即在保证视频质量的前提下尽可能降低码率,或者是在相同输出码率条件下尽可能提升视频质量。率失真优化理论在码率控制中占据十分重要的作用。

率失真理论最早在1959年由香农发表的“保真度准则下的离散信源编码理论”而逐渐受到学者的关注,主要针对在允许一定失真的情况下,信源压缩的极限是什么这一问题,首次对率失真函数R(D)作出定义和论述。在之后相关领域的学者和专家不断地研究之后,率失真理论逐渐完善化和系统化。

视频的质量与最终输出码流的大小都主要受量化过程的影响,对同一视频使用不同的量化参数会得到不同的码率和视频质量。所以,码率控制的主要目的是得到一组量化参数QP,用它们来控制后续的编码流程,最终达到目标码率的要求。其中,重点就是找到码率和量化参数之间的映射关系,并建立模型,从而通过目标码率来获得所需的量化参数。

视频编码标准中使用的帧内预测和帧间预测方法,使得编码块之间的依赖性很强,它们的率失真性能也不能独立的分割开来考虑。因此,虽然率失真函数给出量化参数集和失真、码率之间的关系,但是直接使用率失真函数来求解量化参数是非常复杂的。实际的编码标准应用中,码率控制一般分为两个步骤进行,如图1所示,其中,第一步是比特分配(Bit Allocation),就是把目标码率按一定的规则分配到图像组(GOP)、帧(Frame)以及编码块(CTU)等图像单位上;第二步就是建立合适的率失真模型计算量化参数(QP),以控制后续的量化器,使得最终输出的码率可以匹配给定的目标码率。

(1)比特分配

最大编码块(Largest Coding Unit,LCU)是H.265/HEVC标准中可以独立编码的基本单元,H.264/AVC标准中与此对应的是宏块(Micro Block,MB)。对于HEVC标准,码率控制所能控制的最小单元,即能够为其单独分配量化参数的最小单元也是LCU。码率控制的第一步是码率分配,即比特分配。比特分配是逐步细分的,一般做法如图2所示,先将目标码率下的总比特数按一定规则先分配至GOP图像组中,再依次将码率分配至每一帧图像,进而分配至LCU级。同时,每一级中每编码完一个图像单元,就根据编码实际使用的比特数的情况,对后续比特分配进行调整和更新,即使用剩余比特数来更新后续的比特分配。

(2)量化参数QP的计算

码率控制的第二步是由第一步得到比特分配的结果去求得一组量化参数QP,重点就是对码率和量化参数QP之间率失真关系模型的建立。率失真模型的精准度是决定最终输出的码流是否能达到目标码率要求的关键,对码率控制模块的性能具有决定性意义。视频领域专家和学者对率失真模型进行了广泛的研究,建立了很多率失真关系的近似模型,主要由一阶线性模型、二次模型、指数模型、对数模型、R-λ模型等。



技术实现要素:

为了解决现有技术存在的问题,本发明提供一种基于Two-Pass的HEVC码率控制方法。

本发明的技术方案是:一种基于HEVC的Two-Pass码率控制方法,该方法的具体步骤为:

步骤1,快速预编码视频序列,并收集对应编码单元的统计信息;

步骤2,将根据前面收集的统计信息,进行比特分配、率失真模型参数训练拟合以及量化参数QP的计算。

一种基于HEVC的Two-Pass码率控制方法还包括以下步骤:视频编码之前通常会先分割成若干个小的GOP图像组,一个GOP图像组通常包括至少一帧图像;每帧图像通常进一步分割为若干码块(LCU),从而进一步编码。

所述图像有三种类别:I帧、P帧和B帧;其中,I帧是帧内编码帧,只能参考本帧图像内的像素进行预测,同时能够作为P帧和B帧的参考帧,是预测编码中的关键帧,本发明所提出的码率控制方法将重点关注I帧,即帧内预测编码的码率控制。

所述步骤1的包括以下步骤:

步骤a:初始化;对于给定视频序列,在编码的cfg配置文件中配置固定的量化参数QP值,同时将RateControl参数设置为0,关闭码率控制开关;

步骤b:CU划分;输入给定视频序列,在函数TEncCu::xCompressCU()中对当前视频序列的每一个LCU进行递归地划分;

步骤c:判断是否划分到16×16;利用划分深度uiDepth变量是否小于3的条件,判断当前划分是否到了16×16层级,如小于3,则继续划分;否则,则证明当前LCU已划分到16×16层级,能够进行下一步操作;

步骤d:判断是否为图像边界;利用边界判断条件,判断是否为图像边界,若是边界,有可能存在边界LCU不能被16整除的情况,则继续向下划分到8×8块,然后进行后续的预测、变换编码过程;

步骤e:收集编码产生的视频序列的统计信息;重点是对每个LCU块所占的比特数、整个帧的比特数、视频输出码率、视频失真信息的收集;其中,LCU的比特数和整帧的比特数信息,可以作为复杂度,在后续比特分配时使用;码率、失真信息则可以组成(R,D)样本点,供后续参数的拟合使用;

步骤f:改变QP值,重复步骤a到步骤e的编码过程,直到遍历22、27、32、37四种QP值。

所述步骤2包括比特分配、率失真模型建立和量化参数QP计算三个主要部分,具体步骤为:

步骤ⅰ:帧级比特分配;在TEncRCSeq::create()函数中,根据目标码率和当前序列的帧率,计算目标比特数,并将目标比特数平均分配给每一帧;

步骤ⅱ:修改TEncCu::updateLCUDataISlice()函数,将LCU的复杂度衡量基准由原来的64个8×8的SATD和,修改为固定QP为22时步骤中收集的LCU比特数,即定义文件指针变量以从文件中读入LCU的比特数信息,将函数返回值依次赋值给按光栅扫描顺序排列的LCU的复杂度变量m_costIntra;

步骤ⅲ:遍历当前帧中的每一个LCU,将所有LCU的复杂度变量m_costIntra的累加和赋值给m_totalCostIntra变量,该变量表示当前帧的总复杂度;

步骤ⅳ:在函数TEncRCPic::getLCUInitTargetBits()中,为每一个LCU分配比特,算式如下:

TCurrLCU=(TCurrPic-BitHeader-BitCoded)×CCurrLCU

其中,CCurrLCU为当前LCU的复杂度,B1stCurrLCU为First-Pass中收集到的当前LCU的比特数,BNotCodedLCUs为步骤1中收集到的当前帧中未编码LCU的比特数;

步骤ⅴ:使用步骤1中收集的视频码率、失真信息,以双曲线R-D模型为基准,拟合当前视频序列的模型参数C、K;

步骤ⅵ:按照R-D模型和R-λ模型的对应关系,计算R-λ模型的模型参数α、β;

步骤ⅶ:根据在线训练模型参数的R-λ模型,利用步骤ⅳ中为当前LCU分配的比特数,计算用于当前LCU的λ值,并检验是否符合约束;

步骤ⅷ:根据步骤ⅶ中获得的λ值以及算式QP=4.2005lnλ+13.7122中描述的λ与QP之间的关系,计算用于当前LCU量化过程的QP值,并检验是否符合约束;

步骤ⅸ:应用步骤ⅷ中得到的QP值集,进行完整的编码过程。

与现有技术相比,本发明有益效果是:

1)在高低不同的目标码率下,相比于HM16.0中的标准码率控制方法,本发明专利提出的Two-Pass快速方法平均峰值信噪比PSNR对于复杂度、分辨率各不相同的视频序列均有提升,平均提升了0.42dB,对于高目标码率下视频序列的PSNR提升最为明显,最高可达3.14dB;

2)在码率控制精度方面,本发明专利码率控制方法的码率误差对于不同视频序列均有降低,平均降低了4.81%,同样,对于高目标码率下的码率控制误差降低最为显著,最高可降低24.6%的码率误差。

附图说明

图1码率控制基本流程;

图2比特分配基本流程;

图3不同类型图像编码输出比特数比较;

图4 First-Pass算法流程;

图5 LCU统计信息存储顺序;

图6 Second-Pass算法流程;

图7支持在线训练的Two-Pass快速算法流程。

具体实施方式

本发明提出一种基于Two-Pass的HEVC码率控制方法,其具体方法如下:

视频编码之前通常会先分割成若干个小的GOP图像组,一个GOP图像组通常包括若干帧图像,这些图像有三种类别:I帧(Intra Frame)、P帧(Predictive Frame)和B帧(Bi-directional Interpolate Prediction Frame)。其中,P帧是前向预测编码帧,可以参考前面已编码帧进行帧间预测,消除连续帧之间的时间冗余;B帧是双向预测内插值编码帧,既可以参考前面已编码帧的像素,也可以参考后面的帧进行编码;I帧是帧内编码帧,只能参考本帧图像内的像素进行预测,同时可以作为P帧和B帧的参考帧,是预测编码中的关键帧,在预测编码中占有十分重要的位置,每个GOP图像组通常都以I帧作为第一帧。I帧包含一幅图像所有重要的信息,可以独立进行解码,而P帧和B帧的解码都要依赖于前面的I帧才能完成。同时,在整个视频压缩码流中,I帧会占用较多的比特,甚至可能数倍于P帧和B帧。如附图3所示为“RaceHorses”序列(IBBBPBBB结构)在固定量化参数下,不同图像类型编码输出比特数的比较。I帧编码输出的比特数最多,约为P帧的2倍、B帧的10倍。综合以上可以看出,I帧在整个视频编码序列中占据十分重要的地位,对I帧进行码率控制,会对整个视频序列的压缩效率有至关重要的影响。因此,本发明所提出的码率控制方法将重点关注I帧,即帧内预测编码的码率控制。

本发明主要分为两个步骤:在步骤1(First-Pass)中快速预编码视频序列,并收集对应编码单元的复杂度等统计信息;在步骤2(Second-Pass)中,将根据前面收集的统计信息,进行比特分配、率失真模型参数训练拟合以及量化参数QP的计算。

1.步骤1(First-Pass)

步骤1(First-Pass)编码是本发明提出的Two-Pass码率控制方法的第一步,主要用于收集视频序列重要的统计信息。为了在线训练模型参数,在本发明所提的改进型Two-Pass码率控制方法中,需要进行多次预编码,以得到当前视频序列的多组真实的码率和失真的对应关系,进而拟合适应当前视频序列的模型参数。多次预编码将导致First-Pass的整体编码时间成倍增加,大大拖慢了编码速度。因此,本发明提出一种快速预编码的方法,在步骤1(First-Pass)中将每帧图像全部划分成16×16像素块,即仅对划分深度为3的CU块进行预编码,收集统计信息,其中实现过程中重点对边界情况进行了考虑。本发明使用HM标准软件模型推荐的最能反映不同量化精细程度下视频的压缩效果的四种固定的QP值(22、27、32、37)进行编码,即进行四遍快速预编码,得到当前序列每一帧的4对(R,D)样本点,用于后续的模型参数的拟合;同时,在量化参数QP值取22下进行编码,将每个LCU中的16×16像素块统计到的比特信息相加,作为该LCU块的复杂度信息,以便进行后续的Second-Pass编码。采用快速预编码的步骤1(First-Pass)流程如附图4所示。

改进的Two-Pass快速方法中,First-Pass编码的实现主要有以下几个步骤:

步骤a:初始化。对于给定视频序列,在编码的cfg配置文件中配置固定的量化参数QP值,同时将RateControl参数设置为0,关闭码率控制开关;

步骤b:CU划分。输入给定视频序列,在函数TEncCu::xCompressCU()中对当前视频序列的每一个LCU进行递归地划分;

步骤c:判断是否划分到16×16。利用划分深度uiDepth变量是否小于3的条件,判断当前划分是否到了16×16层级,如小于3,则继续划分;如不小于3,则证明当前LCU已划分到16×16层级,可以进行下一步操作;

步骤d:判断是否为图像边界。利用边界判断条件,判断是否为图像边界,若是边界,有可能存在边界LCU不能被16整除的情况,则继续向下划分到8×8块,然后进行后续的预测、变换等编码过程;

步骤e:收集编码产生的视频序列的统计信息。重点是对每个LCU块所占的比特数、整个帧的比特数、视频输出码率、视频失真信息的收集。其中,LCU的比特数和整帧的比特数信息,可以作为复杂度,在后续比特分配时使用;码率、失真信息则可以组成(R,D)样本点,供后续参数的拟合使用。

步骤f:改变QP值,重复步骤a到步骤e的编码过程,直到遍历22、27、32、37四种QP值。

其中,每个LCU的统计信息在输出文件中的存储顺序按照附图5所示的光栅扫描顺序,从左到右、从上到下依次存储。同时,First-Pass中收集的LCU比特数占整帧比特数的比率,将作为本发明专利采用的精细复杂度衡量基准,以供后续Second-Pass编码中比特分配时使用。

此外,视频的失真信息使用MSE表示,MSE是重建视频数据与原始视频序列数据之间的均方差,其计算公式如式(1)所示。其中,表示像素的原始值,表示像素的重建值,n表示像素总个数。

视频的码率信息使用bpp表示,即平均每个像素所占的比特数,其计算公式如式(2)所示。其中,bit表示当前帧的总比特数,Ptotal表示当前帧的总像素数,w表示当前帧的图像宽度,h表示当前帧的图像高度。

Ptotal=w×h (2)

2.步骤2(Second-Pass)

步骤2(Second-Pass)编码是本发明专利提出的Two-Pass码率控制方法的第二步,是Two-Pass方法的关键步骤。步骤2(Second-Pass)编码主要有比特分配、率失真模型建立和量化参数QP计算三个主要部分,下面将对每一个部分的具体方法和实现方式进行详细介绍:

(1)比特分配

对于帧内预测编码来说,全I帧的参数设置相当于每个GOP大小为1,其中只包含一帧图像,也就是1个I帧。所以,对于帧内码率控制来说,按照分层比特分配的策略,GOP级比特分配就相当于是帧级比特分配,即将除去头信息外的目标码率下的比特数平均分配到每一个I帧图像。

I帧图像只能参考本帧已编码CU块的像素进行预测编码,因此,帧内码率控制中比特分配步骤的重点就是LCU级的比特分配方法。在此,本发明专利使用精细复杂度衡量基准作为权重,为每个LCU分配比特。即使用First-Pass中收集的每个LCU比特数占对应帧总比特数的比值作为该LCU的复杂度,为其在当前目标码率下分配比特。假设当前帧的总目标比特数为,头信息所占比特数为,已编码像素块实际所用总比特数为,则当前LCU能分得的比特数可以用公式(3)表示:

TCurrLCU=(TCurrPic-BitHeader-BitCoded)×CCurrLCU

其中,CCurrLCU为当前LCU的复杂度,B1stCurrLCU为First-Pass中收集到的当前LCU的比特数,BNotCodedLCUs为First-Pass中收集到的当前帧中未编码LCU的比特数。

(2)率失真建模

视频编码标准的目标始终是,使用更少的比特数达到更高的清晰度,这一目标可以表示成有约束问题。解决该有约束的率失真优化问题的一个有效的方法是,采用拉格朗日乘子优化法(Lagrange Operator Algorithm),将有约束优化问题转换成无约束优化问题。引入拉格朗日乘子后,有约束问题可以转化为式(4)的形式。

即:

如果将视频编码中的率失真优化问题看作是在码率和失真之间取得最佳的平衡,那么,拉格朗日乘子λ就是调节码率和失真之间平衡的关键。从物理意义上说,拉格朗日乘子λ就是率失真曲线的斜率。

H.265/HEVC标准经典码率控制提案K0103中通过双曲线形式的R-D模型,如式(6)所述,推导出了码率R和拉格朗日乘子λ之间的关系,最终建立即率失真模型,如式(7)所述,其中,α和β为统一的模型参数,分别取经验值3.2003和-1.367。本发明实现的Two-Pass码率控制方法中采用该R-λ模型作为本发明率失真模型。但不再使用统一的模型参数,而是利用步骤1(First-Pass)中经过多次快速预编码收集的视频序列的码率、失真等统计信息,针对每一个视频序列,在线训练适应各视频序列的模型参数。

D(R)=C·RK (6)

在本发明的步骤2(Second-Pass)编码阶段,利用步骤1(First-Pass)中收集的码率R和失真D的统计信息,对每个视频序列都可以得到对应的4组(R,D)样点,以式(6)为模型,对每个序列的样点组进行参数拟合,可以得到每个视频序列的模型参数C和K的经验值。再根据R-D模型和R-λ模型的关系,如式(7)所述,可以推导出参数C、K与参数α、β之间的关系,如式(8)和式(9)所述。

α=-C·K (8)

β=K-1 (9)

然后,根据式(8)和式(9)可以计算出适应于当前视频序列R-λ模型的模型参数α和β,代入式(7),既可作为当前视频序列的在线训练R-λ模型。

(3)计算量化参数QP

经过上述在线训练过程,利用得到的R-λ模型,根据第(1)部分分配到当前编码单元的码率,计算出对应的λ值,再根据λ和量化参数QP之间的对应关系,如式(10)所述,计算求得QP值,并用于后续编码过程。

QP=4.2005lnλ+13.7122 (10)

同时,为了减小相邻编码单元图像质量的波动,将相邻LCU的量化参数QP差控制在1以内,当前LCU与其图像级QP差控制在2以内。

综合以上介绍和分析,可以将步骤2(Second-Pass)的方法具体实现步骤总结为以下几步:

步骤ⅰ:帧级比特分配。在TEncRCSeq::create()函数中,根据目标码率和当前序列的帧率,计算目标比特数,并将目标比特数平均分配给每一帧;

步骤ⅱ:修改TEncCu::updateLCUDataISlice()函数,将LCU的复杂度衡量基准由原来的64个8×8的SATD和修改为First-Pass中收集的LCU比特数,即定义文件指针变量以从文件中读入LCU的比特数信息,将函数返回值依次赋值给按光栅扫描顺序排列的LCU的复杂度变量m_costIntra;

步骤ⅲ:遍历当前帧中的每一个LCU,将所有LCU的复杂度变量m_costIntra的累加和赋值给m_totalCostIntra变量,该变量表示当前帧的总复杂度;

步骤ⅳ:在函数TEncRCPic::getLCUInitTargetBits()中,按照式(3)的方法,为每一个LCU分配比特;

步骤ⅴ:使用步骤1(First-Pass)中收集的视频码率、失真等信息,以双曲线R-D模型为基准,拟合当前视频序列的模型参数C、K;

步骤ⅵ:按照R-D模型和R-λ模型的对应关系,计算R-λ模型的模型参数α和β;

步骤ⅶ:根据在线训练模型参数的R-λ模型,利用步骤ⅳ中为当前LCU分配的比特数,计算用于当前LCU的λ值,并检验是否符合约束;

步骤ⅷ:根据步骤ⅶ中获得的λ值以及式(10)中描述的λ与QP之间的关系,计算用于当前LCU量化过程的QP值,并检验是否符合约束;

步骤ⅸ:应用步骤ⅷ中得到的QP值集,进行完整的编码过程。

综上所述,本发明提出的Two-Pass快速算法的实现流程如图7所示,具体实现步骤如下:

步骤1(First-Pass阶段)

步骤1):输入视频序列,对每帧视频都仅对划分深度为3,即全部划分成16×16的码块进行预编码,若当前块为图像边界,则继续划分到8×8大小再进行编码,其中,预编码过程使用的量化参数QP值为事先设定的固定值;

步骤2):将每个LCU中包含的所有16×16块(包括小于16×16的边界像素块)所占比特数相加,作为当前LCU所占的比特数,按Z字型扫描顺序,依次输出到文件中备用;

步骤3):收集视频序列编码后的整体码率、失真等统计信息作为后续率失真模型参数拟合的样本点,并输出到文件中备用;

步骤4):改变QP值,重复以上步骤(本发明取四种不同的QP值:22、27、32、37进行实验);

步骤2(Second-Pass阶段)

步骤5):将当前目标码率配置到“encoder_intra_main.cfg”配置文件中,将目标码率下的比特数平均分配到每一帧;

步骤6):以当前帧除去已编码LCU所用比特后的剩余总比特数为基准,按步骤2)中收集的前LCU的复杂度权重,本发明以固定QP为22时收集的统计信息为准,为当前LCU分配比特;

步骤7):使用步骤3)中收集的视频码率、失真等信息,以双曲线R-D模型为基准,拟合当前视频序列的模型参数C、K;

步骤8):按照R-D模型和R-λ模型的对应关系,计算R-λ模型的模型参数α和β;

步骤9):对当前帧应用上述在线训练出的R-λ模型,根据步骤6)中分配的比特情况,计算出应用于当前编码单元的λ值,进而计算出QP值,并对QP值作一定限制,以降低相邻编码单元的视频质量波动;

步骤10):使用步骤9)中得到的QP值进行整体视频序列的编码,输出比特流。

实验数据显示,在高低不同的目标码率下,相比于HM16.0中的标准码率控制算法,本发明提出的Two-Pass快速算法平均峰值信噪比PSNR对于复杂度、分辨率各不相同的视频序列均有提升,平均提升了0.42dB,对于高目标码率下视频序列的PSNR提升最为明显,最高可达3.14dB;在码率控制精度方面,本发明码率控制算法的码率误差对于不同视频序列均有降低,平均降低了4.81%,同样,对于高目标码率下的码率控制误差降低最为显著,最高可降低24.6%的码率误差。

以上所述的仅是本发明的优选实施方式,应当指出,对于本领域的技术人员来说,在不脱离本发明整体构思前提下,还可以作出若干改变和改进,这些也应该视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1