码率控制方法和装置、存储介质和电子设备转让专利

申请号 : CN202010297264.3

文献号 : CN111479113B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵俊

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明公开了一种码率控制方法和装置、存储介质和电子设备。该方法包括:在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,QPi_init_roi和Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real确定得到的;使用QPi_init_roi和Biti_estimate_roi对第i帧图像进行编码,获取对第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi;根据QPi_real_roi确定第i帧更新量化参数QPi_nonroi,根据Biti_real_roi确定第i帧更新帧大小Biti_nonroi,QPi_nonroi大于QPi_real_roi,Biti_nonroi小于Biti_real_roi;使用QPi_nonroi和Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。

权利要求 :

1.一种码率控制方法,其特征在于,包括:

在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,所述QPi_init_roi和Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real确定得到的;

使用所述QPi_init_roi和Biti_estimate_roi对所述第i帧图像进行编码,并获取对所述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi;

根据所述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据所述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,所述QPi_nonroi大于所述QPi_real_roi,所述Biti_nonroi小于所述Biti_real_roi;

使用所述QPi_nonroi和所述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,其中,所述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。

2.根据权利要求1所述的方法,其特征在于,所述根据所述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,包括:

根据所述QPi_real_roi和预设期望比率(1+ratio)确定所述第i帧更新量化参数QPi_nonroi,其中,所述QPi_nonroi与所述(1+ratio)呈正相关。

3.根据权利要求2所述的方法,其特征在于,所述根据所述QPi_real_roi和预设期望比率(1+ratio)确定所述第i帧更新量化参数QPi_nonroi,包括:通过以下公式确定所述QPi_nonroi:

QPi_nonroi=qScale2QP(qp2QScale(QPi_real_roi)*(1+ratio))其中,所述qScale2QP和qp2QScale为互逆运算。

4.根据权利要求1所述的方法,其特征在于,所述根据所述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,包括:

根据所述Biti_real_roi和预设期望比率(1+ratio)确定所述第i帧更新帧大小Biti_nonroi,其中,所述Biti_nonroi与所述(1+ratio)呈负相关。

5.根据权利要求4所述的方法,其特征在于,所述根据所述Biti_real_roi和预设期望比率(1+ratio)确定所述第i帧更新帧大小Biti_nonroi,包括:通过以下公式确定所述Biti_nonroi:Biti_nonroi=Biti_real_roi/(1+ratio)。

6.根据权利要求1所述的方法,其特征在于,所述使用所述QPi_nonroi和所述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,包括:获取与所述QPi_nonroi对应的第i帧的第一中间变量qscalenonroi_real[i];

获取与所述QPi_init_roi对应的第i帧的第二中间变量qscalenonroi_init[i];

通过以下公式确定所述第一目标参数:

cplxr_sumnonroi[i+1]=cplxr_sumnonroi[i]+Biti_nonroi*qscalenonroi_real[i]/qscalenonroi_init[i]

其中,cplxr_sumnonroi[i+1]为所述第一目标参数。

7.根据权利要求6所述的方法,其特征在于,

所述获取与所述QPi_nonroi对应的第i帧的第一中间变量qscalenonroi_real[i],包括:获取通过如下公式确定的qscalenonroi_real[i]:QPi_nonroi=12+6*log2(qscalenonroi_real[i]/0.85);

所述获取与所述QPi_init_roi对应的第i帧的第二中间变量qscalenonroi_init[i],包括:获取通过如下公式确定的qscalenonroi_init[i]:QPi_init_roi=12+6*log2(qscalenonroi_init[i]/0.85)。

8.根据权利要求1所述的方法,其特征在于,在获取对所述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi之后,所述方法还包括:使用所述QPi_real_roi和所述Biti_real_roi确定所述ROI帧码控模型中第i+1帧的第二目标参数,其中,所述第二目标参数用于在第i+1帧图像为ROI帧图像的情况下确定第i+1帧初始量化参数QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。

9.根据权利要求8所述的方法,其特征在于,所述使用所述QPi_real_roi和所述Biti_real_roi确定所述ROI帧码控模型中第i+1帧的第二目标参数,包括:获取与所述QPi_real_roi对应的第i帧的第三中间变量qscaleroi_real[i];

获取与所述QPi_init_roi对应的第i帧的第四中间变量qscaleroi_init[i];

通过以下公式确定所述第二目标参数:

cplxr_sumroi[i+1]=cplxr_sumroi[i]+Biti_real_roi*qscaleroi_real[i]/qscaleroi_init[i]其中,cplxr_sumroi[i+1]为所述第二目标参数。

10.根据权利要求1所述的方法,其特征在于,在所述使用所述QPi_nonroi和所述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数之后,所述方法还包括:在待传输的第i+1帧图像为非ROI帧图像的情况下,获取所述非ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi,其中,所述QPi+1_init_nonroi和Biti+1_estimate_nonroi是根据所述第一目标参数确定得到的;

使用所述QPi+1_init_nonroi和Biti+1_estimate_nonroi对所述第i+1帧图像进行编码,并获取对所述第i+1帧图像进行编码所得到的第i+1帧平均量化参数QPi+1_real_nonroi和第i+1帧实际帧大小Biti+1_real_nonroi;

根据所述QPi+1_real_nonroi确定第i+1帧更新量化参数QPi+1_roi,并根据所述Biti+1_real_nonroi确定第i+1帧更新帧大小Biti+1_roi,其中,所述QPi+1_roi小于所述QPi+1_real_nonroi,所述Biti+1_roi大于所述Biti+1_real_nonroi;

使用所述QPi+1_roi和所述Biti+1_roi确定所述ROI帧码控模型中第i+2帧的第二目标参数,其中,所述第二目标参数用于在第i+2帧图像为ROI帧图像的情况下确定第i+2帧初始量化参数QPi+2_init_roi和第i+2帧预估帧大小Biti+2_estimate_roi。

11.根据权利要求10所述的方法,其特征在于,所述获取所述非ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_nonroi,包括:获取通过以下公式确定的所述QPi+1_init_nonroi:QPi+1_init_nonroi=qscale_raw/rateFactor其中,所述qscale_raw是根据所述第i帧图像的复杂度预先估计出的参数;

rateFactor=wanted_bits[i+1]/cplxr_sumnonroi[i+1],cplxr_sumnonroi[i+1]为所述第一目标参数;

wanted_bits[i+1]=Bitrate/fps*frame_num[i+1]其中,Bitrate为预设的码率,fps为帧率,frame_num[i+1]为当前已经编码的帧数。

12.根据权利要求10所述的方法,其特征在于,所述获取所述非ROI帧码控模型输出的第i+1帧预估帧大小Biti+1_estimate_nonroi,包括:获取通过以下公式确定的所述Biti+1_estimate_nonroi:Biti+1_estimate_nonroi=(coeff[i+1]*SATD[i+1]+offset[i+1])/(qscalenonroi_init[i+1]*count[i+1])

其中,coeff[i+1]和offset[i+1]为所述第一目标参数;

count[i+1]=count[i]*0.5+1coeff[i+1]=coeff[i]*0.5+(Biti_nonroi*qscalenonroi_real[i]–offset[i]/count[i])/SATD[i]

offset[i+1]=offset[i]*0.5+(Biti_nonroi*qscalenonroi_real[i])*(1–offset[i]/count[i])

QPi+1_init_nonroi=12+6*log2(qscalenonroi_init[i+1]/0.85)QPi_nonroi=12+6*log2(qscalenonroi_real[i]/0.85)QPi_nonroi=qScale2QP(qp2QScale(QPi_real_roi)*(1+ratio))Biti_nonroi=Biti_real_roi/(1+ratio)其中,所述(1+ratio)为预设期望比率,所述qScale2QP和qp2QScale为互逆运算;

其中,所述SATD[x]为预先获取的第x帧的编码参数。

13.一种码率控制装置,其特征在于,包括:

第一获取单元,用于在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,所述QPi_init_roi和Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real确定得到的;

第一处理单元,用于使用所述QPi_init_roi和Biti_estimate_roi对所述第i帧图像进行编码,并获取对所述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi;

第一确定单元,用于根据所述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据所述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,所述QPi_nonroi大于所述QPi_real_roi,所述Biti_nonroi小于所述Biti_real_roi;

第二确定单元,用于使用所述QPi_nonroi和所述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,其中,所述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。

14.一种计算机可读的存储介质,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至12任一项中所述的方法。

15.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至12任一项中所述的方法。

说明书 :

码率控制方法和装置、存储介质和电子设备

技术领域

[0001] 本发明涉及计算机领域,具体而言,涉及一种码率控制方法和装置、存储介质和电子设备。

背景技术

[0002] 用户在观看一帧画面时,往往只对画面中的部分区域感兴趣,我们称这个区域为ROI。对于视频软件、视频网站来说,为了给用户更好的观影体验,希望能将码率分配到ROI
中,而非ROI获得码率保持不变,即ROI画质增强,非ROI画质与原先保持一致。
[0003] 相关技术中,一种常见的ROI码率控制方法为:在ROI检测后,根据检测信息生成一张QP‑OFFSET表,之后将该表传入编码器。编码器在编码具体CTU时,根据QP‑OFFSET表中对
应位置的数值,对当前CTU的QP进行调整,以达到调整码率分配的目的。但是,通过这种方式
会引发画面劣化问题,以及码率浪费的问题。
[0004] 因此,相关技术中,在进行码率控制时,存在码率浪费的问题,尚未提出有效的解决方案。

发明内容

[0005] 本发明实施例提供了一种码率控制方法和装置、存储介质和电子设备,以至少解决在进行码率控制时,存在码率浪费的技术问题。
[0006] 根据本发明实施例的一个方面,提供了一种码率控制方法,包括:在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和
第i帧预估帧大小Biti_estimate_roi,其中,上述QPi_init_roi和Biti_estimate_roi是根据对第i‑1帧图
像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real确定
得到的;使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取对上述第i
帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi;根
据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述Biti_real_roi确定第i帧更新
帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述Biti_nonroi小于上述
Biti_real_roi;使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目
标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧
初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0007] 根据本发明实施例的另一方面,还提供了一种码率控制装置,包括:第一获取单元,用于在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初
始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,上述QPi_init_roi和
Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和
第i‑1帧实际帧大小Biti‑1_real确定得到的;第一处理单元,用于使用上述QPi_init_roi和
Biti_estimate_roi对上述第i帧图像进行编码,并获取对上述第i帧图像进行编码所得到的第i
帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi;第一确定单元,用于根据上述
QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述Biti_real_roi确定第i帧更新帧大小
Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述Biti_nonroi小于上述Biti_real_roi;第
二确定单元,用于使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第
一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i
+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0008] 根据本发明实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述码率
控制方法。
[0009] 根据本发明实施例的又一方面,还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行
上述码率控制方法。
[0010] 在本发明实施例中,对第i‑1帧图像进行编码得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real,在待传输的第i帧图像为ROI帧图像的情况下,根
据QPi‑1_real和Biti‑1_real来确定ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧
预估帧大小Biti_estimate_roi,然后使用QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编
码,并获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际
帧大小Biti_real_roi,并根据QPi_real_roi确定第i帧更新量化参数QPi_nonroi,以及根据上述
Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述
Biti_nonroi小于上述Biti_real_roi,最后,使用上述QPi_nonroi和上述Biti_nonroi对非ROI帧码控模
型中的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况
下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。通过
上述方式,可以通过上一帧(第i‑1帧)的历史参数QPi‑1_real和Biti‑1_real来确定当前帧(第i
帧)的QPi_init_roi和预估帧大小Biti_estimate‑roi,并通过来QPi‑1_rea_roil更新当前帧的量化参数
QPi_nonroi,以及通过Biti‑1_real_roi更新当前帧的Biti_nonroi,以及使用上述QPi_nonroi和上述
Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,使得在每一帧编码结束后,ROI
帧码控模型和非ROI帧码控模型互相更新模型参数,保证了两个模型都拥有足够的历史数
据,进而保证后续帧预测的准确性,提高了码率控制的准确性。

附图说明

[0011] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0012] 图1是根据本发明实施例的一种码率控制方法的应用环境的示意图;
[0013] 图2是根据本发明实施例的一种可选的码率控制方法的流程示意图(一);
[0014] 图3是根据本发明实施例的一种可选的码率控制方法的流程示意图(二);
[0015] 图4是根据本发明实施例的一种可选的非ROI码控模型和ROI码控模型的示意图;
[0016] 图5是根据本发明实施例的一种可选的码率控制方法的流程示意图(三);
[0017] 图6是根据本发明实施例的一种可选的码率控制方法的流程示意图(四);
[0018] 图7是根据本发明实施例的一种可选的码率控制装置的结构示意图;
[0019] 图8是根据本发明实施例的一种可选的电子设备的结构示意图。

具体实施方式

[0020] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范
围。
[0021] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或
描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆
盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于
清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品
或设备固有的其它步骤或单元。
[0022] 本发明实施例中涉及到的技术术语包括:
[0023] 1、人眼感兴趣区域(Region of Interest,简称ROI)。
[0024] 2、Bitrate:码率,同时也指带宽。
[0025] 3、码控:码率控制,用于对编码序列进行码率分配。
[0026] 4、视频质量评测标准(Video Multi‑Method Assessment Fusion,简称VMAF),为Netflix提供的视频质量评测工具,相比图像质量评估算法(structural similarity 
index,简称SSIM)与峰值信噪比(Peak Signalto Noise Ratio,简称PSNR),VMAF的评测结
果与人眼主观观看更一致。
[0027] 5、编码树单元(Coding  Tree  Units,简称CTU),为高效视频编码(High Efficiency Video Coding,简称HEVC)/H.265标准的基本编码模块。
[0028] 6、编码单元(Coding Units,简称CU),为H.265的编码单位。
[0029] 7、比特数Bits:用以衡量编码一帧的大小。
[0030] 8、量化参数QP,直接影响编码后一帧的Bits。
[0031] 9、平均码率控制方法(Average Bitrate Ratecontrol,简称ABR)。
[0032] 根据本发明实施例的一个方面,提供了一种码率控制方法。可选地,上述码率控制方法可以但不限于应用于如图1所示的应用环境中。如图1所示,终端设备102在待传输的第
i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi
和第i帧预估帧大小Biti_estimate_roi,其中,上述QPi_init_roi和Biti_estimate_roi是根据对第i‑1帧
图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real确
定得到的,并通过网络将QPi_init_roi和Biti_estimate_roi发送给服务器104。服务器104接收到
QPi_init_roi和Biti_estimate_roi后,使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行
编码,并获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实
际帧大小Biti_real_roi;根据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述
Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述
Biti_nonroi小于上述Biti_real_roi;使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型
中第i+1帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的
情况下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi;
服务器104将更新后的第一目标参数通过网络传输给终端设备102。以上仅为一种示例,本
申请实施例在此不作限定。
[0033] 可选地,上述方法可以应用于视频播放软件、视屏播放网站等场景中,本实施例在此不作任何限定。
[0034] 可选地,在本实施例中,上述终端设备可以是配置有目标客户端的终端设备,可以包括但不限于以下至少之一:手机(如Android手机、iOS手机等)、笔记本电脑、平板电脑、掌
上电脑、MID(Mobile Internet Devices,移动互联网设备)、PAD、台式电脑、智能电视等。目
标客户端可以是视频客户端、即时通信客户端、浏览器客户端、教育客户端等。上述网络可
以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该
无线网络包括:蓝牙、WIFI及其他实现无线通信的网络。上述服务器可以是单一服务器,也
可以是由多个服务器组成的服务器集群,或者是云服务器。上述只是一种示例,本实施例对
此不做任何限定。
[0035] 可选地,在本实施例中,作为一种可选的实施方式,该方法可以由服务器执行,也可以由终端设备执行,或者由服务器和终端设备共同执行,本实施例中,以由服务器(例如,
上述服务器104)执行为例进行说明。如图2所示,上述码率控制方法的流程可以包括步骤:
[0036] 步骤S202,在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,上述QPi_init_roi
和Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real
和第i‑1帧实际帧大小Biti‑1_real确定得到的。
[0037] 可选地,对第i‑1帧图像进行编码可以得到第i‑1帧的平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real,在第i帧图像(当前帧图像)为ROI帧图像的情况下,根据
QPi‑1_real和Biti‑1_real可以得到ROI帧码控模型输出的第i帧的初始量化参数QPi_init_roi和第i
帧预估帧大小Biti_estimate_roi。
[0038] 需要说明的是,获取通过以下公式确定的上述Biti_estimate_roi:
[0039] Biti_estimate_roi=(coeff[i]*SATD[i]+offset[i])/(qscaleroi_init[i]*count[i])
[0040] count[i]=count[i‑1]*0.5+1
[0041] coeff[i]=coeff[i‑1]*0.5+(Biti‑1_roi*qscaleroi_real[i‑1]–offset[i‑1]/count[i‑1])/SATD[i‑1]
[0042] offset[i]=offset[i‑1]*0.5+(Biti‑1_roi*qscaleroi_real[i‑1])*(1–offset[i‑1]/count[i‑1])
[0043] QPi_init_roi=12+6*log2(qscaleroi_init[i]/0.85)
[0044] QPi‑1_roi=12+6*log2(qscaleroi_real[i‑1]/0.85)
[0045] QPi‑1_roi=qScale2QP(qp2QScale(QPi‑1_real_nonroi)/(1+ratio))
[0046] Biti‑1_roi=Biti‑1_real_roi*(1+ratio)
[0047] 其中,上述(1+ratio)为预设期望比率,上述qScale2QP和qp2QScale为互逆运算;
[0048] 其中,上述SATD[i‑1]为预先获取的编码参数。
[0049] 步骤S204,使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小
Biti_real_roi。
[0050] 可选地,可以使用QPi_init_roi和Biti_estimate_roi对第i帧图像(当前帧图像)进行编码,并获取对第i帧图像进行编码得到的第i帧的平均量化参数QPi_real_roi和第i帧实际帧大
小Biti_real_roi。
[0051] 步骤S206,根据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述
Biti_nonroi小于上述Biti_real_roi。
[0052] 可选地,根据QPi_real_roi确定第i帧的非ROI码控模型的更新量化参数QPi_nonroi,并根据Biti_real_roi确定第i帧的非ROI码控模型的更新帧大小Biti_nonroi,其中,上述QPi_nonroi大
于上述QPi_real_roi,上述Biti_nonroi小于上述Biti_real_roi。
[0053] 步骤S208,使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定
第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0054] 可选地,可以使用QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,该第一目标参数可以用于在第i+1帧图像(下一帧图像)为非ROI帧图像的情况
下,来确定第i+1帧的初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小
Biti+1_estimate_nonroi。
[0055] 通过本实施例,对第i‑1帧图像进行编码得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real,在待传输的第i帧图像为ROI帧图像的情况下,根据QPi‑1_real
和Biti‑1_real来确定ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大
小Biti_estimate_roi,然后使用QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取
对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小
Biti_real_roi,并根据QPi_real_roi确定第i帧更新量化参数QPi_nonroi,以及根据上述Biti_real_roi
确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述Biti_nonroi小
于上述Biti_real_roi,最后,使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1
帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下
确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。通过上
述方式,可以通过上一帧(第i‑1帧)的历史参数QPi‑1_real和Biti‑1_real来确定当前帧(第i帧)
的QPi_init_roi和预估帧大小Biti_estimate‑roi,并通过来QPi‑1_rea_roil更新当前帧的量化参数
QPi_nonroi,以及通过Biti‑1_real_roi更新当前帧的Biti_nonroi,以及使用上述QPi_nonroi和上述
Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,使得在每一帧编码结束后,ROI
帧码控模型和非ROI帧码控模型互相更新模型参数,保证了两个模型都拥有足够的历史数
据,进而保证后续帧预测的准确性,提高了码率控制的准确性。
[0056] 可选地,在本实施例中,上述根据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,包括:根据上述QPi_real_roi和预设期望比率(1+ratio)确定上述第i帧更新量化参
数QPi_nonroi,其中,上述QPi_nonroi与上述(1+ratio)呈正相关。
[0057] 可选地,在第i帧图像为ROI帧图像的情况下,可以通过QPi_real_roi和预设期望比率(1+ratio)来确定上述第i帧更新量化参数QPi_nonroi,其中,上述QPi_nonroi与上述(1+ratio)
呈正相关,ratio可以设置为0.15、0.2、0.3等等,本实施在此不作任何限定。
[0058] 通过本实施例,可以通过QPi_real_roi和预设期望比率(1+ratio)对非ROI模型模型中的QPi_nonroi进行更新,使得非ROI码控模型的参数更加精确,提高了非ROI码控模型的精确
度。
[0059] 可选地,在本实施例中,上述根据上述QPi_real_roi和预设期望比率(1+ratio)确定上述第i帧更新量化参数QPi_nonroi,包括:通过以下公式确定上述QPi_nonroi:QPi_nonroi=
qScale2QP(qp2QScale(QPi_real_roi)*(1+ratio))其中,上述qScale2QP和qp2QScale为互逆
运算。
[0060] 可选地,可以按照以下公式计算QPi_nonroi:
[0061] 如QPi_nonroi=qScale2QP(qp2QScale(QPi_real_roi)*(1+ratio)),其中,上述qScale2QP和qp2QScale为互逆运算。
[0062] 可理解,上述仅为一种示例,本实施例对此不作具体限定。
[0063] 可选地,在本实施例中,上述根据上述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,包括:根据上述Biti_real_roi和预设期望比率(1+ratio)确定上述第i帧更新帧大
小Biti_nonroi,其中,上述Biti_nonroi与上述(1+ratio)呈负相关。
[0064] 可选地,在第i帧图像为ROI帧图像的情况下,可以通过上述Biti_real_roi和预设期望比率(1+ratio)来确定上述第i帧更新帧大小Biti_nonroi,其中,上述Biti_nonroi与上述(1+
ratio)呈负相关。
[0065] 可选地,在本实施例中,上述根据上述Biti_real_roi和预设期望比率(1+ratio)确定上述第i帧更新帧大小Biti_nonroi,包括:通过以下公式确定上述Biti_nonroi:Biti_nonroi=
Biti_real_roi/(1+ratio)。
[0066] 可选地,可以按照以下公式计算Biti_nonroi:
[0067] 如Biti_nonroi=Biti_real_roi/(1+ratio)。
[0068] 可选地,在本实施例中,上述使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,包括:获取与上述QPi_nonroi对应的第i帧的第一中间变量
qscalenonroi_real[i];获取与上述QPi_init_roi对应的第i帧的第二中间变量qscalenonroi_init
[i];通过以下公式确定上述第一目标参数:cplxr_sumnonroi[i+1]=cplxr_sumnonroi[i]+
Biti_nonroi*qscalenonroi_real[i]/qscalenonroi_init[i]其中,cplxr_sumnonroi[i+1]为上述第一
目标参数。
[0069] 可选地,可以通过以下方式来确定非ROI码控模型中第i+1帧的第一目标参数:首先,获取与QPi_nonroi对应的第i帧的第一中间变量qscalenonroi_real[i],然后获取与上述
QPi_init_roi对应的第i帧的第二中间变量qscalenonroi_init[i],最后,可以按照以下公式对对
上述第一目标参数:
[0070] cplxr_sumnonroi[i+1]=
[0071] cplxr_sumnonroi[i]+Biti_nonroi*qscalenonroi_real[i]/qscalenonroi_init[i]
[0072] 其中,cplxr_sumnonroi[i+1]为上述第一目标参数。
[0073] 可选地,在本实施例中,上述获取与上述QPi_nonroi对应的第i帧的第一中间变量qscalenonroi_real[i],包括:获取通过如下公式确定的qscalenonroi_real[i]:QPi_nonroi=12+6*
log2(qscalenonroi_real[i]/0.85);上述获取与上述QPi_init_roi对应的第i帧的第二中间变量
qscalenonroi_init[i],包括:获取通过如下公式确定的qscalenonroi_init[i]:
[0074] QPi_init_roi=12+6*log2(qscalenonroi_init[i]/0.85)。
[0075] 可选地,可以通过公式QPi_nonroi=12+6*log2(qscalenonroi_real[i]/0.85)来确定第一中间变量qscalenonroi_real[i]。
[0076] 以及通过公式QPi_init_roi=12+6*log2(qscalenonroi_init[i]/0.85)来确定第二中间变量qscalenonroi_init[i]i。
[0077] 可选地,在本实施例中,在获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小Biti_real_roi之后,上述方法还包括:使用上述
QPi_real_roi和上述Biti_real_roi确定上述ROI帧码控模型中第i+1帧的第二目标参数,其中,上
述第二目标参数用于在第i+1帧图像为ROI帧图像的情况下确定第i+1帧初始量化参数
QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。
[0078] 可选地,可以使用上述QPi_real_roi和上述Biti_real_roi确定上述ROI帧码控模型中第i+1帧的第二目标参数,其中,上述第二目标参数用于在第i+1帧图像(下一帧图像)为ROI帧
图像的情况下确定第i+1帧初始量化参数QPi+1_init_roi和第i+1帧预估帧大小
Biti+1_estimate_roi。
[0079] 通过上述方式,可以通过当前帧图像的QPi_real_roi和上述Biti_real_roi确定第i+1帧(下一帧图像,如ROI帧图像)的初始量化参数QPi+1_init_roi和第i+1帧预估帧大小
Biti+1_estimate_roi,通过以上一帧的历史参数确定当前帧的参数,以及通过当前帧的参数确
定下一帧的参数的方式,使得码率控制有更多的历史参数可以参考,提高了码率控制的精
度。
[0080] 可选地,在本实施例中,上述方法还包括:上述使用上述QPi_real_roi和上述Biti_real_roi确定上述ROI帧码控模型中第i+1帧的第二目标参数,包括:获取与上述
QPi_real_roi对应的第i帧的第三中间变量qscaleroi_real[i];获取与上述QPi_init_roi对应的第i
帧的第四中间变量qscaleroi_init[i];通过以下公式确定上述第二目标参数:cplxr_sumroi[i
+1]=cplxr_sumroi[i]+Biti_real_roi*qscaleroi_real[i]/qscaleroi_init[i],其中,cplxr_sumroi
[i+1]为上述第二目标参数。
[0081] 可选地,可以按照以下方式确定上述ROI帧码控模型中第i+1帧的第二目标参数,首先,获取与上述QPi_real_roi对应的第i帧的第三中间变量qscaleroi_real[i];获取与上述
QPi_init_roi对应的第i帧的第四中间变量qscaleroi_init[i];通过以下公式确定上述第二目标
参数:cplxr_sumroi[i+1]=cplxr_sumroi[i]+Biti_real_roi*qscaleroi_real[i]/qscaleroi_init
[i],其中,cplxr_sumroi[i+1]为上述第二目标参数。
[0082] 可选地,在本实施例中,上述获取与上述QPi_real_roi对应的第i帧的第三中间变量qscaleroi_real[i],包括:获取通过如下公式确定的qscaleroi_real[i]:QPi_real_roi=12+6*log2
(qscaleroi_real[i]/0.85);上述获取与上述QPi_init_roi对应的第i帧的第四中间变量
qscaleroi_init[i],包括:获取通过如下公式确定的qscaleroi_init[i]:QPi_init_roi=12+6*log2
(qscaleroi_init[i]/0.85)。
[0083] 可选地,可以按照以下公式确定第i帧的第三中间变量qscaleroi_real[i]:
[0084] 如QPi_real_roi=12+6*log2(qscaleroi_real[i]/0.85)。
[0085] 可选地,可以按照以下公式确定第i帧的第四中间变量qscaleroi_init[i]:
[0086] qscaleroi_init[i]:QPi_init_roi=12+6*log2(qscaleroi_init[i]/0.85)。
[0087] 可选地,在本实施例中,在上述使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数之后,上述方法还包括:在待传输的第i+1帧图像为非ROI
帧图像的情况下,获取上述非ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_nonroi和
第i+1帧预估帧大小Biti+1_estimate_nonroi,其中,上述QPi+1_init_nonroi和Biti+1_estimate_nonroi是根
据上述第一目标参数确定得到的;使用上述QPi+1_init_nonroi和Biti+1_estimate_nonroi对上述第i+
1帧图像进行编码,并获取对上述第i+1帧图像进行编码所得到的第i+1帧平均量化参数
QPi+1_real_nonroi和第i+1帧实际帧大小Biti+1_real_nonroi;根据上述QPi+1_real_nonroi确定第i+1帧
更新量化参数QPi+1_roi,并根据上述Biti+1_real_nonroi确定第i+1帧更新帧大小Biti+1_roi,其中,
上述QPi+1_roi小于上述QPi+1_real_nonroi,上述Biti+1_roi大于上述Biti+1_real_nonroi;使用上述
QPi+1_roi和上述Biti+1_roi确定上述ROI帧码控模型中第i+2帧的第二目标参数,其中,上述第
二目标参数用于在第i+2帧图像为ROI帧图像的情况下确定第i+2帧初始量化参数
QPi+2_init_roi和第i+2帧预估帧大小Biti+2_estimate_roi。
[0088] 可选地,在第i帧图像(当前帧图像)为ROI帧图像,且使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数之后,如果待传输的第i+1帧图
像(下一帧图像)为非ROI帧图像的情况下,可以根据第一目标参数来确定非ROI帧码控模型
输出的第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0089] 然后,使用QPi+1_init_nonroi和Biti+1_estimate_nonroi对上述第i+1帧图像进行编码,并获取对上述第i+1帧图像进行编码所得到的第i+1帧平均量化参数QPi+1_real_nonroi和第i+1帧实
际帧大小Biti+1_real_nonroi。
[0090] 然后,根据上述QPi+1_real_nonroi来确定第i+1帧更新量化参数QPi+1_roi,并根据上述Biti+1_real_nonroi来确定第i+1帧更新帧大小Biti+1_roi,其中,上述QPi+1_roi小于上述
QPi+1_real_nonroi,上述Biti+1_roi大于上述Biti+1_real_nonroi;
[0091] 最后,可以使用上述QPi+1_roi和上述Biti+1_roi确定上述ROI帧码控模型中第i+2帧的第二目标参数,其中,上述第二目标参数用于在第i+2帧图像为ROI帧图像的情况下确定第i
+2帧初始量化参数QPi+2_init_roi和第i+2帧预估帧大小Biti+2_estimate_roi。
[0092] 通过本实施例,可以通过第i+1帧的QPi+1_roi和上述Biti+1_roi来确定ROI帧码控模型中的第二目标参数,使得第二目标参数可以确定第i+2帧图像(如ROI帧图像)的初始量化参
数QPi+2_init_roi和第i+2帧预估帧大小Biti+2_estimate_roi,通过这种方式可以使得码控模型更
加精确,提高了码率控制的精确度。
[0093] 可选地,在本实施例中,上述获取上述非ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_nonroi,包括:获取通过以下公式确定的上述QPi+1_init_nonroi:QPi+1_init_nonroi=
qscale_raw/rateFactor其中,上述qscale_raw是根据上述第i+1帧图像的复杂度预先估计
出的参数;rateFactor=wanted_bits[i+1]/cplxr_sumnonroi[i+1],cplxr_sumnonroi[i+1]为
上述第一目标参数;wanted_bits[i+1]=Bitrate/fps*frame_num[i+1]其中,Bitrate为预
设的码率,fps为帧率,frame_num[i+1]为当前已经编码的帧数。
[0094] 可选地,通过以下公式确定第一目标参数cplxr_sumnonroi[i+1]:
[0095] 如rateFactor=wanted_bits[i+1]/cplxr_sumnonroi[i+1]。
[0096] wanted_bits[i+1]=Bitrate/fps*frame_num[i+1]
[0097] 其中,Bitrate为预设的码率,fps为帧率,frame_num[i+1]为当前已经编码的帧数。
[0098] 然后,可以按照以下公式来确定QPi+1_init_nonroi:
[0099] 如QPi+1_init_nonroi=qscale_raw/rateFactor。
[0100] 可选地,在本实施例中,上述获取上述非ROI帧码控模型输出的第i+1帧预估帧大小Biti+1_estimate_nonroi,包括:获取通过以下公式确定的上述Biti+1_estimate_nonroi:
Biti+1_estimate_nonroi=(coeff[i+1]*SATD[i+1]+offset[i+1])/(qscalenonroi_init[i+1]*
count[i+1]),其中,coeff[i+1]和offset[i+1]为上述第一目标参数;count[i+1]=count
[i]*0.5+1,coeff[i+1]=coeff[i]*0.5+(Biti_nonroi*qscalenonroi_real[i]–offset[i]/
count[i])/SATD[i],offset[i+1]=offset[i]*0.5+(Biti_nonroi*qscalenonroi_real[i])*(1–
offset[i]/count[i]),QPi+1_init_nonroi=12+6*log2(qscalenonroi_init[i+1]/0.85),QPi_nonroi
=12+6*log2(qscalenonroi_real[i]/0.85)QPi_nonroi=qScale2QP(qp2QScale(QPi_real_roi)*(1+
ratio)),Biti_nonroi=Biti_real_roi/(1+ratio);其中,上述(1+ratio)为预设期望比率,上述
qScale2QP和qp2QScale为互逆运算;其中,上述SATD[i]为预先获取的编码参数。
[0101] 可选地,在本实施例中,上述使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,包括:依次对上述第i帧图像中的每个宏块执行以下操作,其中,上述第i帧图
像被划分为多个宏块,在执行以下操作时每个宏块被视为当前宏块:在上述当前宏块为ROI
宏块的情况下,使用上述QPi_init_roi、Biti_estimate_roi和ROI块码控模型对上述当前宏块进行
编码,得到编码后的第一编码参数;使用上述第一编码参数对非ROI块码控模型进行更新;
使用上述第一编码参数对上述ROI块码控模型进行更新;在上述当前宏块为非ROI宏块的情
况下,使用上述QPi_init_roi、Biti_estimate_roi和上述非ROI块码控模型对上述当前宏块进行编
码,得到编码后的第二编码参数;使用上述第二编码参数对上述非ROI块码控模型进行更
新;使用上述第二编码参数对上述ROI块码控模型进行更新。
[0102] 可选地,对于行级码控来说,可以将第i帧图像分为多个宏块,然后依次对上述第i帧图像中的每个宏块执行以下操作,其中,在执行以下操作时每个宏块被视为当前宏块:
[0103] 在上述当前宏块为ROI宏块的情况下,可以使用上述QPi_init_roi、Biti_estimate_roi和ROI块码控模型对上述当前宏块进行编码,从而得到编码后的第一编码参数,然后使用上述
第一编码参数对非ROI块码控模型;使用上述第一编码参数对上述ROI块码控模型。
[0104] 在上述当前宏块为非ROI宏块的情况下,使用上述QPi_init_roi、Biti_estimate_roi和上述非ROI块码控模型对上述当前宏块进行编码,得到编码后的第二编码参数;使用上述第二
编码参数对上述非ROI块码控模型;使用上述第二编码参数对上述ROI块码控模型。
[0105] 需要说明的是,当前宏块(或CTU)在拿到最新编码宏块(或CTU)的QP值(如QPi_init_roi、Biti_estimate_roi)后,其中,最早的宏块或CTU使用初始QP,然后根据拿到的最新编
码宏块的QP值(如QPi_init_roi)估计当前帧编码后的大小(如Biti_estimate_roi),如果当前帧编
码后的大小(如Biti_estimate_roi)超过了预估的bits(目标码率),则将该最新编码宏块的QP值
(如QPi_init_roi)往上调0.5,直到预估的bits和目标码率接近,如果当前帧编码后的大小(如
Biti_estimate_roi)小于目标码率,则将该最新编码宏块的QP值(如QPi_init_roi)往下调0.5,直到
预估的bits和目标码率接近。
[0106] 可选地,在本实施例中,上述方法还包括:在待传输的第i帧图像为非ROI帧图像的情况下,获取上述非ROI帧码控模型输出的第i帧初始量化参数QPi_init_nonroi和第i帧预估帧
大小Biti_estimate_nonroi,其中,上述QPi_init_nonroi和Biti_estimate_nonroi是根据对第i‑1帧图像进
行编码所得到的上述第i‑1帧平均量化参数QPi‑1_real和上述第i‑1帧实际帧大小Biti‑1_real
确定得到的;使用上述QPi_init_nonroi和Biti_estimate_nonroi对上述第i帧图像进行编码,并获取
对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_nonroi和第i帧实际帧大小
Biti_real_nonroi;根据上述QPi_real_nonroi确定第i帧更新量化参数QPi_roi,并根据上述
Biti_real_nonroi确定第i帧更新帧大小Biti_roi,其中,上述QPi_roi小于上述QPi_real_nonroi,上述
Biti_roi大于上述Biti_real_nonroi;使用上述QPi_roi和上述Biti_roi确定上述ROI帧码控模型中
第i+1帧的第二目标参数,其中,上述第二目标参数用于在第i+1帧图像为ROI帧图像的情况
下确定第i+1帧初始量化参数QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。
[0107] 可选地,对第i‑1帧图像进行编码可以得到第i‑1帧的平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real,在第i帧图像(当前帧图像)为非ROI帧图像的情况下,根据
QPi‑1_real和Biti‑1_real可以得到非ROI帧码控模型输出的第i帧的初始量化参数QPi_init_nonroi
和第i帧预估帧大小Biti_estimate_nonroi。
[0108] 可以使用QPi_init_nonroi和Biti_estimate_nonroi对第i帧图像(当前帧图像)进行编码,并获取对第i帧图像进行编码得到的第i帧的平均量化参数QPi_real_nonroi和第i帧实际帧大小
Biti_real_nonroi。
[0109] 根据QPi_real_nonroi确定第i帧更新量化参数QPi_roi,并根据Biti_real_nonroi确定第i帧更新帧大小Biti_roi,其中,上述QPi_roi小于上述QPi_real_nonroi,上述Biti_roi大于上述
Biti_real_nonroi。
[0110] 可以使用QPi_roi和上述Biti_roi确定上述ROI帧码控模型中第i+1帧的第二目标参数,该第二目标参数可以用于在第i+1帧图像(下一帧图像)为ROI帧图像的情况下,来确定
第i+1帧的初始量化参数QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。
[0111] 可选地,在本实施例中,上述根据上述QPi_real_nonroi确定第i帧更新量化参数QPi_roi,包括:根据上述QPi_real_nonroi和预设期望比率(1+ratio)确定上述第i帧更新量化参
数QPi_roi,其中,上述QPi_roi与上述(1+ratio)呈负相关。
[0112] 可选地,在第i帧图像为非ROI帧图像的情况下,可以通过QPi_real_nonroi和预设期望比率(1+ratio)来确定上述第i帧更新量化参数QPi_roi,其中,上述QPi_roi与上述(1+ratio)
呈负相关,ratio可以设置为0.15、0.2、0.3等等,本实施在此不作任何限定。
[0113] 通过本实施例,可以通过QPi_real_nonroi和预设期望比率(1+ratio)对ROI模型模型中的QPi_roi,使得ROI码控模型的参数更加精确,提高了ROI码控模型的精确度。
[0114] 可选地,在本实施例中,上述根据上述QPi_real_nonroi和预设期望比率(1+ratio)确定上述第i帧更新量化参数QPi_roi,包括:通过以下公式确定上述QPi_roi:QPi_roi=qScale2QP
(qp2QScale(QPi_real_nonroi)/(1+ratio))其中,上述qScale2QP和qp2QScale为互逆运算。
[0115] 可选地,可以按照以下公式计算QPi_roi:
[0116] 如QPi_roi=qScale2QP(qp2QScale(QPi_real_nonroi)*(1+ratio)),其中,上述qScale2QP和qp2QScale为互逆运算。
[0117] 可理解,上述仅为一种示例,本实施例对此不作具体限定。
[0118] 可选地,在本实施例中,上述根据上述Biti_real_nonroi确定第i帧更新帧大小Biti_roi,包括:根据上述Biti_real_nonroi和预设期望比率(1+ratio)确定上述第i帧更新帧大
小Biti_roi,其中,上述Biti_roi与上述(1+ratio)呈正相关。
[0119] 可选地,在第i帧图像为非ROI帧图像的情况下,可以通过上述Biti_real_nonroi和预设期望比率(1+ratio)来确定上述第i帧更新帧大小Biti_roi,其中,上述Biti_roi与上述(1+
ratio)呈正相关。
[0120] 可选地,在本实施例中,上述根据上述Biti_real_nonroi和预设期望比率(1+ratio)确定上述第i帧更新帧大小Biti_roi,包括:通过以下公式确定上述Biti_roi:Biti_roi=
Biti_real_nonroi*(1+ratio)。
[0121] 可选地,可以按照以下公式计算Biti_roi:
[0122] 如Biti_roi=Biti_real_nonroi*(1+ratio)。
[0123] 可选地,在本实施例中,上述使用上述QPi_roi和上述Biti_roi确定上述ROI帧码控模型中第i+1帧的第二目标参数,包括:获取与上述QPi_roi对应的第i帧的第五中间变量
qscaleroi_real[i];获取与上述QPi_init_nonroi对应的第i帧的第六中间变量qscaleroi_init[i];
通过以下公式确定上述第二目标参数:cplxr_sumroi[i+1]=cplxr_sumroi[i]+Biti_roi*
qscaleroi_real[i]/qscaleroi_init[i],其中,cplxr_sumroi[i+1]为上述第二目标参数。
[0124] 可选地,可以通过以下方式来确定ROI码控模型中第i+1帧的第二目标参数:首先,获取与QPi_roi对应的第i帧的第五中间变量qscaleroi_real[i],然后获取与上述QPi_init_nonroi
对应的第i帧的第六中间变量qscaleroi_init[i],最后,可以按照以下公式确定上述第二目标
参数:
[0125] cplxr_sumroi[i+1]=
[0126] cplxr_sumroi[i]+Biti_roi*qscaleroi_real[i]/qscaleroi_init[i]
[0127] 其中,cplxr_sumroi[i+1]为上述第二目标参数。
[0128] 可选地,在本实施例中,上述获取与上述QPi_roi对应的第i帧的第五中间变量qscaleroi_real[i],包括:获取通过如下公式确定的qscaleroi_real[i]:QPi_roi=12+6*log2
(qscaleroi_real[i]/0.85);上述获取与上述QPi_init_nonroi对应的第i帧的第六中间变量
qscaleroi_init[i],包括:获取通过如下公式确定的qscaleroi_init[i]:QPi_init_nonroi=12+6*
log2(qscaleroi_init[i]/0.85)。
[0129] 可选地,可以通过公式QPi_roi=12+6*log2(qscaleroi_real[i]/0.85)来确定第五中间变量qscaleroi_real[i]。
[0130] 以及通过公式QPi_init_nonroi=12+6*log2(qscaleroi_init[i]/0.85)来确定第六中间变量qscaleroi_init[i]i。
[0131] 可选地,在本实施例中,在获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_nonroi和第i帧实际帧大小Biti_real_nonroi之后,上述方法还包括:使用上述
QPi_real_nonroi和上述Biti_real_nonroi确定上述非ROI帧码控模型中第i+1帧的上述第一目标参
数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧初始
量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0132] 可选地,可以使用上述QPi_real_nonroi和上述Biti_real_nonroi确定上述非ROI帧码控模型中第i+1帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像(下一帧图像)
为非ROI帧图像的情况下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小
Biti+1_estimate_nonroi。
[0133] 通过上述方式,可以通过当前帧图像的QPi_real_nonroi和上述Biti_real_nonroi确定第i+1帧(下一帧图像,如非ROI帧图像)的初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小
Biti+1_estimate_nonroi,通过以上一帧的历史参数确定当前帧的参数,以及通过当前帧的参数
确定下一帧的参数的方式,使得码率控制有更多的历史参数可以参考,提高了码率控制的
精度。
[0134] 可选地,在本实施例中,上述使用上述QPi_real_nonroi和上述Biti_real_nonroi确定上述非ROI帧码控模型中第i+1帧的第一目标参数,包括:获取与上述QPi_real_nonroi对应的第i帧
的第七中间变量qscalenonroi_real[i];获取与上述QPi_init_nonroi对应的第i帧的第八中间变量
qscalenonroi_init[i];通过以下公式确定上述第一目标参数:cplxr_sumnonroi[i+1]=cplxr_
sumnonroi[i]+Biti_real_nonroi*qscalenonroi_real[i]/qscalenonroi_init[i]其中,cplxr_sumnonroi[i
+1]为上述第一目标参数。
[0135] 可以按照以下方式确定上述非ROI帧码控模型中第i+1帧的第一目标参数,首先,获取与上述QPi_real_nonroi对应的第i帧的第七中间变量qscalenonroi_real[i];获取与上述
QPi_init_nonroi对应的第i帧的第八中间变量qscalenonroi_init[i];通过以下公式确定上述第一
目标参数:cplxr_sumnonroi[i+1]=cplxr_sumnonroi[i]+Biti_real_nonroi*qscalenonroi_real[i]/
qscalenonroi_init[i],其中,cplxr_sumnonroi[i+1]为上述第一目标参数。
[0136] 可选地,在本实施例中,上述获取与上述QPi_real_nonroi对应的第i帧的第七中间变量qscalenonroi_real[i],包括:获取通过如下公式确定的qscalenonroi_real[i]:QPi_real_nonroi=
12+6*log2(qscalenonroi_real[i]/0.85);上述获取与上述QPi_init_nonroi对应的第i帧的第八中
间变量qscalenonroi_init[i],包括:获取通过如下公式确定的qscalenonroi_init[i]:
QPi_init_nonroi=12+6*log2(qscalenonroi_init[i]/0.85)。
[0137] 可选地,可以按照以下公式确定第i帧的第七中间变量qscalenonroi_real[i]:
[0138] 如QPi_real_nonroi=12+6*log2(qscalenonroi_real[i]/0.85)。
[0139] 可选地,可以按照以下公式确定第i帧的第八中间变量qscalenonroi_init[i]
[0140] QPi_init_nonroi=12+6*log2(qscalenonroi_init[i]/0.85)。
[0141] 可选地,在本实施例中,在上述使用上述QPi_roi和上述Biti_roi确定ROI帧码控模型中第i+1帧的第二目标参数之后,上述方法还包括:在待传输的第i+1帧图像为ROI帧图像的
情况下,获取上述ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_roi和第i+1帧预估
帧大小Biti+1_estimate_roi,其中,上述QPi+1_init_roi和Biti+1_estimate_roi是根据上述第二目标参数
确定得到的;使用上述QPi+1_init_roi和Biti+1_estimate_roi对上述第i+1帧图像进行编码,并获取
对上述第i+1帧图像进行编码所得到的第i+1帧平均量化参数QPi+1_real_roi和第i+1帧实际帧
大小Biti+1_real_roi;根据上述QPi+1_real_roi确定第i+1帧更新量化参数QPi+1_nonroi,并根据上述
Biti+1_real_roi确定第i+1帧更新帧大小Biti+1_nonroi,其中,上述QPi+1_nonroi大于上述
QPi+1_real_roi,上述Biti+1_nonroi小于上述Biti+1_real_roi;使用上述QPi+1_nonroi和上述Biti+1_nonroi
确定上述非ROI帧码控模型中第i+2帧的上述第一目标参数,其中,上述第一目标参数用于
在第i+2帧图像为非ROI帧图像的情况下确定第i+2帧初始量化参数QPi+2_init_nonroi和第i+2
帧预估帧大小Biti+2_estimate_nonroi。
[0142] 可选地,在第i帧图像(当前帧图像)为非ROI帧图像,且使用上述QPi_roi和上述Biti_roi确定ROI帧码控模型中第i+1帧的第二目标参数之后,如果待传输的第i+1帧图像(下
一帧图像)为ROI帧图像的情况下,可以根据第二目标参数来确定ROI帧码控模型输出的第i
+1帧初始量化参数QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。
[0143] 然后,使用QPi+1_init_roi和Biti+1_estimate_roi对上述第i+1帧图像进行编码,并获取对上述第i+1帧图像进行编码所得到的第i+1帧平均量化参数QPi+1_real_roi和第i+1帧实际帧大
小Biti+1_real_roi。
[0144] 然后,根据上述QPi+1_real_roi来确定第i+1帧更新量化参数QPi+1_nonroi,并根据上述Biti+1_real_roi确定第i+1帧更新帧大小Biti+1_nonroi,其中,上述QPi+1_nonroi大于上述
QPi+1_real_roi,上述Biti+1_nonroi小于上述Biti+1_real_roi;
[0145] 最后,可以使用上述QPi+1_nonroi和上述Biti+1_nonroi确定上述非ROI帧码控模型中第i+2帧的上述第一目标参数,其中,上述第一目标参数用于在第i+2帧图像为非ROI帧图像的
情况下确定第i+2帧初始量化参数QPi+2_init_nonroi和第i+2帧预估帧大小Biti+2_estimate_nonroi。
[0146] 通过本实施例,可以通过第i+1帧的QPi+1_nonroi和上述Biti+1_nonroi来确定非ROI帧码控模型中的第一目标参数,使得第一目标参数可以确定第i+2帧图像(如ROI帧图像)的初始
量化参数QPi+2_init_nonroi和第i+2帧预估帧大小Biti+2_estimate_nonroi,通过这种方式可以使得
码控模型更加精确,提高了码率控制的精确度。
[0147] 可选地,在本实施例中,上述获取上述ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_roi,包括:获取通过以下公式确定的上述QPi+1_init_roi:QPi+1_init_roi=qscale_
raw/rateFactor,其中,上述qscale_raw是根据上述第i+1帧图像的复杂度预先估计出的参
数;rateFactor=wanted_bits[i+1]/cplxr_sumroi[i+1],cplxr_sumroi[i+1]为上述第二目
标参数;wanted_bits[i+1]=Bitrate/fps*frame_num[i+1],其中,Bitrate为预设的码率,
上述fps为帧率,frame_num[i+1]为当前已经编码的帧数。
[0148] 可选地,可选地,通过以下公式确定第二目标参数cplxr_sumroi[i+1]:
[0149] 如rateFactor=wanted_bits[i+1]/cplxr_sumroi[i+1]。
[0150] wanted_bits[i+1]=Bitrate/fps*frame_num[i+1]
[0151] 其中,Bitrate为预设的码率,fps为帧率,frame_num[i+1]为当前已经编码的帧数。
[0152] 然后,可以按照以下公式来确定QPi+1_init_nonroi:
[0153] 如QPi+1_init_roi=qscale_raw/rateFactor。
[0154] 可选地,在本实施例中,上述获取上述ROI帧码控模型输出的第i+1帧预估帧大小Biti+1_estimate_roi,包括:
[0155] 获取通过以下公式确定的上述Biti+1_estimate_roi:
[0156] Biti+1_estimate_roi=(coeff[i+1]*SATD[i+1]+offset[i+1])/(qscaleroi_init[i+1]*count[i+1]),其中,coeff[i+1]和offset[i+1]为上述第二目标参数,
[0157] count[i+1]=count[i]*0.5+1
[0158] coeff[i+1]=coeff[i]*0.5+(Biti_roi*qscaleroi_real[i]–offset[i]/count[i])/SATD[i]
[0159] offset[i+1]=offset[i]*0.5+(Biti_roi*qscaleroi_real[i])*(1–offset[i]/count[i])
[0160] QPi+1_init_roi=12+6*log2(qscaleroi_init[i+1]/0.85)
[0161] QPi_roi=12+6*log2(qscaleroi_real[i]/0.85)
[0162] QPi_roi=qScale2QP(qp2QScale(QPi_real_nonroi)/(1+ratio))
[0163] Biti_roi=Biti_real_nonroi*(1+ratio),其中,上述(1+ratio)为预设期望比率,上述qScale2QP和qp2QScale为互逆运算;其中,上述SATD[i]为预先获取的编码参数。
[0164] 可选地,在本实施例中,上述使用上述QPi_init_nonroi和Biti_estimate_nonroi对上述第i帧图像进行编码,包括:依次对上述第i帧图像中的每个宏块执行以下操作,其中,上述第i
帧图像被划分为多个宏块,在执行以下操作时每个宏块被视为当前宏块:在上述当前宏块
为ROI宏块的情况下,使用上述QPi_init_nonroi、Biti_estimate_nonroi和ROI块码控模型对上述当前
宏块进行编码,得到编码后的第三编码参数;使用上述第三编码参数对非ROI块码控模型进
行更新;使用上述第三编码参数对上述ROI块码控模型进行更新;在上述当前宏块为非ROI
宏块的情况下,使用上述QPi_init_nonroi、Biti_estimate_nonroi和上述非ROI块码控模型对上述当
前宏块进行编码,得到编码后的第四编码参数;使用上述第四编码参数对上述非ROI块码控
模型进行更新;使用上述第四编码参数对上述ROI块码控模型进行更新。
[0165] 可选地,对于行级码控来说,可以将第i帧图像分为多个宏块,然后依次对上述第i帧图像中的每个宏块执行以下操作,其中,在执行以下操作时每个宏块被视为当前宏块:
[0166] 在上述当前宏块为ROI宏块的情况下,可以使用QPi_init_nonroi、Biti_estimate_nonroi和ROI块码控模型对上述当前宏块进行编码,从而得到编码后的第三编码参数,然后使用上述
第三编码参数对非ROI块码控模型进行更新;使用上述第三编码参数对上述ROI块码控模型
进行更新;
[0167] 在上述当前宏块为非ROI宏块的情况下,使用上述QPi_init_nonroi、Biti_estimate_nonroi和上述非ROI块码控模型对上述当前宏块进行编码,得到编码后的第四编码参数;使用上述
第四编码参数对上述非ROI块码控模型进行更新;使用上述第四编码参数对上述ROI块码控
模型进行更新。
[0168] 需要说明的是,当前宏块(或CTU)在拿到最新编码宏块(或CTU)的QP值(如QPi_init_nonroi、Biti_estimate_nonroi)后,其中,最早的宏块或CTU使用初始QP,然后根据拿到的最
新编码宏块的QP值(如QPi_init_nonroi)估计当前帧编码后的大小(如Biti_estimate_nonroi),如果
当前帧编码后的大小(如Biti_estimate_nonroi)超过了预估的bits(目标码率),则将该最新编码
宏块的QP值(如QPi_init_nonroi)往上调0.5,直到预估的bits和目标码率接近,如果当前帧编码
后的大小(如Biti_estimate_roi)小于目标码率,则将该最新编码宏块的QP值(如
QPi_init_nonroi)往下调0.5,直到预估的bits和目标码率接近。
[0169] 下面结合可选示例对码率控制方法的流程进行说明。该方法具体如下上述:
[0170] 需要说明的是,ABR码控简单来说就是先通过帧级码控,利用历史数据估计当前帧的帧级初始QP以及预估的帧大小Bitsestimate,之后通过行级码控,在帧级初始QP的基础上进
行微调,并且尽量确保一帧编码完毕后实际消耗的Bitsreal不会超过Bitsestimate。一帧编码
结束后,统计一帧所有CTU的平均QP和实际消耗的Bitsreal,利用这些统计数据对码控模型
进行参数更新。可理解,影响一帧Bitsreal的有帧级初始QP和Bitsestimate,这两个值又受已完
成编码的帧的平均QP和Bitsreal影响。因此一帧编码结束后,码控模型参数的更新对于码率
控制的准确性十分重要。
[0171] 如图3所示,以下详细描述码控模型的参数更新的过程:
[0172] 需要说明的是,I帧是关键帧,属于帧内压缩,P是向前搜索的意思,B是双向搜索。他们都是基于I帧来压缩数据。
[0173] I帧表示关键帧,可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(包含完整画面)。
[0174] P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只
有与前一帧的画面差别的数据)。
[0175] B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别。
[0176] 步骤S301,对当前一帧进行编码,并判断当前一帧的帧类型。在当前一帧为P帧时,跳转至步骤S302,在当前一帧为I帧时,跳转至步骤S308,在当前一帧为B帧时,跳转至步骤
S309。
[0177] 步骤S302,确定该P帧的复杂度。
[0178] 步骤S303,确定P帧的初始QP。
[0179] 步骤S304,进行Overflow调整。
[0180] 步骤S305,对相邻帧的QP值进行限制。
[0181] 步骤S306,视频缓冲检验器(Video Buffering Verifier,简称VBV)调整QP。
[0182] 步骤S307,输出真实的帧级QP。
[0183] 步骤S308,确定I帧的初始QP,然后跳转至步骤S306。
[0184] 步骤S309,确定I帧的初始QP,并进行CBR判定,在判断为是的情况下,进行Overflow调整,在判断为否的情况下,跳转至步骤S310。
[0185] 步骤S310,对该一帧进行行级码控。
[0186] 步骤S311,进行码控模型的参数更新。
[0187] 需要说明的是,从帧的角度去看,每一帧被分为ROI帧(检测到ROI的帧)和非ROI帧(没有检测到ROI的帧);从CTU的角度去看,每一个CTU被分为ROI‑CTU和非ROI‑CTU。可以将
新增的码率尽量分配到ROI的CTU上,而非ROI‑CTU则与关闭ROI(不开启ROI功能)时,保持一
致。
[0188] 为了实现上述目标,可以进一步细分成两个子目标:
[0189] 1.将新增码率约束到ROI帧上—帧级码控。
[0190] 2.将新增码率约束到ROI‑CTU上—行级码控。
[0191] 可选地,在帧级和行级都维护了两个码控模型——ROI码控、非ROI码控。如图4所示,为ROI码控、非ROI码控的示意图。两个码控模型的内部流程是一致的,只是参数配置不
同。非ROI码控的结果要与关闭ROI时码控结果接近;ROI码控的结果要能给ROI帧和ROI‑CTU
分配更多的码率。
[0192] 可选地,根据之前ABR的描述,历史数据对于码控模型预估的准确性十分重要。为了保证两个码控模型都有足够的历史数据进行估计,每一帧或CTU在进行码控时,都会调用
两个码控模型,如果当前帧为ROI帧或CTU,则使用ROI码控预估的结果,并且在编码结束后,
除了更新ROI码控模型,还需要通过映射关系估算出在非ROI码控模型下,当前帧或CTU的平
均QP和Bitsreal,更新非ROI码控模型;反之,则使用非ROI码控预估的结果,并且在编码结束
后,通过映射关系,更新ROI码控模型。
[0193] 可选地,如图5所示,为帧级码控流程的示意图,帧级码控的具体步骤如下:
[0194] 步骤S501,对当前帧进行编码。
[0195] 步骤S502,判断当前帧是否为ROI帧。若是,则执行步骤步骤S503,若否,则执行步骤S506。
[0196] 步骤S503,在当前帧为ROI帧的情况下,进行ROI帧的帧级码控,并跳转至步骤S504。
[0197] 步骤S504,对ROI码控模型的参数进行更新,跳转至步骤S505。
[0198] 步骤S505,通过当前ROI帧的参数确定非ROI码控模型的参数,跳转至步骤S509。
[0199] 步骤S506,在当前帧为非ROI帧的情况下,进行非ROI帧的帧级码控,并跳转至步骤S507。
[0200] 步骤S507,对非ROI码控模型的参数进行更新,跳转至步骤S508。
[0201] 步骤S508,通过当前非ROI帧的参数确定ROI码控模型的参数,跳转至步骤S509。
[0202] 步骤S509,对下一帧进行编码。
[0203] 可选地,可以通过两个码控模型之间互相更新来实现码控模型参数的更新。在X265的码控中,引入了一个中间变量QScale,码率控制主要围绕着QScale的估计和更新展
开。QScale与QP为如下对应关系:
[0204] QP=12+6*log2(QScale/0.85)
[0205] 初始QP有一个对应的QScaleinit,而编码后的平均QP有一个对应的QScalereal。
[0206] 需要说明的是,对QScaleinit可以按照以下步骤进行计算:
[0207] 步骤1,根据当前帧的复杂度估计出初始qscale_raw。
[0208] 步骤2,根据Bitrate计算出wanted_bits。
[0209] wanted_bits=Bitrate/fps*frame_num
[0210] 其中,fps为帧率,frame_num为当前已经编码的帧数。
[0211] 步骤3,通过历史qScale与Bits的关系,以及wanted_bits计算出rateFactor。
[0212] rateFactor=wanted_bits/cplxr_sum
[0213] 其中,cplxr_sum历史qScale与Bits的关系,关系如下:
[0214] cplxr_sum[i]=cplxr_sum[i–1]+bits[i‑1]*qscale_real[i–1]/qscale_adjust[i–1]
[0215] 其中,cplxr_sum[i–1]为上一帧的历史qScale与Bits的关系,bits[i‑1]为上一帧的实际编码bits,qscale_real[i–1]为上一帧的编码后的平均QP对应的qscale,qscale_
adjust为经过帧级码控演算后初始QP所对应的qscale。
[0216] 步骤4,使用rateFactor对qscale_raw进行调整:
[0217] qscale_adjust=qscale_raw/rateFactor,其中,qscale_adjust即为上述QScale_init。
[0218] 码控模型首先估计出QScaleinit,之后通过上述关系获取初始QP。同时利用历史累计的QScalereal与历史累计的Bitsreal的关系,通过QScaleinit估计出Bitsestimate。虽然实际计
算过程比较复杂,但是一般可以认为QScale与Bits存在倒数关系,如果希望Bits增加20%,
则可以通过将QScale减小20%。
[0219] 需要说明的是,Bits_estimate可以按照以下方式进行计算:
[0220] Bits_estimate[i]=(coeff*SATD[i]+offset)/(qscale_adjust[i]*count)
[0221] 其中,count[i]=count[i–1]*0.5+1
[0222] coeff[i]=coeff[i–1]*0.5+(bits[i–1]*qscale_real[i–1]–offset[i–1]/count[i‑1])/SATD[i–1]
[0223] offset[i]=offset[i–1]*0.5+(bits[i–1]*qscale_real[i–1])*(1–offset[i–1]/count[i‑1])
[0224] 其中,count[0]=0,coeff[0]=0.75,offset[0]=0。
[0225] 可理解,以上仅为一种示例,本实施在此不作任何限定。
[0226] 鉴于以上关系,我们可以通过线性修改QScale来实现两个模型之间的映射。
[0227] 可选地,在本实施例中,可以选择ROI帧要比关闭ROI时多分配到(1+ratio)的Bits。
[0228] 如果当前帧为ROI帧,编码后得到平均QProi以及Bitsreal_roi,要估计在非ROI码控模型下编码后的平均QPnonroi以及Bitsreal_nonroi,用以更新非ROI码控模型,则可以根据以下公
式进行换算:
[0229]
[0230] 其中,qScale2QP和qp2QScale为互逆运算,为QScale和QP关系的函数实现。
[0231] 可选地,如果当前帧为非ROI帧,则可使用以下公式进行换算:
[0232]
[0233] 可选地,如图6所示,为行级码控流程的示意图,以下描述行级码控的过程:
[0234] 步骤S601,对当前帧的当前宏块进行编码。
[0235] 步骤S602,判断当前宏块是否为ROI宏块。若是,则执行步骤步骤S603,若否,则执行步骤S606。
[0236] 步骤S603,在当前宏块为ROI宏块的情况下,进行ROI宏块的行级码控,并跳转至步骤S604。
[0237] 步骤S604,对ROI码控模型的参数进行更新,跳转至步骤S605。
[0238] 步骤S605,通过当前ROI宏块的参数确定非ROI码控模型的参数,跳转至步骤S609。
[0239] 步骤S606,在当前宏块为非ROI宏块的情况下,进行非ROI宏块的行级码控,并跳转至步骤S607。
[0240] 步骤S607,对非ROI码控模型的参数进行更新,跳转至步骤S608。
[0241] 步骤S608,通过当前非ROI宏块的参数确定ROI码控模型的参数,跳转至步骤S609。
[0242] 步骤S609,判断所有的宏块是否编码完成,若完成,则按照ROI块比例更新帧级码控。
[0243] 在一种可选的实施例中,行级码控的修改与帧级码控类似,只是在全部CTU编码完成后,新增了一个按照ROI块比例更新帧级码控的过程。
[0244] 为了将新增码率约束到ROI帧中,帧级码控把ROI帧全部CTU当作ROI‑CTU来进行码率控制。而在ROI帧中,包含了ROI‑CTU和非ROI‑CTU,ROI‑CTU只占了其中一部分。编码后,所
有CTU的平均QP和累加的Bitsreal包含了ROI‑CTU和非ROI‑CTU,用这个数据去更新帧级码
控,会导致帧级码控模型逐渐失准,为此需要将累加的Bitsreal,经过如下公式换算:
[0245] Bitsreal_roi=Bitsreal*(1+ratio)/(1+ratio*roiPercent)
[0246] 其中,roiPercent为ROI帧中ROI‑CTU所占的比例,Bitsreal_roi为真正提供给帧级码控模型的数据。
[0247] 而对于平均QP,则需记录每个CTU在ROI行级码控下的QP和非ROI行级码控下的QP,并分别计算两个行级码控的平均QP,作为对应帧级码控模型更新时所需的数据。
[0248] 可选地,为了确保ROI比非ROI分配更多的Bits,在ABR码率控制模型初始化时,需要配置目标码率Bitratetarget。
[0249] 双码率控制模型包含ROI帧级码控和非ROI帧级码控,ROI行级码控和非ROI行级码控。
[0250] 对于帧级码控来说,ROI帧级码控假设所有视频帧的CTU都为ROI宏块,非ROI帧级码控假设所有视频帧的CTU都为非ROI宏块。因此如果非ROI帧配置的目标码率是
Bitratenonroi_targe,现要求给ROI帧比非ROI帧多分配(1+ratio)的码率,则需要给ROI帧级码
控配置(1+ratio)*Bitratenonroi_targe的码率。这样就可以确保ROI帧能获得更多的Bits。其
中,ROI帧配置的目标码率是Bitrateroi_targe,且Bitrateroi_targe=(1+ratio)*
Bitratenonroi_targe。
[0251] 对于行级码控来说,因为ROI行级码控使用的初始QP和预估的Bits为ROI帧级码控演算所得,而非ROI行级码控使用的是非ROI帧级码控演算所得。所以当CTU为ROI‑CTU时,自
然会比非ROI‑CTU分配更多的Bits。
[0252] 可选地,以下是本申请与QP‑OFFSET表、关闭ROI时的客观实验结果对比。
[0253]
[0254] 表1
[0255] 由上表可以得出,ROI编码v2.0在码率比ROI编码v1.0低14.4%的条件下,ROI平均PSNR比ROI编码v1.0高1.38db,ROI平均VMAF高了9.16。
[0256] 通过本实施例,通过上述基于双码控模型的感兴趣区域平均码率控制方式,能够使得视频软件、视频网站等在启用ROI码率控制后,ROI画质变好,非ROI画质不变的需求,降
低了码率的浪费,提高了对码率的控制效率。
[0257] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为
依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知
悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明
所必须的。
[0258] 根据本发明实施例的又一方面,还提供了一种码率控制装置,如图7所示,该装置包括:
[0259] 第一获取单元702,用于在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,上
述QPi_init_roi和Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参
数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real确定得到的;
[0260] 第一处理单元704,用于使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧
实际帧大小Biti_real_roi;
[0261] 第一确定单元706,用于根据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述
QPi_real_roi,上述Biti_nonroi小于上述Biti_real_roi;
[0262] 第二确定单元708,用于使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的
情况下确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0263] 通过本实施例,对第i‑1帧图像进行编码得到的第i‑1帧平均量化参数QPi‑1_real和第i‑1帧实际帧大小Biti‑1_real,在待传输的第i帧图像为ROI帧图像的情况下,根据QPi‑1_real
和Biti‑1_real来确定ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大
小Biti_estimate_roi,然后使用QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取
对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小
Biti_real_roi,并根据QPi_real_roi确定第i帧更新量化参数QPi_nonroi,以及根据上述Biti_real_roi
确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述Biti_nonroi小
于上述Biti_real_roi,最后,使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1
帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下
确定第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。通过上
述方式,可以通过上一帧(第i‑1帧)的历史参数QPi‑1_real和Biti‑1_real来确定当前帧(第i帧)
的QPi_init_roi和预估帧大小Biti_estimate‑roi,并通过来QPi‑1_rea_roil更新当前帧的量化参数
QPi_nonroi,以及通过Biti‑1_real_roi更新当前帧的Biti_nonroi,以及使用上述QPi_nonroi和上述
Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,使得在每一帧编码结束后,ROI
帧码控模型和非ROI帧码控模型互相更新模型参数,保证了两个模型都拥有足够的历史数
据,进而保证后续帧预测的准确性,提高了码率控制的准确性。
[0264] 作为一种可选的技术方案,上述第一确定单元,包括:第一确定模块,用于根据上述QPi_real_roi和预设期望比率(1+ratio)确定上述第i帧更新量化参数QPi_nonroi,其中,上述
QPi_nonroi与上述(1+ratio)呈正相关。
[0265] 作为一种可选的技术方案,上述第一确定模块,还用于通过以下公式确定上述QPi_nonroi:QPi_nonroi=qScale2QP(qp2QScale(QPi_real_roi)*(1+ratio))其中,上述qScale2QP
和qp2QScale为互逆运算。
[0266] 作为一种可选的技术方案,上述第一确定单元,包括:第二确定模块,用于根据上述Biti_real_roi和预设期望比率(1+ratio)确定上述第i帧更新帧大小Biti_nonroi,其中,上述
Biti_nonroi与上述(1+ratio)呈负相关。
[0267] 作为一种可选的技术方案,上述第二确定模块,还用于通过以下公式确定上述Biti_nonroi:Biti_nonroi=Biti_real_roi/(1+ratio)。
[0268] 作为一种可选的技术方案,上述第二确定单元,包括:第一获取模块,用于获取与上述QPi_nonroi对应的第i帧的第一中间变量qscalenonroi_real[i];第二获取模块,用于获取与
上述QPi_init_roi对应的第i帧的第二中间变量qscalenonroi_init[i];第三确定模块,用于通过
以下公式确定上述第一目标参数:cplxr_sumnonroi[i+1]=cplxr_sumnonroi[i]+Biti_nonroi*
qscalenonroi_real[i]/qscalenonroi_init[i],其中,cplxr_sumnonroi[i+1]为上述第一目标参数。
[0269] 作为一种可选的技术方案,上述:第一获取模块,还用于获取通过如下公式确定的qscalenonroi_real[i]:QPi_nonroi=12+6*log2(qscalenonroi_real[i]/0.85);上述第二获取模块,
还用于获取通过如下公式确定的qscalenonroi_init[i]:QPi_init_roi=12+6*log2
(qscalenonroi_init[i]/0.85)。
[0270] 作为一种可选的技术方案,上述装置还包括:第三确定单元,用于使用上述QPi_real_roi和上述Biti_real_roi确定上述ROI帧码控模型中第i+1帧的第二目标参数,其中,上
述第二目标参数用于在第i+1帧图像为ROI帧图像的情况下确定第i+1帧初始量化参数
QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。
[0271] 作为一种可选的技术方案,上述第三确定单元,包括:
[0272] 第三获取模块,用于获取与上述QPi_real_roi对应的第i帧的第三中间变量qscaleroi_real[i];第四获取模块,用于获取与上述QPi_init_roi对应的第i帧的第四中间变量
qscaleroi_init[i];第四确定模块,用于通过以下公式确定上述第二目标参数:cplxr_sumroi
[i+1]=cplxr_sumroi[i]+Biti_real_roi*qscaleroi_real[i]/qscaleroi_init[i],其中,cplxr_
sumroi[i+1]为上述第二目标参数。
[0273] 作为一种可选的技术方案,上述第三获取模块,还用于获取通过如下公式确定的qscaleroi_real[i]:QPi_real_roi=12+6*log2(qscaleroi_real[i]/0.85);上述第四获取模块,还
用于获取通过如下公式确定的qscaleroi_init[i]:QPi_init_roi=12+6*log2(qscaleroi_init[i]/
0.85)。
[0274] 作为一种可选的技术方案,上述装置还包括:
[0275] 第二获取单元,用于在待传输的第i+1帧图像为非ROI帧图像的情况下,获取上述非ROI帧码控模型输出的第i+1帧初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小
Biti+1_estimate_nonroi,其中,上述QPi+1_init_nonroi和Biti+1_estimate_nonroi是根据上述第一目标参数
确定得到的;第二处理单元,用于使用上述QPi+1_init_nonroi和Biti+1_estimate_nonroi对上述第i+1
帧图像进行编码,并获取对上述第i+1帧图像进行编码所得到的第i+1帧平均量化参数
QPi+1_real_nonroi和第i+1帧实际帧大小Biti+1_real_nonroi;第四确定单元,用于根据上述
QPi+1_real_nonroi确定第i+1帧更新量化参数QPi+1_roi,并根据上述Biti+1_real_nonroi确定第i+1帧
更新帧大小Biti+1_roi,其中,上述QPi+1_roi小于上述QPi+1_real_nonroi,上述Biti+1_roi大于上述
Biti+1_real_nonroi;第五确定单元,用于使用上述QPi+1_roi和上述Biti+1_roi确定上述ROI帧码控
模型中第i+2帧的第二目标参数,其中,上述第二目标参数用于在第i+2帧图像为ROI帧图像
的情况下确定第i+2帧初始量化参数QPi+2_init_roi和第i+2帧预估帧大小Biti+2_estimate_roi。
[0276] 作为一种可选的技术方案,上述第二获取单元,包括:第五获取模块,用于获取通过以下公式确定的上述QPi+1_init_nonroi:QPi+1_init_nonroi=qscale_raw/rateFactor,其中,上
述qscale_raw是根据上述第i+1帧图像的复杂度预先估计出的参数;rateFactor=wanted_
bits[i+1]/cplxr_sumnonroi[i+1],cplxr_sumnonroi[i+1]为上述第一目标参数;wanted_bits
[i+1]=Bitrate/fps*frame_num[i+1],其中,Bitrate为预设的码率,fps为帧率,frame_
num[i+1]为当前已经编码的帧数。
[0277] 作为一种可选的技术方案,上述第二获取单元,包括:第六获取模块,用于获取通过以下公式确定的上述Biti+1_estimate_nonroi:Biti+1_estimate_nonroi=(coeff[i+1]*SATD[i+1]+
offset[i+1])/(qscalenonroi_init[i+1]*count[i+1]),其中,coeff[i+1]和offset[i+1]为上
述第一目标参数,
[0278] count[i+1]=count[i]*0.5+1
[0279] coeff[i+1]=coeff[i]*0.5+(Biti_nonroi*qscalenonroi_real[i]–offset[i]/count[i])/SATD[i]
[0280] offset[i+1]=offset[i]*0.5+(Biti_nonroi*qscalenonroi_real[i])*(1–offset[i]/count[i])
[0281] QPi+1_init_nonroi=12+6*log2(qscalenonroi_init[i+1]/0.85)
[0282] QPi_nonroi=12+6*log2(qscalenonroi_real[i]/0.85)
[0283] QPi_nonroi=qScale2QP(qp2QScale(QPi_real_roi)*(1+ratio))
[0284] Biti_nonroi=Biti_real_roi/(1+ratio)
[0285] 其中,上述(1+ratio)为预设期望比率,上述qScale2QP和qp2QScale为互逆运算;
[0286] 其中,上述SATD[i]为预先获取的编码参数。
[0287] 作为一种可选的技术方案,上述第一处理单元,还用于依次对上述第i帧图像中的每个宏块执行以下操作,其中,上述第i帧图像被划分为多个宏块,在执行以下操作时每个
宏块被视为当前宏块:在上述当前宏块为ROI宏块的情况下,使用上述QPi_init_roi、
Biti_estimate_roi和ROI块码控模型对上述当前宏块进行编码,得到编码后的第一编码参数;使
用上述第一编码参数对非ROI块码控模型进行更新;使用上述第一编码参数对上述ROI块码
控模型进行更新;在上述当前宏块为非ROI宏块的情况下,使用上述QPi_init_roi、
Biti_estimate_roi和上述非ROI块码控模型对上述当前宏块进行编码,得到编码后的第二编码
参数;使用上述第二编码参数对上述非ROI块码控模型进行更新;使用上述第二编码参数对
上述ROI块码控模型进行更新。
[0288] 作为一种可选的技术方案,上述装置还包括:第三获取单元,用于在待传输的第i帧图像为非ROI帧图像的情况下,获取上述非ROI帧码控模型输出的第i帧初始量化参数
QPi_init_nonroi和第i帧预估帧大小Biti_estimate_nonroi,其中,上述QPi_init_nonroi和
Biti_estimate_nonroi是根据对第i‑1帧图像进行编码所得到的上述第i‑1帧平均量化参数
QPi‑1_real和上述第i‑1帧实际帧大小Biti‑1_real确定得到的;第三处理单元,用于使用上述
QPi_init_nonroi和Biti_estimate_nonroi对上述第i帧图像进行编码,并获取对上述第i帧图像进行
编码所得到的第i帧平均量化参数QPi_real_nonroi和第i帧实际帧大小Biti_real_nonroi;第六确定
单元,用于根据上述QPi_real_nonroi确定第i帧更新量化参数QPi_roi,并根据上述Biti_real_nonroi
确定第i帧更新帧大小Biti_roi,其中,上述QPi_roi小于上述QPi_real_nonroi,上述Biti_roi大于上
述Biti_real_nonroi;第七确定单元,用于使用上述QPi_roi和上述Biti_roi确定上述ROI帧码控模
型中第i+1帧的第二目标参数,其中,上述第二目标参数用于在第i+1帧图像为ROI帧图像的
情况下确定第i+1帧初始量化参数QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi。
[0289] 作为一种可选的技术方案,上述第六确定单元,包括:第五确定模块,用于根据上述QPi_real_nonroi和预设期望比率(1+ratio)确定上述第i帧更新量化参数QPi_roi,其中,上述
QPi_roi与上述(1+ratio)呈负相关。
[0290] 作为一种可选的技术方案,上述第五确定模块,还用于通过以下公式确定上述QPi_roi:QPi_roi=qScale2QP(qp2QScale(QPi_real_nonroi)/(1+ratio)),其中,上述qScale2QP和
qp2QScale为互逆运算。
[0291] 作为一种可选的技术方案,上述第六确定单元,包括:第六确定模块,用于根据上述Biti_real_nonroi和预设期望比率(1+ratio)确定上述第i帧更新帧大小Biti_roi,其中,上述
Biti_roi与上述(1+ratio)呈正相关。
[0292] 作为一种可选的技术方案,上述第六确定模块,还用于通过以下公式确定上述Biti_roi:Biti_roi=Biti_real_nonroi*(1+ratio)。
[0293] 作为一种可选的技术方案,上述第七确定单元,包括:第七获取模块,用于获取与上述QPi_roi对应的第i帧的第五中间变量qscaleroi_real[i];第八获取模块,用于获取与上述
QPi_init_nonroi对应的第i帧的第六中间变量qscaleroi_init[i];第七确定模块,用于通过以下
公式确定上述第二目标参数:cplxr_sumroi[i+1]=cplxr_sumroi[i]+Biti_roi*qscaleroi_real
[i]/qscaleroi_init[i],其中,cplxr_sumroi[i+1]为上述第二目标参数。
[0294] 作为一种可选的技术方案,上述:第七获取模块,还用于获取通过如下公式确定的qscaleroi_real[i]:QPi_roi=12+6*log2(qscaleroi_real[i]/0.85);上述第八获取模块,还用于
获取通过如下公式确定的qscaleroi_init[i]:QPi_init_nonroi=12+6*log2(qscaleroi_init[i]/
0.85)。
[0295] 作为一种可选的技术方案,上述装置还包括:第八确定单元,用于使用上述QPi_real_nonroi和上述Biti_real_nonroi确定上述非ROI帧码控模型中第i+1帧的上述第一目标参
数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧初始
量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0296] 作为一种可选的技术方案,上述第八确定单元,包括:
[0297] 第九获取模块,用于获取与上述QPi_real_nonroi对应的第i帧的第七中间变量qscalenonroi_real[i];第十获取模块,用于获取与上述QPi_init_nonroi对应的第i帧的第八中间
变量qscalenonroi_init[i];第八确定模块,用于通过以下公式确定上述第一目标参数:cplxr_
sumnonroi[i+1]=cplxr_sumnonroi[i]+Biti_real_nonroi*qscalenonroi_real[i]/qscalenonroi_init
[i],其中,cplxr_sumnonroi[i+1]为上述第一目标参数。
[0298] 作为一种可选的技术方案,上述第九获取模块,还用于获取通过如下公式确定的qscalenonroi_real[i]:QPi_real_nonroi=12+6*log2(qscalenonroi_real[i]/0.85);上述第十获取模
块,还用于获取通过如下公式确定的qscalenonroi_init[i]:QPi_init_nonroi=12+6*log2
(qscalenonroi_init[i]/0.85)。
[0299] 作为一种可选的技术方案,上述装置还包括:第四获取单元,用于在待传输的第i+1帧图像为ROI帧图像的情况下,获取上述ROI帧码控模型输出的第i+1帧初始量化参数
QPi+1_init_roi和第i+1帧预估帧大小Biti+1_estimate_roi,其中,上述QPi+1_init_roi和
Biti+1_estimate_roi是根据上述第二目标参数确定得到的;第四处理单元,用于使用上述
QPi+1_init_roi和Biti+1_estimate_roi对上述第i+1帧图像进行编码,并获取对上述第i+1帧图像进
行编码所得到的第i+1帧平均量化参数QPi+1_real_roi和第i+1帧实际帧大小Biti+1_real_roi;第
九确定单元,用于根据上述QPi+1_real_roi确定第i+1帧更新量化参数QPi+1_nonroi,并根据上述
Biti+1_real_roi确定第i+1帧更新帧大小Biti+1_nonroi,其中,上述QPi+1_nonroi大于上述
QPi+1_real_roi,上述Biti+1_nonroi小于上述Biti+1_real_roi;第十确定单元,用于使用上述
QPi+1_nonroi和上述Biti+1_nonroi对上述非ROI帧码控模型中的上述第一目标参数,其中,上述第
一目标参数用于在第i+2帧图像为非ROI帧图像的情况下确定第i+2帧初始量化参数
QPi+2_init_nonroi和第i+2帧预估帧大小Biti+2_estimate_nonroi。
[0300] 作为一种可选的技术方案,上述第四获取单元,包括:第十一获取模块,用于获取通过以下公式确定的上述QPi+1_init_roi:QPi+1_init_roi=qscale_raw/rateFactor,其中,上述
qscale_raw是根据上述第i+1帧图像的复杂度预先估计出的参数;rateFactor=wanted_
bits[i+1]/cplxr_sumroi[i+1],cplxr_sumroi[i+1]为上述第二目标参数;wanted_bits[i+
1]=Bitrate/fps*frame_num[i+1],其中,Bitrate为预设的码率,上述fps为帧率,frame_
num[i+1]为当前已经编码的帧数。
[0301] 作为一种可选的技术方案,上述第四获取单元,包括:第十二获取模块,用于获取通过以下公式确定的上述Biti+1_estimate_roi:
[0302] Biti+1_estimate_roi=(coeff[i+1]*SATD[i+1]+offset[i+1])/(qscaleroi_init[i+1]*count[i+1]),其中,上述第二目标参数包括coeff[i+1]和offset[i+1]
[0303] count[i+1]=count[i]*0.5+1
[0304] coeff[i+1]=coeff[i]*0.5+(Biti_roi*qscaleroi_real[i]–offset[i]/count[i])/SATD[i]
[0305] offset[i+1]=offset[i]*0.5+(Biti_roi*qscaleroi_real[i])*(1–offset[i]/count[i])
[0306] QPi+1_init_roi=12+6*log2(qscaleroi_init[i+1]/0.85)
[0307] QPi_roi=12+6*log2(qscaleroi_real[i]/0.85)
[0308] QPi_roi=qScale2QP(qp2QScale(QPi_real_nonroi)/(1+ratio))
[0309] Biti_roi=Biti_real_nonroi*(1+ratio)
[0310] 其中,上述(1+ratio)为预设期望比率,上述qScale2QP和qp2QScale为互逆运算;其中,上述SATD[i]为预先获取的编码参数。
[0311] 作为一种可选的技术方案,上述第三处理单元,还用于依次对上述第i帧图像中的每个宏块执行以下操作,其中,上述第i帧图像被划分为多个宏块,在执行以下操作时每个
宏块被视为当前宏块:在上述当前宏块为ROI宏块的情况下,使用上述QPi_init_nonroi、
Biti_estimate_nonroi和ROI块码控模型对上述当前宏块进行编码,得到编码后的第三编码参数;
使用上述第三编码参数对非ROI块码控模型进行更新;使用上述第三编码参数对上述ROI块
码控模型进行更新;在上述当前宏块为非ROI宏块的情况下,使用上述QPi_init_nonroi、
Biti_estimate_nonroi和上述非ROI块码控模型对上述当前宏块进行编码,得到编码后的第四编
码参数;使用上述第四编码参数对上述非ROI块码控模型进行更新;使用上述第四编码参数
对上述ROI块码控模型进行更新。
[0312] 根据本发明的实施例的又一方面,还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
[0313] 可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
[0314] S1,在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,上述QPi_init_roi和
Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和
第i‑1帧实际帧大小Biti‑1_real确定得到的;
[0315] S2,使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小
Biti_real_roi;
[0316] S3,根据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述Biti_nonroi小
于上述Biti_real_roi;
[0317] S4,使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧
初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0318] 可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于
一计算机可读存储介质中,存储介质可以包括:闪存盘、ROM(Read‑Only Memory,只读存储
器)、RAM(Random Access Memory,随机存取器)、磁盘或光盘等。
[0319] 根据本发明实施例的又一个方面,还提供了一种用于实施上述码率控制方法的电子设备,该电子设备可以是图1所示的终端设备或服务器。本实施例以该电子设备为服务器
为例来说明。如图8所示,该电子设备包括存储器802和处理器804,该存储器802中存储有计
算机程序,该处理器804被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
[0320] 可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
[0321] S1,在待传输的第i帧图像为ROI帧图像的情况下,获取ROI帧码控模型输出的第i帧初始量化参数QPi_init_roi和第i帧预估帧大小Biti_estimate_roi,其中,上述QPi_init_roi和
Biti_estimate_roi是根据对第i‑1帧图像进行编码所得到的第i‑1帧平均量化参数QPi‑1_real和
第i‑1帧实际帧大小Biti‑1_real确定得到的;
[0322] S2,使用上述QPi_init_roi和Biti_estimate_roi对上述第i帧图像进行编码,并获取对上述第i帧图像进行编码所得到的第i帧平均量化参数QPi_real_roi和第i帧实际帧大小
Biti_real_roi;
[0323] S3,根据上述QPi_real_roi确定第i帧更新量化参数QPi_nonroi,并根据上述Biti_real_roi确定第i帧更新帧大小Biti_nonroi,其中,上述QPi_nonroi大于上述QPi_real_roi,上述Biti_nonroi小
于上述Biti_real_roi;
[0324] S4,使用上述QPi_nonroi和上述Biti_nonroi确定非ROI帧码控模型中第i+1帧的第一目标参数,其中,上述第一目标参数用于在第i+1帧图像为非ROI帧图像的情况下确定第i+1帧
初始量化参数QPi+1_init_nonroi和第i+1帧预估帧大小Biti+1_estimate_nonroi。
[0325] 可选地,本领域普通技术人员可以理解,图8所示的结构仅为示意,其并不对上述电子设备的结构造成限定。例如,电子设备还可包括比图8中所示更多或者更少的组件(如
网络接口等),或者具有与图8所示不同的配置。
[0326] 其中,存储器802可用于存储软件程序以及模块,如本发明实施例中的码率控制方法和装置对应的程序指令/模块,处理器804通过运行存储在存储器802内的软件程序以及
模块,从而执行各种功能应用以及数据处理,即实现上述的码率控制方法。存储器802可包
括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或
者其他非易失性固态存储器。在一些实例中,存储器802可进一步包括相对于处理器804远
程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限
于互联网、企业内部网、局域网、移动通信网及其组合。作为一种示例,如图8所示,上述存储
器802中可以但不限于包括上述码率控制装置中的第一获取单元702,第一处理单元704、第
一确定单元706、第二确定单元708。此外,还可以包括但不限于上述码率控制装置中的其他
模块单元,本示例中不再赘述。
[0327] 可选地,上述的传输装置806用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置806包括一个网络适配器
(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而
可与互联网或局域网进行通讯。在一个实例中,传输装置806为射频(Radio Frequency,RF)
模块,其用于通过无线方式与互联网进行通讯。
[0328] 此外,上述电子设备还包括:连接总线808,用于连接上述电子设备中的各个模块部件。
[0329] 在其他实施例中,上述终端设备或者服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通
信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网
络,任意形式的计算设备,比如服务器、终端设备等电子设备都可以通过加入该点对点网络
而成为该区块链系统中的一个节点。
[0330] 可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于
一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read‑Only Memory,
ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
[0331] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0332] 上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技
术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软
件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一
台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所
述方法的全部或部分步骤。
[0333] 在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0334] 在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一
种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者
可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之
间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连
接,可以是电性或其它的形式。
[0335] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
[0336] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0337] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应
视为本发明的保护范围。