一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

视频编码方法、电子设备及存储介质与流程

2022-04-30 10:28:52 来源:中国专利 TAG:


1.本技术实施例涉及视频编码技术领域,特别涉及一种视频编码方法、电子设备及存储介质。


背景技术:

2.视频是由连续的视频帧构成,一个视频帧即为一幅图像。由于连续的视频帧之间具有一定的相似性,因此,为便于储存传输,需要对原始的视频进行编码压缩,以尽量去除空间维度和时间维度上的冗余信息,其中,基于平均码率的视频编码方法由于能够在解码后的视频质量和编码后的视频传输带宽方面之间取得一个平衡,因此获得了广泛的应用。目前常用的基于平均码率的视频编码方法主要是以一个预设的码率作为编码目标,在视频帧内容简单的情况下为其分配较少的编码比特数,在视频帧内容复杂的情况下为其分配较多的编码比特数,使得在一定时间内码率的平均值接近预设的码率。
3.然而,目前基于平均码率的视频编码方法容易出现码率波动过大、解码后的画质降低等问题,非常影响用户体验。


技术实现要素:

4.本发明实施例的目的在于提供一种视频编码方法、电子设备及存储介质,使得码率波动变小,能够避免画质降低现象的出现。
5.为达到上述目的,本发明的实施例提供了一种视频编码方法,包括:获取局部图像组包含的各视频帧的帧类型,所述局部图像组为编码器当前预存的待编码视频帧序列;根据所述各视频帧的帧类型检测所述局部图像组是否包含i帧;在所述局部图像组包含i帧的情况下,预估所述局部图像组中的视频帧所隶属的图像组在基于当前使用的量化参数进行编码后的第一编码误差,并根据所述第一编码误差调整所述量化参数,以根据调整后的所述量化参数进行编码;在所述局部图像组不包含i帧的情况下,预估所述局部图像组在基于所述量化参数进行编码后的第二编码误差,并根据所述第二编码误差调整所述量化参数,以根据调整后的所述量化参数进行编码。
6.为达到上述目的,本发明的实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的视频编码方法。
7.为达到上述目的,本发明的实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的视频编码方法。
8.本技术实施例提供的视频编码方法,在局部图像组包含i帧的情况下,确定的是局部图像组对应的图像组在基于当前使用的量化参数进行编码后的编码误差,即整个图像组的编码误差,相对于现有技术确定局部图像组在基于当前使用的量化参数进行编码后的编码误差,即局部图像组的编码误差,由于编码误差的观测对象从局部图像组扩大到图像组,
即将由于i帧占用过多编码后的比特数过多导致其他视频帧能够占用的编码后的比特数减小的压力,分配给了视频帧更多的图像组,因此,每个视频帧承担的编码后的比特数减小的压力更小,这样根据图像组的误差调整量化参数就能够为局部图像组中的视频帧更多分配的编码后的比特数,使得局部图像组中的非i帧不会为了给i帧分配更多的比特数而被过度压缩,避免了由于过度压缩导致的画质降低以及码率突降导致的码率波动大的问题。
附图说明
9.一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
10.图1是本发明一实施例中提供的视频编码方法的流程图;
11.图2是本发明另一实施例中提供的包括确定第一期望比特编码比特数步骤的视频编码方法的流程图;
12.图3是本发明另一实施例中提供的包括确定第二期望比特编码比特数步骤的视频编码方法的流程图;
13.图4是本发明另一实施例中提供的包括优化码率预估模型的参数步骤的视频编码方法的流程图;
14.图5是本发明另一实施例中提供的视频编码装置的结构示意图;
15.图6是本发明另一实施例中提供的电子设备的结构示意图。
具体实施方式
16.由背景技术可知,目前基于平均码率的视频编码方法容易出现码率波动过大、解码后的画质降低等问题,非常影响用户体验。
17.经分析发现,上述问题出现的原因在于,视频包含i帧(intra picture)、b帧(bi-directional interpolate prediction frame)和p帧(predictive-frame)3种不同类型的视频帧,其中,i帧要求能够根据编码后的数据进行独立解码,p帧和b帧则需要依赖其他视频帧编码后的数据辅助解码。因此,i帧编码后需要能够保留全部信息,p帧和b帧在对视频进行编码时,视频帧中的i帧被编码后的数据量远大于b帧和p帧。而为了保证码率的平均值靠近预设的码率,通常会为i帧分配更多的比特数,这样会导致靠近i帧的b帧和p帧,即与i帧位于同一局部图像组内的p帧和b帧被过度压缩,即量化参数被过度调整,从而p帧和b帧被编码时的码率大大降低,导致p帧和b帧编码时的码率与i帧相差过大即码率波动过大,以及解码后的画质降低等问题。
18.为解决上述问题,本发明实施例提供了一种视频编码方法,包括:获取局部图像组包含的各视频帧的帧类型,所述局部图像组为编码器当前预存的待编码视频帧序列;根据所述各视频帧的帧类型检测所述局部图像组是否包含i帧;在所述局部图像组包含i帧的情况下,预估所述局部图像组中的视频帧所隶属的图像组在基于当前使用的量化参数进行编码后的第一编码误差,并根据所述第一编码误差调整所述量化参数,以根据调整后的所述量化参数进行编码;在所述局部图像组不包含i帧的情况下,预估所述局部图像组在基于所述量化参数进行编码后的第二编码误差,并根据所述第二编码误差调整所述量化参数,以
根据调整后的所述量化参数进行编码。
19.本技术实施例提供的视频编码方法,在局部图像组包含i帧的情况下,确定的是局部图像组对应的图像组在基于当前使用的量化参数进行编码后的编码误差,即整个图像组的编码误差,相对于现有技术确定局部图像组在基于当前使用的量化参数进行编码后的编码误差,即局部图像组的编码误差,由于编码误差的观测对象从局部图像组扩大到图像组,即将由于i帧占用过多编码后的比特数过多导致其他视频帧能够占用的编码后的比特数减小的压力,分配给了视频帧更多的图像组,因此,每个视频帧承担的编码后的比特数减小的压力更小,这样根据图像组的误差调整量化参数就能够为局部图像组中的视频帧更多分配的编码后的比特数,使得局部图像组中的非i帧不会为了给i帧分配更多的比特数而被过度压缩,避免了由于过度压缩导致的画质降低以及码率突降导致的码率波动大的问题。
20.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施例中,为了使读者更好地理解本发明而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本发明所要求保护的技术方案。
21.以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
22.本发明实施例一方面提供了一种视频编码方法,应用于内部部署有视频编码器的电子设备,如计算机、手机、服务器等。视频编码方法的流程如图1所示。
23.步骤101,获取局部图像组包含的各视频帧的帧类型。
24.一般视频编码器在对视频进行编码的时候,会预先缓存一部分的帧,然后才进行真正的编码。特别地,b帧需要根据其前后的视频帧进行编码和解码,也就是说,视频编码器在对某一视频帧进行编码某一帧时,需要了解该视频帧后面的视频帧的一些信息,即需要换成某一视频帧后面的视频帧用于优化编码,也就是所谓的“lookahead”。例如某个编码器需要先缓存50个视频帧才开始编码,这样输入第50个视频帧时,才开始编码第1帧,输入51帧时,才开始编码第2帧
……
以此类推,编码器内部始终缓存50帧。在编码第i帧的时候,在通过lookahead机制缓存的视频帧便构成了本实施例中的局部图像组,特别地,局部图像组中的视频帧在加入图像组时就由视频编码器确定了帧类型,其中,视频编码器确定帧类型的方式可以是将原始视频包含的第一个视频帧确定为i帧,每隔预设数量个视频帧,就再次确定一个视频帧为i帧,如将原始视频包含的第1个视频帧、第101个视频帧、第201个视频帧
……
均被定义为i帧。
25.即,本实施例中,局部图像组为编码器当前预存的待编码视频帧序列,序列中视频帧的排布顺序由其在原始视频中的时间标签决定。帧类型包括i帧、p帧和b帧。
26.在一些例子中,可以通过设置滑动窗口来确定局部图像组,位于滑动窗口内的视频帧被暂存,从而构成局部图像组,其中,滑动窗口从待编码的视频包含的第一个视频帧开始沿着视频帧的时间标签逐渐增大方向移动,每完成一个视频帧的编码就向后移动一个视频帧。
27.步骤102,根据各视频帧的帧类型检测局部图像组是否包含i帧,若是,执行步骤103,若否,执行步骤104。
28.步骤103,预估局部图像组中的视频帧所隶属的图像组在基于当前使用的量化参
数进行编码后的第一编码误差,并根据第一编码误差调整量化参数,以根据调整后的量化参数进行编码。
29.本实施例中,图像组是指从一个i帧开始到下一个i帧前的视频帧为止组成的视频帧序列。例如当视频编码器将原始视频包含的第1个视频帧、第101个视频帧、第201个视频帧
……
定义为i帧时,原始视频中的第1个视频帧到第100个视频帧组成第一个图像组,第101个视频帧到第200个视频帧组成第二个图像组
……
当然,以上仅为具体的举例说明,在其他情况下i帧还可以考虑视频帧与其前后的视频帧之间的内容变化程度确定i帧,如当某个视频帧与位于其前面的视频帧之间的差异度超过预设值,则将该视频帧定义为i帧,此处就不再一一赘述了。
30.需要说明的是,当前使用的量化参数可以是预先设置的一个初始值,也就是对每一个视频帧,都假设其初始的量化参数为初始值,然后基于初始值进行调整,当前使用的量化参数还可以是前一个视频帧被编码时使用的量化参数等,此处也不再一一赘述了。
31.特别地,第一编码误差是指在将当前使用的量化参数作为图像组中各个视频帧的量化参数的情况下进行编码后得到的比特数,与在图像组中各视频帧编码后的输出码率的平均值为视频编码器预设的目标码率的情况下进行编码后得到的比特数之间的差值。因此,在一些实施例中,如图2所示,步骤103可以包括:
32.步骤1031,根据预设的图像组长度和预设的目标码率,确定局部图像组中的视频帧所隶属的图像组的第一期望编码比特数。
33.本实施例中,图像组长度为图像组中包含的视频帧的数量,例如当视频编码器将原始视频包含的第1个视频帧、第101个视频帧、第201个视频帧
……
定义为i帧时,图像组长度为100。局部图像组中的视频帧都来自确定的图像组,局部图像组中的视频帧所隶属的图像组是指各个视频帧所来源的图像组构成的集合,例如当原始视频中的第1个视频帧到第100个视频帧组成第一个图像组,第101个视频帧到第200个视频帧组成第二个图像组
……
且当前的局部图像组包含第245-255个视频帧时,由于第245-255个视频帧均来自第二个图像组,因此,该局部图像组中的视频帧所隶属的图像组为第二个图像组;当原始视频中的第1个视频帧到第100个视频帧组成第一个图像组,第101个视频帧到第200个视频帧组成第二个图像组
……
且当前的局部图像组包含第99-107个视频帧时,由于第99-100个视频帧来自第一个图像组、第101-107个视频帧来自第二个图像组因此,该局部图像组中的视频帧所隶属的图像组为第一个图像组和第二个图像组。
34.具体地说,根据预设的目标码率确定单个视频帧的期望比特数,根据预设的图像组长度和单个视频帧的期望比特数确定第一期望编码比特数。
35.需要说明的是,由于不同图像组中i帧、p帧和b帧的分布大致相同,因此,不同图像组编码后的比特数、输出码率等大致相同,进而整个视频的视频编码后的平均码率就是每个图像组的平均码率,也就是,图像组的期望平均码率就是预设的目标码率。进而由于期望的是码率的平均值,因此,即使i帧、p帧和b帧编码时存在差异,但是在平均求取码率的情况下,可以假设每一视频帧编码后的输出码率大致相同。进而可以使用一个平均值,即单个视频帧的期望比特数,来表征各个视频帧编码后的期望比特数,进而根据视频帧的数量就能够得到多个视频帧的期望比特数。
36.进而在一个例子中,首先根据以下表达式确定出单个视频帧的期望比特数:
37.f=bitrate/fps
38.其中,f为单个视频帧的期望比特数,bitrate为预设的目标码率,fps为原始视频每秒在显示界面呈现的视频帧的数量即帧率。然后再将图像组长度、单个视频帧的期望比特数以及局部图像组中的视频帧所隶属的图像组的数量相乘确定出第一期望编码比特数,即
39.b
gop
'=g*f*n
40.其中,b
gop
'为第一期望编码比特数,g为图像组长度,f为单个视频帧的期望比特数,n为1或2,当局部图像组中的视频帧所隶属的图像组包含一个图像组时n=1,当局部图像组中的视频帧所隶属的图像组包含两个图像组时n=2。
41.需要说明的是,上述情况是以图像组长度固定的情况进行说明,在其他例子中,第一期望编码比特数可以根据局部图像组中的视频帧所隶属的图像组的长度和单个视频帧的期望比特数。
42.可以理解的是,对视频帧进行编码时,可能会出现误差,并随着时间的变化而积累。若是不考虑这些积累的误差的影响,可能会导致最终编码后输出的平均功率与预设的目标码率相差较大,因此,在一些例子中,还获取当前累积的编码误差总比特数;然后从而在确定第一期望编码比特数时引入编码误差总比特数,如根据预设的图像组长度、单个视频帧的期望比特数和编码误差总比特数确定第一期望编码比特数,即
43.b
gop
'=g*f*n δi
44.其中,b
gop
'为第一期望编码比特数,g为图像组长度,f为单个视频帧的期望比特数,δi为编码误差总比特数,n为1或2,当局部图像组中的视频帧所隶属的图像组包含一个图像组时n=1,当局部图像组中的视频帧所隶属的图像组包含两个图像组时n=2。
45.这样,在调整量化因子的过程中引入当前累积的编码误差总比特数,使得从整体上考虑误差,能够通过后续的编码过程对前面造成的误差进行补偿,避免最终输出的码率与预期的目标码率偏差过大。
46.需要说明的是,编码误差总比特数总是表示为当前已编码的视频帧的期望的总比特数与当前已编码的视频帧编码得到的比特数之差,即
47.δi=x
cur
*f-encbits
48.其中,δi为编码误差总比特数,x
cur
为当前已被编码的视频帧的总数量,f为单个视频帧的期望比特数,encbits为当前已被编码的视频帧被编码后输出的总比特数。此时,δi存在正负之分,在当前已编码的视频帧的期望的总比特数比当前已编码的视频帧编码得到的比特数大的情况下,编码误差总比特数为正值,在当前已编码的视频帧的期望的总比特数比当前已编码的视频帧编码得到的比特数小的情况下,编码误差总比特数为负值。
49.步骤1032,基于预设的码率预估模型和量化参数,预估局部图像组中的视频帧所隶属的图像组编码后的第一预估编码比特数。
50.本实施例中,码率预估模型用于对一个未被编码的视频帧被编码后的输出码率进行预测。并且本实施例不对码率预估模型进行限定,可以任何一种能够根据视频帧的参数预测出该视频帧被编码后的输出码率的模型,如神经网络模型、通过分析码率和数据帧参数的关系建模得到的数学模型等,特别地,还可以在视频编码的过程中不断利用新产生的输出码率和数据帧参数对码率预估模型的数据进行优化,主要是优化码率预估模型的模型
参数,使得模型能够被进一步优化,提高模型预测码率的准确性。
51.在一些例子中,考虑到码率通常与量化参数(quantizer parameter,qp)、视频帧经过阿达玛变换(hadamardtransform)后的绝对误差和(sum of absolute transformed difference,satd)等有关,因此,可以构建一个输入为量化参数和satd,输出为视频帧编码后的输出码率的码率预估模型,其中,模型可以被表示为r(qp,satd)。特别地,为了能够简洁地描述码率预估模型,r(qp,satd)可以被设置为一个线性模型,即
52.r(qp,satd)=(k*satd p)/qp(a)
53.其中,r(qp,satd)为码率预估模型预测的码率,satd和qp分别为需要预测码率的视频帧当前的绝对误差和以及当前使用的量化参数,k和p为码率预估模型的模型参数,可以被调整。
54.可以理解的是,由于qp还可以被量化等级参数qscale表示,即qp=12 6*log2(qscale/0.85),因此,在另一些例子中,码率预估模型不仅可以被表示为r(qp,satd),还可以基于qp与qscale之间的关联关系被表示为r(qsale,satd),如:
55.r(qsale,satd)=(k'*satd p')/qscale(b)
56.其中,r(qsale,satd)为码率预估模型预测的码率,satd和qsale分别为需要预测码率的视频帧当前的绝对误差和以及当前使用的量化等级参数,k'和p'为码率预估模型的模型参数,可以被调整,qsale与qp满足条件:qp=12 6*log2(qscale/0.85)。
57.当然,上述对码率预估模型的举例说明是为了便于表达,因此给出的均是线性模型,在其他例子中码率预估模型也可以是非线性的,此处就不再一一赘述了。
58.需要说明的是,在“lookahed”机制下,视频编码器在决定帧类型的同时,可能就已经确定了该视频帧的satd,例如x264/x265视频编码器,因此,可以直接读取视频编码器运算得到的数据即能得到视频帧的satd。若是视频编码器并未计算出视频帧的satd,在一些例子中,可以从局部图像组中确定出一个最有可能用作参考的视频帧作为参考帧,采用基于块的视频编码方式,按照一定策略将视频帧划分成若干个图像块,然后确定视频帧中给每个图像块的帧内预测和相对于参考帧的帧间预测的残差,接着进行变换,取变换和较小情况下的satd作为当前块的satd,视频帧中所有块的satd相加作为该视频帧的satd。
59.特别地,码率预估模型还可以与视频类别、编码参数集合特性等一些先验信息有关,此处就不再一一赘述了。
60.进而在一些实施例中,基于预设的码率预估模型和量化参数,预估局部图像组中的视频帧所隶属的图像组编码后的第一预估编码比特数,可以通过如下方式实现:基于预设的码率预估模型和量化参数,对局部图像组包含的各个视频帧编码后比特数进行预估;根据预估得到的局部图像组包含的各视频帧编码后的比特数,对局部图像组中的视频帧所隶属的图像组包含的各个视频帧编码后的比特数进行预估;将预估得到的局部图像组中的视频帧所隶属的图像组包含的各个视频帧编码后的比特数之和作为第一预估编码比特数。
61.具体地,在一些例子中,预设的码率预估模型包括基于i帧的码率预估模型、基于p帧的码率预估模型和基于b帧的码率预估模型,因此,基于量化参数和预设的码率预估模型,对局部图像组包含的各个视频帧编码后比特数进行预估,可以包括:根据量化参数和基于i帧的码率预估模型,预估局部图像组中i帧编码后的比特数并将预估的i帧编码后的比特数作为局部图像组中的视频帧所隶属的图像组中各i帧编码后的比特数,也就是说,在码
率预估模型均为线性模型的情况下,局部图像组中各i帧编码后的比特数可以被表示为i
t
=ri(qscalei,satd
t
)=(ki*satd
t
pi)/qscalei,其中,i
t
为局部图像组中的第t个i帧编码后的比特数,ri(qscale
t
,satd
t
)为基于i帧的码率预估模型,qsale
t
表示当前使用的编码i帧的量化等级参数,satd
t
表示局部图像组中第t个i帧的satd,ki和pi分别为基于i帧的码率预估模型的模型参数;根据量化参数和基于p帧的码率预估模型,预估局部图像组中各p帧编码后的比特数,即对局部图像组中的各个p帧编码后的比特数进行预估,也就是,在码率预估模型均为线性模型的情况下,局部图像组中各p帧编码后的比特数可以被表示为ps=r
p
(qscale
p
,satds)=(k
p
*satds p
p
)/qscale
p
,其中,ps为局部图像组中第s个p帧编码后的比特数,r
p
(qscale
p
,satds)为基于p帧的码率预估模型,qscale
p
表示当前使用的编码p帧的量化等级参数,satds表示局部图像组中第s个p帧的satd,k
p
和p
p
分别为基于p帧的码率预估模型的模型参数;根据量化参数和基于b帧的码率预估模型,预估局部图像组中各b帧编码后的比特数,即对局部图像组中的各个b帧编码后的比特数进行预估,也就是,在码率预估模型均为线性模型的情况下,局部图像组中各b帧编码后的比特数可以被表示为bj=rb(qscaleb,satdj)=(kb*satdj pb)/qscaleb,其中,bj为局部图像组中第j个b帧编码后的比特数,rb(qscaleb,satdj)为基于b帧的码率预估模型,qscaleb表示当前使用的编码b帧的量化等级参数,satdj表示局部图像组中第j个b帧的satd,kb和pb分别为基于b帧的码率预估模型的模型参数。从而,根据预估得到的局部图像组包含的各视频帧编码后的比特数,对局部图像组中的视频帧所隶属的图像组包含的各个视频帧编码后的比特数进行预估,可以包括:将局部图像组中i帧编码后的比特数组作为局部图像组中的视频帧所隶属的图像组中各i帧编码后的比特数;根据预估得到的局部图像组中各p帧编码后的比特数、局部图像组中各b帧编码后的比特数以及局部图像组中p帧和b帧的总数量,确定局部图像组中非i帧编码后的平均比特数并将确定出的平均比特数作为局部图像组中的视频帧所隶属的图像组中各p帧和各b帧编码后的比特数,即局部图像组中的视频帧所隶属的图像组中各个非i帧的编码后的比特数其中,n
p
和nb分别为局部图像组中p帧和b帧的总数量,ps为基于p帧的码率预估模型预估的局部图像组中第s个p帧编码后的比特数,bj为基于b帧的码率预估模型预估的局部图像组中第j个b帧编码后的比特数,即使用局部图像组中p帧和b帧编码后的比特数的平均值表示所有非i帧的编码后的比特数。这样将预估得到的比特数之和作为第一预估编码比特数可以被表示为:
[0062][0063]
其中,b
gop
为第一预估编码比特数,i
t
为基于i帧的码率预估模型预估的图像组中第t个i帧编码后的比特数,g为图像组长度,ni为局部图像组中的视频帧所隶属的图像组中i帧的数量,b为局部图像组中非i帧编码后的平均比特数。
[0064]
特别地,某些情况下,预估出来的局部图像组非i帧平均比特数b和预估的平均i帧比特数的比值f可能很大或者很小,导致和实际的情况偏差太大,可以对这个比值的范围进行限定。比如可以将确定第一预估编码比特数的表达式记为如下表达式:
[0065][0066]
其中,b
gop
为第一预估编码比特数,i
t
为基于i帧的码率预估模型预估的图像组中第t个i帧编码后的比特数,g为图像组长度,ni为局部图像组中的视频帧所隶属的图像组中i帧的数量,n
p
、nb和ni分别为局部图像组中p帧、b帧和i帧的总数量,ps为基于p帧的码率预估模型预估的局部图像组中第s个p帧编码后的比特数,bj为基于b帧的码率预估模型预估的局部图像组中第j个b帧编码后的比特数,b
t
为基于i帧的码率预估模型预估的局部图像组中第t个i帧编码后的比特数。
[0067]
进一步地,可以对f做出特别的限定,如:当的结果落在区间[f
min
,f
max
]上时,定义当时,定义f=f
min
;如果时,定义f=f
max

[0068]
可以理解的是,由于视频编码器基于“lookahed”机制只能够对局部图像组中的视频帧进行分析处理,因此,码率预估模型能够处理的对象也被局限在局部图像组中的视频帧内,因此,局部图像组中的视频帧所隶属的图像组中p帧和i帧的数量以及分布方式视频编码器无法得到,只能基于预估的局部图像组中p帧和b帧编码后的比特数对局部图像组中的视频帧所隶属的图像组中p帧和b帧编码后的比特数进一步进行预估,在上述情况下,基于局部图像组中所有p帧和b帧的编码后的比特数的平均值表示所有非i帧编码后的比特数,即p帧和b帧的编码后的比特数。特别地,局部图像组中的视频帧所隶属的图像组中p帧和b帧不是均匀分布,或者,在p帧和b帧均匀分布的情况下局部图像组中p帧和b帧的分布也可能未包含一个完整的p帧和b帧的完整排列周期,这样在利用码率预估模型分别预测p帧和b帧编码后的比特数,很可能由于p帧数量和b帧数量的数量无法准确得到而无法确定局部图像组中的视频帧所隶属的图像组中p帧和i帧编码后的总比特数。当然,在图像组中的p帧和b帧均匀分布的情况下,或者对准确性要求稍微不那么高的情况下,还可以对局部图像组中的p帧和b帧各自的编码后的比特数的平均值作为局部图像组中的视频帧所隶属的图像组中p帧和i帧编码后的比特数,此处就不再一一赘述了。而根据图像组的定义可知i帧是每一个图像组中的第一个视频帧,因此,在局部图像组包含i帧的情况下,该i帧必然为局部图像组中的视频帧所隶属的图像组中的i帧,基于i帧的码率预估模型能够对局部图像组中的视频帧所隶属的图像组中的i帧进行处理,预估得到局部图像组中的视频帧所隶属的图像组中编码后的比特数。
[0069]
值得一提的是,由于不同视频帧的编码需求不同,因此,不同视频帧编码后的比特数具有不同的特性,如i帧期望保留帧内全部信息,p帧不需要保留帧内全部信息,进而针对不同类型的视频帧提供不同的码率预估模型能够提高码率预估模型的针对性,进一步提高码率预估模型预测的码率的准确性。
[0070]
需要说明的是,码率预估模型包括基于i帧的码率预估模型、基于p帧的码率预估
模型和基于b帧的码率预估模型时,由于不同类型的视频帧的码率预估模型所表示的码率与量化参数之间的关系不同,因此,上一已编码或正在编码的视频帧编码使用的量化参数即当前使用的量化参数,通常能够直接作为局部图像组中与该视频帧的帧类型相同的视频帧的量化参数,以估计局部图像组中视频帧编码后的比特数,而局部图像组中其他帧类型的视频帧在预估编码后的比特数时可能需要对当前使用的量化参数进行调整,如上一已编码或正在编码的视频帧帧为p帧,其使用的量化参数为qp1,则局部图像组中的p帧在预估编码后的比特数时应该使用qp1作为基于p帧的码率预估模型的输入之一,而局部图像组中的i帧和b帧在预估编码后的比特数时输入相应的码率预估模型的量化参数是基于qp1进行调整后的结果。基于此,可以设置一定的规则根据当前使用的量化参数来确定各视频帧进行码率预估时输入码率预估模型的量化参数,如将输入所有码率预估模型量化参数统一为当前使用的量化参数,即qpi=qp
p
=qpb,或者,按照一定的比例确定,即qpi*k'=qp
p
=qpb*k''。
[0071]
步骤1033,将第一期望编码比特数和第一预估编码比特数之间的误差作为第一编码误差。
[0072]
本实施例中不对第一期望编码比特数和第一预估编码比特数之间的误差的表示方式进行限定,可以是第一预估编码比特数与第一期望编码比特数的差,即第一编码误差diffg=b
gop-b
gop
',还可以是第一预估编码比特数与第一期望编码比特数的差的绝对值,即第一编码误差diffg=|b
gop-b
gop
'|,还可以是第一预估编码比特数与第一期望编码比特数之间的误差百分比,即第一编码误差diffg=[(b
gop-b
gop
')/b
gop
']*100%等,此处就不再一一赘述了。上述表达式中,b
gop
表示第一预估编码比特数,b
gop
'表示第一期望编码比特数等。
[0073]
步骤1034,根据第一编码误差调整量化参数。
[0074]
本实施例中可以根据第一编码误差的大小确定量化参数的调整步长,如qscale'=qscale diffg*k,其中,qscale'为调整后的量化等级参数,qscale为调整前的量化等级参数,diffg为第一编码误差,k为预设系数,diffg*k为调整步长,当diffg被表示为误差百分比时,k可以取值为qscale,则量化等级参数调整表达式还可以被进一步表达为qscale'=qscale*(diffg 1);或者,根据第一编码误差的大小确定量化等级参数的调整多少个预设步长,如qp'=qp [diffg/k1]*δt,其中,qp'为调整后的量化参数,qp为调整前的量化参数,diffg为第一编码误差,k1为预设系数,δt为预设调整步长,[diffg/k1]为对diffg/k1的结果取整得到的结果,表示对当前使用的量化等级参数调整的调整步长的数量;或者,根据第一编码误差在预设分段调整函数的落点确定如何对量化等级参数进行调整,如预设分段调整函数为其中,δt1、δt2、δt3和δt4分别为预设的调整步长且均为正数,k2、k3和k4分别为预设参数,则当第一编码误差落在区间(k2,0]时,对当前的量化等级参数qp减小δt2,当然,还可以采用其他调整方式,此处就不再一一赘述了。
[0075]
需要说明的是,上述关于举例中,以量化等级参数为例进行说明,量化等级参数的调整可以根据量化参数与量化等级参数之间的关联关系被映射为对量化参数的调整,此处
也不再一一赘述了。
[0076]
可以理解的是,每当有局部图像组中的视频帧被编码后,局部图像组就发生了变化,就需要重新执行本实施例提供的视频编码方法,这样量化参数的调整实时性强,编码输出的码率可控性强、准确性高,更加精准。但是有时候调整过于频繁可能会影响性能,因此,还可以设置一个调整阈值只有第一编码误差超过这个调整阈值才对量化参数进行调整,从而避免调整次数过多。当然,在第一编码误差存在正负之分时,分别设置一个正向调整阈值,一个负向调整阈值,以更好地贴合调整需求。
[0077]
需要说明的是,以上描述主要是针对调整量化参数一次的情况下进行说明的。为了得到满意的量化参数,还可以不断根据调整后的量化参数重新确定第一编码误差进行迭代,直到第一编码误差在一定范围内才停止迭代。特别地,在迭代的过程中可能会出现反复摇摆,即某一次调整后,量化参数低于预设范围的下限,继续调整后,量化参数又高于预设范围的上限,此时,可以设置一个迭代次数上限,当达到迭代次数上限时也需要停止迭代。
[0078]
步骤104,预估局部图像组在基于量化参数进行编码后的第二编码误差,并根据第二编码误差调整量化参数,以根据调整后的量化参数进行编码。
[0079]
本实施例中,第二编码误差是指在将当前使用的量化参数作为局部图像组中各个视频帧的量化参数的情况下进行编码后得到的比特数,与在局部图像组中各视频帧编码后的输出码率的平均值为视频编码器预设的目标码率的情况下进行编码后得到的比特数之间的差值。
[0080]
因此,如图3所示,在一些实施例中,步骤104包括:
[0081]
步骤1041,根据预设的图像组长度和预设的目标码率确定局部图像组的第二期望编码比特数。
[0082]
在一些实施例中,根据预设的图像组长度和预设的目标码率确定局部图像组的第二期望编码比特数可以通过如下方式实现:根据预设的图像组长度、预设的目标码率和记录的上一个i帧被编码后的比特数确定非i帧被编码后的平均比特数;根据局部图像组的长度和确定出的平均比特数确定第二期望编码比特数。其中,为了得到记录的上一个i帧被编码后的比特数,需要在每一个i帧被编码后均记录下被编码后得到的比特数。特别地,对于i帧而言,在被编码前事先记录好码率预估模型预估出的编码后的比特数,就能够在多线程即视频编码器当前同时对超过一个视频帧进行编码的情况下,图像组中的第一个视频帧(也就是i帧)之后的视频帧在其他线程上被编码,会出现其他线程上的局部图像组不包含i帧,但是需要在调整量化参数时使用到记录的上一个i帧被编码后的比特数,而第一个视频帧还在被编码中无法提供记录的上一个i帧被编码后的比特数。此时,可以使用码率预估模型预估出的编码后的比特数作为记录的上一个i帧被编码后的比特数,避免了出现编码错误。
[0083]
在一个例子中,第二期望编码比特数可以通过如下表达式得到:
[0084]bgop
'=ng'*[(g*f-bi)/(g-1)]
[0085]
其中,b
gop
'为第二期望编码比特数,g为图像组长度,f为单个视频帧的期望比特数且满足f=bitrate/fps,,bitrate为预设的目标码率,fps为帧率,ng'为局部图像组长度即局部图像组中视频帧的数量,bi为记录的上一个i帧被编码后的比特数。
[0086]
需要说明的是,因为i帧是每一个图像组中的第一个视频帧,第一个视频帧后面的
视频帧不包含i帧,因此,局部图像组不包含i帧就意味着局部图像组只包含一个图像组的第一帧后面的视频帧,即局部图像组中的视频帧所隶属的图像组中的i帧已经被编码,且是上一个被编码的i帧。也就是说,记录的上一个i帧被编码后的比特数即为局部图像组中的视频帧所隶属的图像组中的i帧被编码后得到的比特数,这样根据预设的图像组长度和预设的目标码率确定出图像组的编码后的期望比特数后减去记录的上一个i帧被编码后的比特数就能够准确地确定出图像组中非i帧的编码后总期望比特数,进而根据图像组的长度-1就能够得到图像组中每个非i帧编码后的期望比特数,即p帧和b帧编码后的期望比特数。相对于根据局部图像组长度和预设的目标码率确定局部图像组的第二期望编码比特数时第二期望编码比特数偏小,并进一步导致调整后的量化参数偏大、压缩过度导致出现画质降低的问题,上述方式能够根据局部图像组的长度和每个非i帧编码后的期望比特数准确地确定出局部图像组的第二期望编码比特数,进一步避免了画质降低。
[0087]
还需要说明的是,图像组和局部图像组中p帧和b帧的分布情况不确定,因此,不能分别确定出p帧和b帧的编码后的期望比特数,而基于p帧和b帧编码时不需要保留帧内全部信息这一共通点,将p帧和b帧作为一个类型,与i帧加以区分,这样能够得到比较准确的局部图像组的第二期望编码比特数。
[0088]
可以理解的是,对视频帧进行编码时,可能会出现误差,并随着时间的变化而积累。若是不考虑这些积累的误差的影响,可能会导致最终编码后输出的平均功率与预设的目标码率相差较大,因此,在一些例子中,还获取当前累积的编码误差总比特数;然后从而在确定第二期望编码比特数时引入编码误差总比特数,如根据局部图像组的长度、确定出的平均比特数和编码误差总比特数确定第二期望编码比特数,即
[0089]bgop
'=ng'*[(g*f-bi)/(g-1)] w*δi
[0090]
其中,b
gop
'为第二期望编码比特数,g为图像组长度,f为单个视频帧的期望比特数且满足f=bitrate/fps,,bitrate为预设的目标码率,fps为帧率,ng'为局部图像组长度即局部图像组中视频帧的数量,bi为记录的上一个i帧被编码后的比特数,δi为编码误差总比特数,w,用于控制对码率误差的补偿速度,w越大则补偿速度越快,且w满足条件0<w≤1。
[0091]
这样,在调整量化因子的过程中引入当前累积的编码误差总比特数,使得从整体上考虑误差,能够通过后续的编码过程对前面造成的误差进行补偿,避免最终输出的码率与预期的目标码率偏差过大。
[0092]
需要说明的是,编码误差总比特数总是表示为当前已编码的视频帧的期望的总比特数与当前已编码的视频帧编码得到的比特数之差,即
[0093]
δi=x
cur
*f-encbits
[0094]
其中,δi为编码误差总比特数,x
cur
为当前已被编码的视频帧的总数量,f为单个视频帧的期望比特数,encbits为当前已被编码的视频帧被编码后输出的总比特数。此时,δi存在正负之分,在当前已编码的视频帧的期望的总比特数比当前已编码的视频帧编码得到的比特数大的情况下,编码误差总比特数为正值,在当前已编码的视频帧的期望的总比特数比当前已编码的视频帧编码得到的比特数小的情况下,编码误差总比特数为负值。
[0095]
特别地,考虑到i帧和p帧以及b帧之间的编码差异,i帧分担的编码误差也可以与p帧和b帧加以区分,因此,在局部图像组不包含i帧的情况下,还可以在上述编码误差总比特数中引入一个修正量,以便修正当前局部图像组需要考虑的编码误差,即编码误差总比特
数可以通过如下表达式确定:
[0096]
δi=x
cur
*f-encbits δ
fix
[0097]
其中,δi为编码误差总比特数,x
cur
为当前已被编码的视频帧的总数量,f为单个视频帧的期望比特数,encbits为当前已被编码的视频帧被编码后输出的总比特数,δ
fix
=b
i-f-(x
cur-x
i-1)[f-(g*f-bi)/(g-1)],bi为记录的上一个i帧被编码后的比特数,xi当前记录的已被编码的i帧的数量,g为图像组长度。
[0098]
步骤1042,基于预设的码率预估模型和量化参数,预估局部图像组编码后的第二预估编码比特数。
[0099]
在一些实施例中,基于预设的码率预估模型和量化参数,预估局部图像组编码后的第二预估编码比特数可以通过如下方式实现:基于预设的码率预估模型和量化参数和预设的码率预估模型,对局部图像组包含的视频帧编码后的比特数进行预估;将预估得到的比特数之和作为第二预估编码比特数。
[0100]
具体地,在一些例子中,预设的码率预估模型包括基于p帧的码率预估模型和基于b帧的码率预估模型。需要说明的是,此时局部图像组不包含i帧,因此不需要使用基于i帧的码率预估模型预估i帧的模型,因此,此处未涉及基于i帧的码率预估模型。此时,基于量化参数和预设的码率预估模型,对局部图像组包含的视频帧编码后的比特数进行预估,可以包括:根据量化参数和基于p帧的码率预估模型,预估局部图像组中所有p帧编码后的比特数;根据量化参数和基于b帧的码率预估模型,预估局部图像组中所有b帧编码后的比特数。此处与前述局部图像组包含i帧的情况下对应部分的处理大致相同,此处就不再一一赘述了。
[0101]
步骤1043,将第二期望编码比特数和第二预估编码比特数之间的误差作为第二编码误差。
[0102]
本实施例的步骤1043与前述的步骤1033大致相同,此处就不再一一赘述了。
[0103]
步骤1044,根据第二编码误差调整量化参数。
[0104]
本实施例的步骤1043与前述的步骤1033大致相同,此处就不再一一赘述了。
[0105]
需要强调的是,由于对局部图像组的编码误差的容忍度要高于图像组的编码误差,因此,在只有编码误差超过预设阈值时才会调整量化参数且编码误差使用误差百分比表示的情况下,第一编码误差对应的预设阈值要低于第二编码误差对应的预设阈值。
[0106]
此外,对于不同的视频或者同一视频的不同时段,视频帧参数与输出码率的映射关系可能会存在不同,即用于描述该映射关系的码率预估模型应该不同以适应不同的视频或同意视频的不同时段的特性。因此,在一些实施例中,如图4所示,视频编码方法还包括:
[0107]
步骤105,对视频帧进行编码后,记录编码后得到的比特数和码率以及编码时使用的量化参数。
[0108]
可以理解的是,由于量化参数qp和量化等级参数qsale之间存在一一对应的映射关系,即qp=12 6*log2(qsale/0.85),因此,在其他实施例中,码率预估模型的输入参数是qsale而非qp,此时记录的是编码后得到的比特数和码率以及编码前更新后的qsale。其中,编码前需要根据更新后的qsale确定对应的qp,从而根据相应的qp进行视频编码。
[0109]
步骤106,根据记录的比特数、码率和量化参数对预设的码率预估模型进行参数优化。
[0110]
本实施例中,主要是以记录的比特数、码率和量化参数作为样本对预设的码率预估模型进行参数更新,如将量化参数作为模型的输入,然后根据码率预估模型的输出结果与记录的比特数和码率之间的误差对码率预估模型的参数进行调整。
[0111]
需要说明的是,预设的码率模型主要用于对量化参数进行优化,使其能够与当前被编码的视频帧相适应。而在对原始视频的第一个视频帧进行编码时,由于缺乏参考的数据,需要事先设置一个初始量化参数值,可以是根据经验或实验数据进行设置,还可以根据已处理的视频中选取一个表现比较好且贴合本原始视频的量化参数。当然不同的码率预估模型可以使用不同的初始量化参数值。
[0112]
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0113]
本发明实施例另一方面还提供了一种视频编码装置,如图5所示,包括:
[0114]
获取模块501,用于获取局部图像组包含的各视频帧的帧类型,局部图像组为编码器当前预存的待编码视频帧序列。
[0115]
检测模块502,用于根据各视频帧的帧类型检测局部图像组是否包含i帧。
[0116]
第一编码模块503,用于在局部图像组包含i帧的情况下,预估局部图像组中的视频帧所隶属的图像组在基于当前使用的量化参数进行编码后的第一编码误差,并根据第一编码误差调整量化参数,以根据调整后的量化参数进行编码。
[0117]
第二编码模块504,用于在局部图像组不包含i帧的情况下,预估局部图像组在基于量化参数进行编码后的第二编码误差,并根据第二编码误差调整量化参数,以根据调整后的量化参数进行编码。
[0118]
不难发现,本实施例为与方法实施例相对应的系统实施例,本实施例可与方法实施例互相配合实施。方法实施例中提到的相关技术细节在本实施例中依然有效,为了减少重复,这里不再赘述。相应地,本实施例中提到的相关技术细节也可应用在方法实施例中。
[0119]
值得一提的是,本实施例中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施例中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
[0120]
本发明实施例另一方面还提供了一种电子设备,如图6所示,包括:至少一个处理器601;以及,与至少一个处理器601通信连接的存储器602;其中,存储器602存储有可被至少一个处理器601执行的指令,指令被至少一个处理器601执行,以使至少一个处理器601能够执行上述任一方法实施例所描述的视频编码方法。
[0121]
其中,存储器602和处理器601采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器601和存储器602的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器601处理的数据通过天线在无线介质上
进行传输,进一步,天线还接收数据并将数据传输给处理器601。
[0122]
处理器601负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器602可以被用于存储处理器601在执行操作时所使用的数据。
[0123]
本发明实施方式另一方面还提供了一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述任一方法实施例所描述的视频编码方法。
[0124]
即,本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0125]
本领域的普通技术人员可以理解,上述各实施例是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献