一种基于虚拟帧同步的帧间并行编码码率控制方法及装置与流程
未命名
10-21
阅读:47
评论:0
1.本发明涉及一种数字视频编码技术,特别是涉及一种基于虚拟帧同步的帧间并行编码的码率控制方法。
背景技术:
2.视频编码是通过压缩视频图像中的冗余成分,并使用尽可能少的数据来表征视频信息的技术。常见的视频编码标准有hevc(high efficiency video coding,高效率视频编码,又称h.265)、avc(advanced video coding,高级视频编码,又称h.264)等。
3.视频编码技术以图像块作为最基本的编码单元。例如在hevc中,视频编码的基本单元是cu(coding unit,编码单元)。cu可以是64像素
×
64像素、32像素
×
32像素、16像素
×
16像素、8像素
×
8像素尺寸的图像块。其中64像素
×
64像素尺寸的图像块又称为lcu(largest coding unit,最大编码单元)。
4.为了尽可能提高视频压缩率,常见的视频编码算法往往采用有损压缩算法,造成编码重建后的视频与原始视频存在差别(产生失真)。hevc和avc都属于有损压缩算法。有损压缩算法的编码性能由编码比特率(rate)和编码引入的失真(distortion)来共同衡量。在视频编码过程中,编码比特率r和编码失真d是相互制约、相互矛盾的,降低编码比特率r往往会增加编码失真d,减少编码失真d往往会增加编码比特率r。率失真优化(rate distortion optimization,rdo)就是为了在一定的编码比特率r下尽可能减少编码失真d,或者在一定的编码失真d下尽可能减少编码比特率r。常见的视频编码算法都采用基于拉格朗日乘子(lagrange multiplier)λ的率失真优化方法,该方法就是取得最小的编码率失真代价(rate distortion cost,rd cost)j,j=d+λ
×
r。
5.在视频编码时,每一种编码模式都有编码失真d和编码比特率r,可计算出每一种编码模式的编码率失真代价j。视频编码时,选择编码率失真代价j最小的编码模式来进行编码,可以获得最优的编码性能。编码器通过率失真优化的方法为每一个待编码图像块选择最优的编码模式的过程,称为待编码图像块的模式选择(mode decision)。
6.为了去除空域和时域上的信息冗余,视频编码技术对输入的视频帧采用帧内编码技术和帧间编码技术进行编码。仅采用帧内编码技术进行编码的是i帧。混合采用帧内编码技术和帧间编码技术进行编码的是p帧和b帧。由用户设置的图像组(gop,group of pictures)参数来决定编码帧的类型。图1展示了一个常见的i帧、p帧、b帧的图像组结构。
7.运动估计是帧间编码技术的核心,其作用是消除视频信号的时域信息冗余,从而提高编码效率。运动估计是在已编码的视频帧(称为参考帧)中,在一个有限范围内(称为搜索窗口),为当前编码视频帧中的待编码图像块搜索最优匹配块,使得率失真代价最小。请参阅图2,参考帧中的最优匹配块与当前编码视频帧中的待编码图像块在参考帧中的相同位置图像块的相对偏移即为待编码图像块的最优运动矢量(motion vector,mv)。
8.在实际生活中,用来传输视频的信道带宽容量是有限的。如果视频的编码比特率过高,超出了信道带宽容量,就会造成视频传输拥塞甚至丢包。如果视频的编码比特率过
低,又会导致信道带宽没有得到充分利用,也无法获得更高视频质量。因此,有必要使用码率控制技术对视频编码器的输出码率进行控制,使之与信道带宽容量相匹配。
9.码率控制(rate control)目的是通过调整视频编码器的编码参数,使视频编码器的输出码率等于预先设置的目标码率,同时尽可能减少编码失真以提升视频编码质量。常见的码率控制算法中一般通过目标比特分配和目标比特控制两个环节来实现码率控制任务。其中,目标比特分配环节用于在图像组、视频帧、图像块三个级别计算待编码图像单元的目标编码比特数。目标比特控制环节用于在视频帧、图像块两个级别根据待编码图像单元的目标编码比特数,计算其对应的编码参数——如拉格朗日乘子λ和量化参数(quantization parameter)qp,用于待编码图像单元的编码过程。
10.拉格朗日乘子λ和量化参数qp都分为视频帧级别和图像块级别。在视频帧级别的目标比特分配和目标比特控制环节(即视频帧级别的码率控制)就使用视频帧级别的拉格朗日乘子λ和量化参数qp,在图像块级别的目标比特分配和目标比特控制环节(即图像块级别的码率控制)就使用图像块级别的拉格朗日乘子λ和量化参数qp。视频帧级别的拉格朗日乘子也简称为视频帧级拉格朗日乘子、帧级拉格朗日乘子、视频帧的拉格朗日乘子。图像块级别的拉格朗日乘子也简称为图像块级拉格朗日乘子、块级拉格朗日乘子、图像块的拉格朗日乘子。量化参数的简称以此类推。
11.由于视频编码算法的运算量很大,为了提高视频编码速度,实现实时编码和传输,业界通常使用专用集成电路(asic)等硬件对视频编码过程进行硬件加速。对视频编码过程进行硬件加速的硬件一般称为硬件视频编码器,也称为vpu(video processing unit,视频处理单元)。
12.随着视频编码技术的发展,视频编码的压缩率越来越高,视频编码的运算量也越来越大。对于高分辨率、高帧率的视频,其实时编码必须通过并行编码技术来进行保证。一种并行编码技术是帧间并行编码,即将连续的几个待编码视频帧分配到不同的编码核心上进行并行编码,以提升视频编码的速度。这里的“编码核心”是指能够并行工作的视频编码运算单元,既可以是软件视频编码器中的编码线程,也可以是硬件视频编码器中的硬件编码模块。进行帧间并行编码时,存在着帧间参考关系的前后视频帧之间,需要确保待编码的图像块行(即一整行的图像块)在其参考帧上所对应的搜索窗口区域都已经编码重建完成。
13.请参阅图3,这是帧间并行编码的示意图。其中,参与帧间并行编码的编码核心共有四个,即编码核心1-编码核心4,被依序分别调度在不同的视频帧上并行进行编码。需要编码的视频帧有6帧,其中第1帧为i帧(灰色填充),第2-6帧为p帧或b帧(无填充)。菱形格区域表示视频帧上已编码的部分。可以看到,第1帧和第2帧已经编码完成,分别由编码核心1和编码核心2完成;第3帧、第4帧、第5帧正在进行编码,第6帧正准备开始编码。
14.在传统的码率控制算法中,待编码视频帧的目标比特分配和目标比特控制需要依据前一个已编码视频帧的编码状态信息来进行。而在帧间并行编码的过程中,连续的多个视频帧同时处于正在编码的状态。换句话说,对于待编码的视频帧,其之前的多个视频帧的编码过程可能都没有结束,这就给码率控制算法的设计带来很大的困难。
15.目前,已经有一些在帧间并行编码时进行码率控制的方法。其中最常见的一种方案是,对于待编码的视频帧,利用与其最接近的已完成编码的视频帧的编码状态信息来进行码率控制,这种码率控制方案如图4所示。其中,第6帧为待编码视频帧,第3、4、5帧的编码
还未完成,第2帧是与第6帧最接近的已完成编码的视频帧。因此,第6帧需要利用第2帧的编码状态信息来进行码率控制。由于第2帧与第6帧之间相隔3个视频帧,因此第6帧进行码率控制的延迟为3帧。可以看到,这种帧间并行编码的码率控制方案虽然实现简便,但是码率控制过程的延迟很大。并且帧间并行编码的并行度越高,同时进行编码的视频帧数越多,码率控制过程的延迟就越大,码率控制的效果越差。对于存在运动场景的视频编码,采用这种方案会导致码率控制的效果大幅降低,极大地影响编码效率。
技术实现要素:
16.本发明所要解决的技术问题是:如何在帧间并行编码的码率控制过程中减少延迟。
17.为解决上述技术问题,本发明提出了一种基于虚拟帧同步的帧间并行编码的码率控制方法,包括如下步骤。步骤s1:将待编码视频帧划分为多个虚拟子帧;按照参与帧间并行编码的编码核心的个数,将每个待编码视频帧在垂直方向上划分为高度尽可能相等的多个子帧,每个子帧由一个或多个图像块行组成,每个子帧的宽度均等于待编码视频帧的宽度,每个子帧的高度至少覆盖子帧内部第一个图像块行的搜索窗口;这样划分后的每一个子帧就是一个虚拟子帧;对于同一个视频序列,所有待编码视频帧的虚拟子帧划分方式都保持一致。再将多个虚拟子帧组合成虚拟帧;将编码时间相邻的视频帧内部的位置相邻的、且具备并行编码条件的一个或者多个虚拟子帧组合成一个虚拟帧;一个虚拟帧内部所包含的虚拟子帧的数量最少为1个,最多等同于参与帧间并行编码的编码核心的数量。步骤s2:基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码,并在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息。步骤s3:根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配,得到各个待编码虚拟子帧的目标编码比特数。步骤s4:根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧的编码状态信息,对待编码虚拟子帧进行目标比特控制,得到待编码虚拟子帧的拉格朗日乘子λ和量化参数qp。步骤s5:根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特分配,得到待编码虚拟子帧内部的各个图像块的目标编码比特数。所述步骤s4、步骤s5的顺序或者任意在前,或者同时进行。步骤s6:根据待编码虚拟子帧内部各个图像块的目标编码比特数,结合待编码虚拟子帧的拉格朗日乘子λ和量化参数qp,以及相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特控制,得到各个图像块的拉格朗日乘子λ和量化参数qp。
18.优选地,所述步骤s1中,采用h.265视频编码时虚拟子帧由最大编码单元lcu行组成,采用h.264视频编码时虚拟子帧由宏块mb行组成。
19.进一步地,所述步骤s1中,当待编码视频帧的个数为m、参与并行编码的编码核心的个数为n时,组合出的虚拟帧的个数为m+n-1,m、n均为正整数。
20.进一步地,所述步骤s2中,视频编码的顺序按照虚拟帧的顺序来进行,即从第一个虚拟帧开始编码,一直编码到最后一个虚拟帧结束;当前一个虚拟帧内部的虚拟子帧全部编码完成后,后一个虚拟帧上的虚拟子帧开始编码;在视频帧的层面,前后视频帧的编码是
并行进行的;在虚拟帧的层面,前后虚拟帧的编码是串行进行的。
21.优选地,所述步骤s2中,将属于同一个视频帧的虚拟子帧始终调度在同一个编码核心上编码,使同一个视频帧的编码状态信息得到延续,而不需要进行额外的编码状态信息转存。
22.进一步地,所述步骤s2中,虚拟子帧的编码状态信息,虚拟子帧内部各个图像块的编码状态信息包括如下一种或多种:虚拟子帧或其内部各个图像块的实际编码比特数、失真代价、预测代价、拉格朗日乘子λ、量化参数qp。在虚拟帧编码完成时进行编码核心的同步,将各个虚拟子帧的实际编码比特数求和得到虚拟帧的实际编码比特数,还统计目前已经完成编码的所有虚拟帧内部的虚拟子帧的总个数、视频序列中当前已编码的所有虚拟帧的实际编码比特数;这些作为虚拟帧的编码状态信息。
23.进一步地,所述步骤s3中,当一个虚拟帧编码完成时,其内部各个虚拟子帧的实际编码比特数与编码前计算的目标编码比特数往往存在误差,这个误差在一个由后续的多个虚拟子帧组成的滑动窗口中进行平滑;先计算滑动窗口中的虚拟子帧的平均目标编码比特数的值,并根据不同类型的视频帧的虚拟子帧之间的目标编码比特数的大小比例关系、结合视频编码的图像组结构,计算出不同类型虚拟子帧的目标编码比特数。
24.进一步地,所述步骤s3中,滑动窗口中的虚拟子帧的平均目标编码比特数通过如下公式计算:其中,是滑动窗口内部的虚拟子帧的平均目标编码比特数,r
avg
是由视频序列的目标编码码率计算得到的每一个虚拟子帧的平均目标编码比特数,n
coded
是视频序列中当前已编码的虚拟子帧的个数,n
sw
是滑动窗口的大小,r
coded
是视频序列中当前已编码的所有虚拟帧的实际编码比特数,也是当前已编码的所有虚拟子帧的实际编码比特数。
25.进一步地,所述步骤s5中,待编码虚拟子帧内部各个图像块的目标编码比特数计算公式如下:其中,r
blk_cur
为待编码虚拟子帧内部某一个位置图像块的目标编码比特数,ω
blk_cur
为之前已编码的虚拟子帧内部相同位置图像块的预测代价值,ω
pic
为之前已编码的虚拟子帧内部所有图像块的预测代价值之和,r
pic
为当前待编码虚拟子帧的目标编码比特数。
26.本发明还提出了一种基于虚拟帧同步的帧间并行编码的码率控制装置,包括虚拟子帧和虚拟帧划分模块、虚拟帧编码任务调度模块、虚拟子帧目标比特分配模块、虚拟子帧目标比特控制模块、图像块目标比特分配模块和图像块目标比特控制模块。所述虚拟子帧和虚拟帧划分模块用来将待编码视频帧划分为多个虚拟子帧,按照参与帧间并行编码的编码核心的个数,将每个待编码视频帧在垂直方向上划分为高度尽可能相等的多个子帧,每个子帧由一个或多个图像块行组成,每个子帧的宽度均等于待编码视频帧的宽度,每个子帧的高度至少覆盖子帧内部第一个图像块行的搜索窗口;这样划分后的每一个子帧就是一个虚拟子帧;对于同一个视频序列,所有待编码视频帧的虚拟子帧划分方式都保持一致;所述虚拟子帧和虚拟帧划分模块还用来将多个虚拟子帧组合成虚拟帧;将编码时间相邻的视频帧内部的位置相邻的、且具备并行编码条件的一个或者多个虚拟子帧组合成一个虚拟
帧。一个虚拟帧内部所包含的虚拟子帧的数量最少为1个,最多等同于参与帧间并行编码的编码核心的数量。所述虚拟帧编码任务调度模块用来基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码,并在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息。所述虚拟子帧目标比特分配模块用来根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配,得到各个待编码虚拟子帧的目标编码比特数。所述虚拟子帧目标比特控制模块用来根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧的编码状态信息,对待编码虚拟子帧进行目标比特控制,得到待编码虚拟子帧的拉格朗日乘子λ和量化参数qp。所述图像块目标比特分配模块用来根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特分配,得到待编码虚拟子帧内部的各个图像块的目标编码比特数。所述图像块目标比特控制模块用来根据待编码虚拟子帧内部各个图像块的目标编码比特数,结合待编码虚拟子帧的拉格朗日乘子λ和量化参数qp,以及相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特控制,得到各个图像块的拉格朗日乘子λ和量化参数qp。
27.本发明取得的技术效果是:基于虚拟帧进行帧间并行编码过程和码率控制过程,后一个虚拟帧的码率控制过程可以使用相邻的前一个已完成编码的虚拟帧的编码状态信息,使得码率控制无延迟。
附图说明
28.图1是一个常见的i帧、p帧、b帧的图像组结构的示意图。
29.图2是运动估计过程的简单示意图。
30.图3是帧间并行编码的简单示意图。
31.图4是一种现有的在帧间并行编码时进行码率控制的方法的简单示意图。
32.图5是本发明提出的基于虚拟帧同步的帧间并行编码的码率控制方法的流程示意图。
33.图6是将一个视频帧划分为多个虚拟子帧的示意图。
34.图7是虚拟帧的划分方式的一个示例的示意图。
35.图8是本发明提出的基于虚拟帧同步的帧间并行编码的码率控制装置的结构示意图。
36.图中附图标记说明:1为虚拟子帧和虚拟帧划分模块、2为虚拟帧编码任务调度模块、3为虚拟子帧目标比特分配模块、4为虚拟子帧目标比特控制模块、5为图像块目标比特分配模块、6为图像块目标比特控制模块。
具体实施方式
37.请参阅图5,本发明提出的基于虚拟帧同步的帧间并行编码的码率控制方法包括如下步骤。
38.步骤s1:将待编码视频帧划分为多个虚拟子帧,再将多个虚拟子帧组合成虚拟帧。
39.虚拟子帧、虚拟帧的概念不是现有的,而是本发明提出的。本发明中,“虚拟子帧”并不是h.264、h.265等视频编码标准中规定的视频编码单元,而是为了进行帧间并行编码的码率控制而人为划分的码率控制单元。本发明中,虚拟子帧作为目标比特分配的一级参与码率控制。现有的目标比特分配在图像组、视频帧、图像块三个级别进行。本发明的目标比特分配在图像组、虚拟帧、虚拟子帧、图像块四个级别进行。
40.这一步中,虚拟子帧的划分规则是,按照参与帧间并行编码的编码核心的个数,将每个待编码视频帧在垂直方向上划分为高度尽可能相等的多个子帧,每个子帧由一个或多个图像块行(即一行或者多行图像块)组成,每个子帧的宽度均等于待编码视频帧的宽度,每个子帧的高度尽可能相等,且每个子帧的高度至少需要覆盖子帧内部第一个图像块行的搜索窗口;这样划分后的每一个子帧就是一个虚拟子帧。例如,在h.265编码时虚拟子帧由lcu行组成,在h.264编码时虚拟子帧由mb(micro block,宏块)行组成。对于同一个视频序列,所有待编码视频帧的虚拟子帧划分方式都保持一致。请参阅图6,这是将一个视频帧划分为多个虚拟子帧的示意图。帧间并行编码时,前后视频帧之间能够并行编码的前提条件是——待编码的图像块行在其参考帧上所对应的搜索窗口区域都已经编码重建完成。这一步在划分虚拟子帧时,要求虚拟子帧的高度至少需要覆盖虚拟子帧内部第一个图像块行的搜索窗口,这样才能保证属于同一个虚拟帧的各个虚拟子帧的编码过程可以进行同步。
41.这一步中,视频帧的虚拟子帧划分数目过多或者过少都会带来不利影响。如果虚拟子帧划分过多,会导致各个虚拟子帧的高度较小,不利于虚拟子帧内部图像块的码率控制,且各虚拟子帧之间进行同步的成本会更高。如果虚拟子帧划分过少,帧间并行编码的并行度会降低,造成编码核心的浪费。优选地,按照参与帧间并行编码的编码核心的个数来划分虚拟子帧,即一个视频帧所划分的虚拟子帧的个数等于参与帧间并行编码的编码核心的个数。
42.本发明中,“虚拟帧”是由编码时间相邻的视频帧内部的空域(即位置)相邻的、且具备并行编码条件的一个或者多个虚拟子帧组成的虚拟视频帧。将多个虚拟子帧组合成虚拟帧的目的,是为了方便属于同一个虚拟帧的虚拟子帧间进行编码同步,便于进行虚拟子帧的目标比特分配和编码状态信息统计。一个虚拟帧内部所包含的虚拟子帧的数量最少为1个,最多等同于参与帧间并行编码的编码核心的数量。
43.请参阅图7,这是本发明中虚拟帧的组合方式的一个示例。参与帧间并行编码的编码核心共有四个,即编码核心1-编码核心4,被依序分别调度在不同的视频帧上并行进行编码。需要编码的视频帧有6帧,其中第1帧为i帧(灰色),第2-6帧为p帧或b帧(无色)。可以看到,由于编码核心有4个,因此每一个视频帧都被划分为4个虚拟子帧,例如第1帧被划分为1-1、1-2、1-3、1-4共4个虚拟子帧。本发明中,虚拟帧由编码时间相邻的视频帧内部的空域相邻的、且具备并行编码条件的一个或者多个虚拟子帧组成。在图7中,每个虚拟帧用虚斜线表示。表1列出了每个虚拟帧由哪些虚拟子帧构成。
44.[0045][0046]
表1:图7中每个虚拟帧的构成
[0047]
在图7的示例中,第1帧和第2帧属于编码时间相邻的视频帧,第2帧和第3帧属于编码时间相邻的视频帧,以此类推。虚拟子帧1-1到6-1分别位于不同的视频帧,尽管它们的采样时间不同,但是它们大小相同且位于相同的空域位置,因此它们属于相同位置(例如称为第一位置)的虚拟子帧。同理,虚拟子帧1-2到6-2、虚拟子帧1-3到6-3、虚拟子帧1-4到6-4也分别属于相同位置(例如分别称为第二位置、第三位置、第四位置)的虚拟子帧。第一位置上的任意一个虚拟子帧和第二位置上的任意一个虚拟子帧属于位置相邻的虚拟子帧,第二位置上的任意一个虚拟子帧和第三位置上的任意一个虚拟子帧属于位置相邻的虚拟子帧,以此类推。“具备并行编码条件”是指每一个虚拟子帧(例如虚拟子帧5-1)在前一个视频帧的相同位置的虚拟子帧(虚拟子帧4-1)已经编码重建完成。举例说明,对于虚拟子帧5-1来说,其能够开始编码的前提条件是,其内部第一个图像块行上的图像块所对应的搜索窗口区域(位于虚拟子帧4-1)必须要已经编码重建完成,否则无法进行运动估计。在将视频帧划分虚拟子帧时已经限定了所有虚拟子帧的高度至少需要覆盖虚拟子帧内部第一个图像块行的搜索窗口,因此虚拟子帧5-1能够开始编码的前提条件就是虚拟子帧4-1已经编码重建完成。“具备并行编码条件”就决定了图7中的斜线一定是从左下角往右上角方向连接一个或多个虚拟子帧的。
[0048]
当待编码视频帧的个数更多时,虚拟子帧的划分情况可以按照本示例中的情况类推。按照本发明中的虚拟帧组合规则,当待编码视频帧的个数为m且参与并行编码的编码核心的个数为n时,组合出的虚拟帧的个数为m+n-1,m、n均为正整数。
[0049]
步骤s2:基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码,并在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息。
[0050]
本发明中,由于虚拟子帧的高度至少需要覆盖虚拟子帧内部第一个图像块行的搜索窗口,因此,属于同一个虚拟帧的虚拟子帧具备并行编码的条件,可以被分配到不同的编码核心上进行并行编码。并行编码可以同时开始,也可以同时结束,即各个编码核心可以在虚拟帧级别进行同步。当前一个虚拟帧内部的虚拟子帧全部编码完成后,后一个虚拟帧上的虚拟子帧开始编码。以图7为例,当虚拟帧4完成编码后,虚拟帧5即将开始编码。
[0051]
这一步在调度的过程中,优选地将采样时间相同的虚拟子帧(即属于同一个视频帧的虚拟子帧)始终调度在同一个编码核心上编码;即通过合理的调度,在编码不同的虚拟帧时,使属于同一个视频帧的虚拟子帧的编码在同一个编码核心上完成,这样可以使同一个视频帧的编码状态信息——例如cabac(context-based adaptive binary arithmetic coding,基于上下文的自适应二进制算术编码)状态信息——可以得到延续,而不需要进行额外的编码状态信息转存。以图7为例,当编码虚拟帧1时,虚拟子帧1-1被调度到编码核心1上编码。当编码虚拟帧2时,与虚拟子帧1-1同属于第1帧的虚拟子帧1-2仍然被调度到编码核心1上编码,以此类推,直至虚拟帧4编码完成,同属于第1帧的虚拟子帧1-1、1-2、1-3、1-4都被调度在编码核心1上进行编码。从图7中可以看到,采用这种优选的虚拟子帧调度方法后,在编码虚拟帧1到虚拟帧9的过程中,属于同一个视频帧的虚拟子帧都在同一个编码核心上进行编码。
[0052]
这一步中,虚拟帧内部的各个虚拟子帧会被分别调度到不同的编码核心上进行并行编码。每个编码核心在编码虚拟子帧时,需要记录下该虚拟子帧的编码状态信息,以及该虚拟子帧内部各个图像块的编码状态信息,供后续虚拟帧内部的相同位置虚拟子帧及其内部图像块的码率控制过程使用。需要记录的虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息由具体的码率控制算法的要求决定,可以是虚拟子帧及其内部各个图像块的实际编码比特数、失真代价(例如平方误差和ssd)、预测代价(例如绝对误差和sad或者绝对变换误差和satd)、拉格朗日乘子λ、量化参数qp等等,这里不再赘述。
[0053]
这一步中,在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息。其中,虚拟子帧及其内部各个图像块的编码状态信息由各个编码核心进行统计和记录,再将各个虚拟子帧的实际编码比特数求和,得到虚拟帧的实际编码比特数。同时,还需要统计目前已经完成编码的所有虚拟帧内部的虚拟子帧的总个数(即视频序列中当前已编码的虚拟子帧的个数)、视频序列中当前已编码的所有虚拟帧的实际编码比特数(通过累加每一个已编码的虚拟帧的实际编码比特数得到)。这些作为虚拟帧的编码状态信息。
[0054]
这一步中,视频编码的顺序按照虚拟帧的顺序来进行,即从第一个虚拟帧开始编码,一直编码到最后一个虚拟帧结束。可以发现,尽管在视频帧的层面,前后视频帧的编码是并行进行的。但是在虚拟帧的层面,前后虚拟帧的编码是串行进行的。基于这种串行编码的虚拟帧来进行码率控制,可以在不影响前后视频帧并行编码的基础上,使后一个虚拟帧的码率控制过程使用相邻的前一个已完成编码的虚拟帧的编码状态信息,实现无延迟的码率控制。
[0055]
步骤s3:根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配,得到各个待编码虚拟子帧的目标编码比特数。
[0056]
这一步中,当一个虚拟帧编码完成时,其内部各个虚拟子帧的实际编码比特数与编码前计算的目标编码比特数往往存在误差,这个误差可以在一个由后续的多个虚拟子帧组成的滑动窗口(smooth window,sw)中进行平滑,以减小瞬时码率波动,使码率控制更加准确。在滑动窗口中,其包含的虚拟子帧的数目称为滑动窗口的大小,其内部的虚拟子帧的平均目标编码比特数可以通过如下公式计算:其中,
是滑动窗口内部的虚拟子帧的平均目标编码比特数,r
avg
是由视频序列的目标编码码率计算得到的每一个虚拟子帧的平均目标编码比特数,由视频序列的目标编码码率计算r
avg
的方法为:n
coded
是视频序列中当前已编码的虚拟子帧的个数,n
sw
是滑动窗口的大小,r
coded
是视频序列中当前已编码的所有虚拟帧的实际编码比特数(也是当前已编码的所有虚拟子帧的实际编码比特数)。可见,随着编码过程的进行,的值会随着视频序列的编码状态不同而不断变化。
[0057]
在一个虚拟帧编码完成时,计算出的值,并据此进行下一个虚拟帧内部各个虚拟子帧的目标比特分配。由于下一个虚拟帧内部可能包含不同类型(即分属于i帧、p帧、b帧)的虚拟子帧,在进行虚拟子帧的目标比特分配时,一种方法是根据预先设置的不同类型的视频帧的虚拟子帧之间的目标编码比特数的大小比例关系来进行。例如,属于i帧的虚拟子帧的目标编码比特数的大小一般设置为属于p帧的虚拟子帧的目标编码比特数的大小的6-10倍,属于b帧的虚拟子帧的目标编码比特数的大小一般设置为属于p帧的虚拟子帧的目标编码比特数的大小的1/4-1/2倍。根据这些预先设置的不同类型的虚拟子帧的目标编码比特数的大小比例关系,结合视频编码的图像组结构以及的值,就可以计算出不同类型虚拟子帧的目标编码比特数,这里不再赘述。
[0058]
步骤s4:根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧的编码状态信息,对待编码虚拟子帧进行目标比特控制,得到待编码虚拟子帧的拉格朗日乘子λ和量化参数qp。
[0059]
这一步计算待编码虚拟子帧的λ和qp,可以使用不同的码率控制算法来进行。例如对于h.265编码,可以使用jctvc-k0103提案中基于编码比特率r与拉格朗日乘子λ的关系模型(即r-λ模型)的码率控制算法来计算虚拟子帧的λ和qp。这里不再赘述。虚拟子帧不属于现有技术,这里出现的虚拟子帧级别的拉格朗日乘子λ和量化参数qp可以参照视频帧级别的拉格朗日乘子λ和量化参数qp的计算方法。
[0060]
在计算得到虚拟子帧的λ和qp以后,它们可以作为虚拟子帧内部各个图像块的λ和qp的约束条件参与图像块的目标比特控制过程,使虚拟子帧内部各个图像块的λ和qp的变化不要过于剧烈,减小虚拟子帧内部各个图像块之间的视频质量波动。
[0061]
步骤s5:根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特分配,得到待编码虚拟子帧内部的各个图像块的目标编码比特数。
[0062]
这一步中,利用之前已编码的相同位置虚拟子帧内部图像块的预测代价值,来进行待编码虚拟子帧内部各个图像块的目标比特分配。图像块的目标编码比特数计算公式如下:其中,r
blk_cur
为待编码虚拟子帧内部某一个位置图像块的目标编码比特数,ω
blk_cur
为之前已编码的虚拟子帧内部相同位置图像块的预测代价值,ω
pic
为之前已编码的虚拟子帧内部所有图像块的预测代价值之和,r
pic
为当前待编码虚拟子帧的目标编码比特数。
[0063]
所述步骤s4、步骤s5的顺序没有严格限制,可以任意在前,或者同时进行。
[0064]
步骤s6:根据待编码虚拟子帧内部各个图像块的目标编码比特数,结合待编码虚拟子帧的拉格朗日乘子λ和量化参数qp,以及相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特控制,得到各个图像块的拉格朗日乘子λ和量化参数qp,用于图像块的实际编码过程。
[0065]
这一步计算待编码虚拟子帧内部各个图像块的λ和qp,可以使用不同的码率控制算法来进行。例如对于h.265编码,可以使用jctvc-k0103提案中基于编码比特率r与拉格朗日乘子λ的关系模型(即r-λ模型)的码率控制算法来计算图像块的λ和qp。这里不再赘述。
[0066]
请参阅图8,本发明提出的基于虚拟帧同步的帧间并行编码的码率控制装置包括虚拟子帧和虚拟帧划分模块1、虚拟帧编码任务调度模块2、虚拟子帧目标比特分配模块3、虚拟子帧目标比特控制模块4、图像块目标比特分配模块5和图像块目标比特控制模块6。图8所示装置对应于图5所示方法。
[0067]
所述虚拟子帧和虚拟帧划分模块1用来将待编码视频帧划分为多个虚拟子帧,按照参与帧间并行编码的编码核心的个数,将每个待编码视频帧在垂直方向上划分为高度尽可能相等的多个子帧,每个子帧由一个或多个图像块行组成,每个子帧的宽度均等于待编码视频帧的宽度,每个子帧的高度至少覆盖子帧内部第一个图像块行的搜索窗口;这样划分后的每一个子帧就是一个虚拟子帧;对于同一个视频序列,所有待编码视频帧的虚拟子帧划分方式都保持一致。再将多个虚拟子帧组合成虚拟帧;将编码时间相邻的视频帧内部的位置相邻的、且具备并行编码条件的一个或者多个虚拟子帧组合成一个虚拟帧。一个虚拟帧内部所包含的虚拟子帧的数量最少为1个,最多等同于参与帧间并行编码的编码核心的数量。
[0068]
所述虚拟帧编码任务调度模块2用来基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码,并在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息。
[0069]
所述虚拟子帧目标比特分配模块3用来根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配,得到各个待编码虚拟子帧的目标编码比特数。
[0070]
所述虚拟子帧目标比特控制模块4用来根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧的编码状态信息,对待编码虚拟子帧进行目标比特控制,得到待编码虚拟子帧的拉格朗日乘子λ和量化参数qp。
[0071]
所述图像块目标比特分配模块5用来根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特分配,得到待编码虚拟子帧内部的各个图像块的目标编码比特数。
[0072]
所述图像块目标比特控制模块6用来根据待编码虚拟子帧内部各个图像块的目标编码比特数,结合待编码虚拟子帧的拉格朗日乘子λ和量化参数qp,以及相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特控制,得到各个图像块的拉格朗日乘子λ和量化参数qp,用于图像块的实际编码过程。
[0073]
本发明提出了一种基于虚拟帧同步的帧间并行编码的码率控制方法,通过将待编码视频帧合理地划分为虚拟子帧,再将多个虚拟子帧组合成虚拟帧,并基于虚拟帧对视频
帧的并行编码过程和码率控制过程进行调度和同步。在保证待编码视频帧的并行编码的基础上,使后一个虚拟帧的码率控制过程可以使用相邻的前一个已完成编码的虚拟帧的编码状态信息,使基于虚拟帧的码率控制过程可以串行进行,实现了无延迟的码率控制,极大地提升了帧间并行编码时的码率控制效果。
[0074]
以上仅为本发明的优选实施例,并不用于限定本发明。对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,包括如下步骤;步骤s1:将待编码视频帧划分为多个虚拟子帧;按照参与帧间并行编码的编码核心的个数,将每个待编码视频帧在垂直方向上划分为高度尽可能相等的多个子帧,每个子帧由一个或多个图像块行组成,每个子帧的宽度均等于待编码视频帧的宽度,每个子帧的高度至少覆盖子帧内部第一个图像块行的搜索窗口;这样划分后的每一个子帧就是一个虚拟子帧;对于同一个视频序列,所有待编码视频帧的虚拟子帧划分方式都保持一致;再将多个虚拟子帧组合成虚拟帧;将编码时间相邻的视频帧内部的位置相邻的、且具备并行编码条件的一个或者多个虚拟子帧组合成一个虚拟帧;一个虚拟帧内部所包含的虚拟子帧的数量最少为1个,最多等同于参与帧间并行编码的编码核心的数量;步骤s2:基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码,并在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息;步骤s3:根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配,得到各个待编码虚拟子帧的目标编码比特数;步骤s4:根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧的编码状态信息,对待编码虚拟子帧进行目标比特控制,得到待编码虚拟子帧的拉格朗日乘子λ和量化参数qp;步骤s5:根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特分配,得到待编码虚拟子帧内部的各个图像块的目标编码比特数;所述步骤s4、步骤s5的顺序或者任意在前,或者同时进行;步骤s6:根据待编码虚拟子帧内部各个图像块的目标编码比特数,结合待编码虚拟子帧的拉格朗日乘子λ和量化参数qp,以及相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特控制,得到各个图像块的拉格朗日乘子λ和量化参数qp。2.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s1中,采用h.265视频编码时虚拟子帧由最大编码单元lcu行组成,采用h.264视频编码时虚拟子帧由宏块mb行组成。3.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s1中,当待编码视频帧的个数为m、参与并行编码的编码核心的个数为n时,组合出的虚拟帧的个数为m+n-1,m、n均为正整数。4.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s2中,视频编码的顺序按照虚拟帧的顺序来进行,即从第一个虚拟帧开始编码,一直编码到最后一个虚拟帧结束;当前一个虚拟帧内部的虚拟子帧全部编码完成后,后一个虚拟帧上的虚拟子帧开始编码;在视频帧的层面,前后视频帧的编码是并行进行的;在虚拟帧的层面,前后虚拟帧的编码是串行进行的。5.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s2中,将属于同一个视频帧的虚拟子帧始终调度在同一个编码核心上编码,使同一个视频帧的编码状态信息得到延续,而不需要进行额外的编码状态信息转存。
6.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s2中,虚拟子帧的编码状态信息,虚拟子帧内部各个图像块的编码状态信息包括如下一种或多种:虚拟子帧或其内部各个图像块的实际编码比特数、失真代价、预测代价、拉格朗日乘子λ、量化参数qp;在虚拟帧编码完成时进行编码核心的同步,将各个虚拟子帧的实际编码比特数求和得到虚拟帧的实际编码比特数,还统计目前已经完成编码的所有虚拟帧内部的虚拟子帧的总个数、视频序列中当前已编码的所有虚拟帧的实际编码比特数;这些作为虚拟帧的编码状态信息。7.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s3中,当一个虚拟帧编码完成时,其内部各个虚拟子帧的实际编码比特数与编码前计算的目标编码比特数往往存在误差,这个误差在一个由后续的多个虚拟子帧组成的滑动窗口中进行平滑;先计算滑动窗口中的虚拟子帧的平均目标编码比特数的值,并根据不同类型的视频帧的虚拟子帧之间的目标编码比特数的大小比例关系、结合视频编码的图像组结构,计算出不同类型虚拟子帧的目标编码比特数。8.根据权利要求7所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s3中,滑动窗口中的虚拟子帧的平均目标编码比特数通过如下公式计算:其中,是滑动窗口内部的虚拟子帧的平均目标编码比特数,r
avg
是由视频序列的目标编码码率计算得到的每一个虚拟子帧的平均目标编码比特数,n
coded
是视频序列中当前已编码的虚拟子帧的个数,n
sw
是滑动窗口的大小,r
coded
是视频序列中当前已编码的所有虚拟帧的实际编码比特数,也是当前已编码的所有虚拟子帧的实际编码比特数。9.根据权利要求1所述的基于虚拟帧同步的帧间并行编码的码率控制方法,其特征是,所述步骤s5中,待编码虚拟子帧内部各个图像块的目标编码比特数计算公式如下:其中,r
blk_cur
为待编码虚拟子帧内部某一个位置图像块的目标编码比特数,ω
blk_cur
为之前已编码的虚拟子帧内部相同位置图像块的预测代价值,ω
pic
为之前已编码的虚拟子帧内部所有图像块的预测代价值之和,r
pic
为当前待编码虚拟子帧的目标编码比特数。10.一种基于虚拟帧同步的帧间并行编码的码率控制装置,其特征是,包括虚拟子帧和虚拟帧划分模块、虚拟帧编码任务调度模块、虚拟子帧目标比特分配模块、虚拟子帧目标比特控制模块、图像块目标比特分配模块和图像块目标比特控制模块;所述虚拟子帧和虚拟帧划分模块用来将待编码视频帧划分为多个虚拟子帧,按照参与帧间并行编码的编码核心的个数,将每个待编码视频帧在垂直方向上划分为高度尽可能相等的多个子帧,每个子帧由一个或多个图像块行组成,每个子帧的宽度均等于待编码视频帧的宽度,每个子帧的高度至少覆盖子帧内部第一个图像块行的搜索窗口;这样划分后的每一个子帧就是一个虚拟子帧;对于同一个视频序列,所有待编码视频帧的虚拟子帧划分方式都保持一致;所述虚拟子帧和虚拟帧划分模块还用来将多个虚拟子帧组合成虚拟帧;
将编码时间相邻的视频帧内部的位置相邻的、且具备并行编码条件的一个或者多个虚拟子帧组合成一个虚拟帧。一个虚拟帧内部所包含的虚拟子帧的数量最少为1个,最多等同于参与帧间并行编码的编码核心的数量;所述虚拟帧编码任务调度模块用来基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码,并在虚拟帧编码完成时进行编码核心的同步,统计虚拟帧、虚拟帧内部的各个虚拟子帧、虚拟子帧内部的各个图像块的编码状态信息;所述虚拟子帧目标比特分配模块用来根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配,得到各个待编码虚拟子帧的目标编码比特数;所述虚拟子帧目标比特控制模块用来根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧的编码状态信息,对待编码虚拟子帧进行目标比特控制,得到待编码虚拟子帧的拉格朗日乘子λ和量化参数qp;所述图像块目标比特分配模块用来根据待编码虚拟子帧的目标编码比特数,结合相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特分配,得到待编码虚拟子帧内部的各个图像块的目标编码比特数;所述图像块目标比特控制模块用来根据待编码虚拟子帧内部各个图像块的目标编码比特数,结合待编码虚拟子帧的拉格朗日乘子λ和量化参数qp,以及相同位置已编码虚拟子帧内部图像块的编码状态信息,对待编码虚拟子帧内部的各个图像块进行目标比特控制,得到各个图像块的拉格朗日乘子λ和量化参数qp。
技术总结
本发明公开了一种基于虚拟帧同步的帧间并行编码的码率控制方法。将待编码视频帧划分为多个虚拟子帧;再将多个虚拟子帧组合成虚拟帧。基于虚拟帧对编码核心进行调度,将虚拟帧内部的各个虚拟子帧分别调度到不同的编码核心上进行并行编码。根据当前的虚拟帧的编码状态信息,对下一个待编码虚拟帧内部的各个虚拟子帧进行目标比特分配。本发明基于虚拟帧进行帧间并行编码过程和码率控制过程,后一个虚拟帧的码率控制过程可以使用相邻的前一个已完成编码的虚拟帧的编码状态信息,使得码率控制无延迟。无延迟。无延迟。
技术研发人员:刘鹏飞 温安君 刘国正 唐远开
受保护的技术使用者:翱捷科技股份有限公司
技术研发日:2023.07.18
技术公布日:2023/10/19
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/