一种视频编码方法、装置及设备转让专利

申请号 : CN201811400113.5

文献号 : CN109218722B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 金星朱政张贤国张二丽范娟婷樊鸿飞

申请人 : 北京金山云网络技术有限公司北京金山云科技有限公司

摘要 :

本发明实施例提供了一种视频编码方法、装置及设备,其中,该方法包括:获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码;在确定对所述待编码视频帧进行编码的情况下,为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。应用本发明实施例提供的技术方案能够提高视频编码的编码效率。

权利要求 :

1.一种视频编码方法,其特征在于,所述方法包括:

获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;

根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码;

在确定开始对所述待编码视频帧进行编码的情况下,为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码;

所述为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码的步骤,包括:获取所述视频帧的比特数偏差,其中,所述视频帧的比特数偏差为:所述视频帧的目标编码比特数与实际编码比特数之间的差值;

根据所述比特数偏差,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;

为所述待编码视频帧分配线程,并调用所分配的线程按照所述待编码视频帧的当前目标编码比特数对所述待编码视频帧进行编码。

2.如权利要求1所述的方法,其特征在于,所述根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码的步骤,包括:在所述视频帧的编码状态指示所述视频帧编码结束的情况下,确定开始对所述待编码视频帧进行编码;

在所述视频帧的编码状态指示所述视频帧编码未结束的情况下,确定不对所述待编码视频帧进行编码。

3.如权利要求1所述的方法,其特征在于,所述视频帧包括以下至少之一:第一GOP之前第一数量个GOP中的全部或部分视频帧,其中,所述第一GOP为所述待编码视频帧所在的GOP;

第一视频帧之前的第二数量的视频帧,其中,所述第一视频帧为:在所述待编码视频帧之前、且与所述待编码视频帧间隔n帧的视频帧,n为正整数。

4.如权利要求1所述的方法,其特征在于,在所述视频帧包括第一GOP之前第一数量个GOP中的全部或部分视频帧的情况下,所述获取所述视频帧的比特数偏差的步骤,包括:获取所述第一GOP之前的第一数量GOP中视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;

所述根据所述比特数偏差,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数的步骤包括:根据所获取的比特数偏差,调整所述第一GOP的初始目标编码比特数,获得所述第一GOP的当前目标编码比特数,并根据得到的所述第一GOP的当前目标编码比特数,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;

其中,所述第一GOP为所述待编码视频帧所在的GOP。

5.如权利要求1所述的方法,其特征在于,在所述根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码的步骤之前,还包括:按照编码顺序,获得所述待编码视频帧与第二视频帧之间所间隔视频帧的数量,其中,所述第二视频帧为:上一次执行所述根据所获取的编码状态,判断是否开始对所述待编码视频帧进行编码的步骤所针对的视频帧;

判断所获得的数量是否为第三数量,在所获得的数量为所述第三数量的情况下,执行根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码的步骤。

6.如权利要求5所述的方法,其特征在于,在所述为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码的步骤之后,还包括:获取所述待编码视频帧之前已完成编码的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;

对所获取的比特数偏差进行数据统计,获得统计结果;

在所述统计结果的绝对值大于预设第一阈值的情况下,按照预设第一步长减小所述第三数量;

在所述统计结果的绝对值小于预设第二阈值的情况下,按照预设第二步长增大所述第三数量。

7.一种视频编码装置,其特征在于,所述装置包括:

获取模块,用于获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;

第一判断模块,用于根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码,并在确定对所述待编码视频帧进行编码的情况下触发分配模块;

所述分配模块,用于为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码;

所述分配模块包括:

获取子模块,用于获取所述视频帧的比特数偏差,其中,所述视频帧的比特数偏差为:所述视频帧的目标编码比特数与实际编码比特数之间的差值;

估算子模块,用于根据所述比特数偏差,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;

分配子模块,用于为所述待编码视频帧分配线程,并调用所分配的线程按照所述待编码视频帧的当前目标编码比特数对所述待编码视频帧进行编码。

8.如权利要求7所述的装置,其特征在于,所述第一判断模块用于,在所述视频帧的编码状态指示所述视频帧编码结束的情况下,确定开始对所述待编码视频帧进行编码;

在所述视频帧的编码状态指示所述视频帧编码未结束的情况下,确定不对所述待编码视频帧进行编码。

9.如权利要求7所述的装置,其特征在于,所述视频帧包括以下至少之一:第一GOP之前第一数量个GOP中的全部或部分视频帧,其中,所述第一GOP为所述待编码视频帧所在的GOP;

第一视频帧之前的第二数量的视频帧,其中,所述第一视频帧为:在所述待编码视频帧之前、且与所述待编码视频帧间隔n帧的视频帧,n为正整数。

10.如权利要求7所述的装置,其特征在于,

所述获取子模块,用于获取所述第一GOP之前的第一数量GOP中视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;

所述估算子模块,用于根据所获取的比特数偏差,调整所述第一GOP的初始目标编码比特数,获得所述第一GOP的当前目标编码比特数,并根据得到的所述第一GOP的当前目标编码比特数,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;

其中,所述第一GOP为所述待编码视频帧所在的GOP。

11.如权利要求7所述的装置,其特征在于,所述装置还包括:获得模块,用于在运行所述第一判断模块之前,按照编码顺序,获得所述待编码视频帧与第二视频帧之间所间隔视频帧的数量,其中,所述第二视频帧为:上一次执行所述根据所获取的编码状态,判断是否开始对所述待编码视频帧进行编码的步骤所针对的视频帧;

第二判断模块,用于判断所获得的数量是否为第三数量,在所获得的数量为所述第三数量的情况下,触发所述第一判断模块。

12.如权利要求11所述的装置,其特征在于,所述装置还包括:偏差模块,用于获取所述待编码视频帧之前已完成编码的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;

统计模块,用于对所获取的比特数偏差进行数据统计,获得统计结果;

减小模块,用于在所述统计结果的绝对值大于预设第一阈值的情况下,按照预设第一步长减小所述第三数量;

增大模块,用于在所述统计结果的绝对值小于预设第二阈值的情况下,按照预设第二步长增大所述第三数量。

13.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。

14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一所述的方法步骤。

说明书 :

一种视频编码方法、装置及设备

技术领域

[0001] 本发明涉及图像处理技术领域,特别是涉及一种视频编码方法、装置及设备。

背景技术

[0002] 随着多媒体应用中数字视频业务的不断发展,以及人们对视频云计算需求的不断提高,现有的有线、无线传输网络带宽和存储资源已然无法承受原始视频信源的大数据量。因此,视频信号的压缩已成为目前国内外学术研究的热点之一。视频信号压缩,也称为视频编码,其目的是消除视频信号间存在的冗余信息,以实现对视频信号进行压缩。
[0003] 目前,国内外标准化组织已相继制定了多种不同的视频编码标准,自H.261视频编码标准以来,主流的视频编码标准均采用“基于块的预测和变换”的混合编码框架,即输入的视频信号经过编码器中预测、变换、量化、扫描、熵编码等编码技术处理后输出比特流,以便视频信号的传输或存储。
[0004] 现有技术的视频编码过程中,通常是通过单线程的编码方式来进行视频编码的,单线程的编码方式是按照视频帧的编码顺序逐个视频帧进行编码,在编码过程中每次只能编码一帧视频帧,也就是只有在当前编码的视频帧编码结束后,才能编码下一帧视频帧。因而,编码速度慢。

发明内容

[0005] 本发明实施例的目的在于提供一种视频编码方法、装置及设备,以实现提高视频编码的编码效率。具体技术方案如下:
[0006] 本发明实施的一方面,提供了一种视频编码方法,该方法包括:
[0007] 获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;
[0008] 根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码;
[0009] 在确定开始对所述待编码视频帧进行编码的情况下,为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。
[0010] 可选的,所述根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码的步骤,包括:
[0011] 在所述视频帧的编码状态指示所述视频帧编码结束的情况下,确定开始对所述待编码视频帧进行编码;
[0012] 在所述视频帧的编码状态指示所述视频帧编码未结束的情况下,确定不对所述待编码视频帧进行编码。
[0013] 可选的,所述视频帧包括以下至少之一:
[0014] 第一图像组GOP之前第一数量个GOP中的全部或部分视频帧,其中,所述第一GOP为所述待编码视频帧所在的GOP;
[0015] 第一视频帧之前的第二数量的视频帧,其中,所述第一视频帧为:在所述待编码视频帧之前、且与所述待编码视频帧间隔n帧的视频帧,n为正整数。
[0016] 可选的,所述为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码的步骤,包括:
[0017] 获取所述视频帧的比特数偏差,其中,所述视频帧的比特数偏差为:所述视频帧的目标编码比特数与实际编码比特数之间的差值;
[0018] 根据所述比特数偏差,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;
[0019] 为所述待编码视频帧分配线程,并调用所分配的线程按照所述待编码视频帧的当前目标编码比特数对所述待编码视频帧进行编码。
[0020] 可选的,所述获取所述视频帧的比特数偏差的步骤,包括:获取所述第一GOP之前的第一数量GOP中视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0021] 所述根据所述比特数偏差,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数的步骤,包括:根据所获取的比特数偏差,调整所述第一GOP的初始目标编码比特数,获得所述第一GOP的当前目标编码比特数,并根据得到的所述第一GOP的当前目标编码比特数,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;
[0022] 其中,所述第一GOP为所述待编码视频帧所在的GOP。
[0023] 可选的,在所述根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码的步骤之前,还包括:
[0024] 按照编码顺序,获得所述待编码视频帧与第二视频帧之间所间隔视频帧的数量,其中,所述第二视频帧为:上一次执行所述根据所获取的编码状态,判断是否开始对所述待编码视频帧进行编码的步骤所针对的视频帧;
[0025] 判断所获得的数量是否为第三数量,在所获得的数量为所述第三数量的情况下,执行根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码的步骤。
[0026] 可选的,所述为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码的步骤之后,还包括:
[0027] 获取所述待编码视频帧之前已完成编码的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0028] 对所获取的比特数偏差进行数据统计,获得统计结果;
[0029] 在所述统计结果的绝对值大于预设第一阈值的情况下,按照预设第一步长减小所述第三数量;
[0030] 在所述统计结果的绝对值小于预设第二阈值的情况下,按照预设第二步长增大所述第三数量。
[0031] 本发明实施的又一方面,还提供了一种视频编码装置,所述装置包括:
[0032] 获取模块,用于获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;
[0033] 第一判断模块,用于根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码,并在确定开始对所述待编码视频帧进行编码的情况下触发分配模块;
[0034] 分配模块,用于为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。
[0035] 可选的,所述第一判断模块用于,
[0036] 在所述视频帧的编码状态指示所述视频帧编码结束的情况下,确定开始对所述待编码视频帧进行编码;
[0037] 在所述视频帧的编码状态指示所述视频帧编码未结束的情况下,确定不对所述待编码视频帧进行编码。
[0038] 可选的,所述视频帧包括以下至少之一:
[0039] 第一图像组GOP之前第一数量个GOP中的全部或部分视频帧,其中,所述第一GOP为所述待编码视频帧所在的GOP;
[0040] 第一视频帧之前的第二数量的视频帧,其中,所述第一视频帧为:在所述待编码视频帧之前、且与所述待编码视频帧间隔n帧的视频帧,n为正整数。第一数量
[0041] 可选的,所述分配模块包括:
[0042] 获取子模块,用于获取所述视频帧的比特数偏差,其中,所述视频帧的比特数偏差为:所述视频帧的目标编码比特数与实际编码比特数之间的差值;
[0043] 估算子模块,用于根据所述比特数偏差,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;
[0044] 分配子模块,用于为所述待编码视频帧分配线程,并调用所分配的线程按照所述待编码视频帧的当前目标编码比特数对所述待编码视频帧进行编码。
[0045] 可选的,所述获取子模块,具体用于获取所述第一GOP之前的第一数量GOP中视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0046] 所述估算子模块,具体用于根据所获取的比特数偏差,调整所述第一GOP的初始目标编码比特数,获得所述第一GOP的当前目标编码比特数,并根据得到的所述第一GOP的当前目标编码比特数,调整所述待编码视频帧的初始目标编码比特数,获得所述待编码视频帧的当前目标编码比特数;
[0047] 其中,所述第一GOP为所述待编码视频帧所在的GOP。
[0048] 可选的,所述装置还包括:
[0049] 获得模块,用于在运行所述第一判断模块之前,按照编码顺序,获得所述待编码视频帧与第二视频帧之间所间隔视频帧的数量,其中,所述第二视频帧为:上一次执行所述根据所获取的编码状态,判断是否开始对所述待编码视频帧进行编码的步骤所针对的视频帧;
[0050] 第二判断模块,用于判断所获得的数量是否为第三数量,在所获得的数量为所述第三数量的情况下,触发所述第一判断模块。
[0051] 可选的,所述装置还包括:
[0052] 偏差模块,用于获取所述待编码视频帧之前已完成编码的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0053] 统计模块,用于对所获取的比特数偏差进行数据统计,获得统计结果;
[0054] 减小模块,用于在所述统计结果的绝对值大于预设第一阈值的情况下,按照预设第一步长减小所述第三数量;
[0055] 增大模块,用于在所述统计结果的绝对值小于预设第二阈值的情况下,按照预设第二步长增大所述第三数量。
[0056] 本发明实施的又一方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
[0057] 存储器,用于存放计算机程序;
[0058] 处理器,用于执行存储器上所存放的程序时,实现上述任一所述的视频编码方法。
[0059] 在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的视频编码方法。
[0060] 在本发明实施的又一方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的视频编码方法。
[0061] 本发明实施例提供的视频编码方法、装置及设备,可以调用用于对视频帧进行编码的多个线程进行视频编码,因而能够提高编码效率。并且,在编码过程中,获得表示各个线程所编码视频帧是否编码结束的状态,并根据所获得的状态,确定是否对待编码视频帧进行编码,也就是待编码视频帧之前视频帧的编码状态影响待编码视频的编码开始时刻,基于此,在对待编码视频帧进行编码时,能够尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,进而能够根据更加丰富的信息调整待编码视频帧的码率控制参数,减少RD(Rate Distortion)损失。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

[0062] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0063] 图1为本发明实施例提供的一种视频编码方法中码率控制策略示意图;
[0064] 图2为本发明实施例提供的一种视频编码方法的流程示意图;
[0065] 图3为本发明实施例提供的一种视频编码装置的结构示意图;
[0066] 图4为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

[0067] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0068] 本发明实施例的执行主体可以是编码器,当然还可以是其他能够对原始视频信源进行视频编码的设备,本申请并不对此进行限定。
[0069] 下面以执行主体为编码器为例,结合具体实施例对本发明实施例提供的视频编码方法进行说明。
[0070] 需要说明的是本发明提供的各个实施例中,在待编码视频帧之前的视频帧,可以为按照编码顺序在待编码视频帧之前的视频帧,可以为按照播放顺序在待编码视频帧之前的视频帧,对此本发明并不做具体限定。
[0071] 参照图1,首先对本发明实施例提供的视频编码方法中的码率控制策略进行介绍。
[0072] 本发明实施例提供的方案中采用多线程并行的方式进行视频编码,每一线程对为其分配的视频帧进行编码,也就是,本发明实施例提供的视频编码方案属于多线程帧级并行编码方案。
[0073] 编码过程中,各个线程在对为其分配的视频帧进行编码时,各个线程根据公共码率控制参数获得要编码视频帧的码率控制参数,然后各个线程按照所获得的码率控制参数对视频帧进行编码,每一线程在编码结束后,公共码率控制参数根据完成编码的线程反馈的编码结果进行更新。如图1所述,在将第0、1、2帧视频帧分别分配给线程1、2、3后,线程1、2、3根据公共码率控制参数分别获得编码第0、1、2帧视频帧的码率控制参数,并分别在线程
1对第0帧视频帧完成编码后,公共码率控制参数根据第0帧视频帧的编码结果进行更新,在线程2对第1帧视频帧完成编码后,公共码率控制参数根据第1帧视频帧的编码结果进行更新,在线程3对第2帧视频帧完成编码后,公共码率控制参数根据第2帧视频帧的编码结果进行更新。
[0074] 当再次为线程1、2、3分别分配待编码的视频帧第3、4、5帧视频帧后,线程1、2、3根据更新后的公共码率控制参数分别获得编码第3、4、5帧视频帧的码率控制参数,并分别在线程1对第3帧视频帧完成编码后,公共码率控制参数根据第3帧视频帧的编码结果进行更新,在线程2对第4帧视频帧完成编码后,公共码率控制参数根据第4帧视频帧的编码结果进行更新,在线程3对第5帧视频帧完成编码后,公共码率控制参数根据第5帧视频帧的编码结果进行更新。
[0075] 并且,在编码过程中,在将第3帧视频帧分配给线程1之前,需要等待线程2对第1帧视频帧完成编码后,公共码率控制参数根据第1帧视频帧的编码结果进行更新,和线程3对第2帧视频帧完成编码后,公共码率控制参数根据第2帧视频帧的编码结果进行更新之后,才会将第3帧视频帧分配给线程1进行编码,也就是,能够根据第3帧视频帧之前、已完成编码的第0、1、2帧视频帧的编码结果,调整第3帧视频帧的码率控制参数。
[0076] 参照图2,示出了本发明实施例提供的一种视频编码方法的流程示意图,该方法包括:
[0077] S100,获取待编码视频帧之前的视频帧的编码状态。
[0078] 其中,编码状态用于指示视频帧是否编码结束。
[0079] 具体的,编码过程中可以按照各个视频帧的播放顺序,将各个视频帧划分为多个GOP(Group of Pictures),每个GOP中可以包括三种类型的视频帧:I帧、P帧和B帧,并且每个GOP中有且只有一个I帧。然后,根据GOP中各个类型的视频帧的顺序确定编码顺序。例如,按照播放顺序,预先设置每一个GOP中包括10帧视频帧,各个视频帧的帧类型为:0I、1B、2B、3P、4B、5B、6P、7B、8B、9P;相应地,每个GOP的编码顺序则为:0I、3P、2B、3B、6P、4B、5B、9P、7B、
8B。基于此,可以根据编码顺序确定待编码视频帧。
[0080] 本发明实施例中可以调用多个线程对视频帧进行编码,每一线程对应编码一个视频帧。
[0081] 每一线程对视频帧进行编码时,可以认为所编码视频帧处于两种状态:编码结束和编码未结束。具体的,可以通过判断线程是否处于空闲状态来获得各个线程对应的编码状态,例如,若判定线程处于空闲状态,则可以认为该线程所编码的视频帧处于编码结束的状态,若判定线程处于忙碌状态,则可以认为该线程所编码的视频帧处于编码未结束的状态。
[0082] S110,根据视频帧的编码状态,确定是否开始对待编码视频帧进行编码,在确定开始对待编码视频帧进行编码的情况下执行S120,在确定不对所述待编码视频帧进行编码的情况下返回S100。
[0083] 一种实现方式中,可以在待编码视频帧之前的视频帧的编码状态指示视频帧编码结束的情况下,确定开始对待编码视频帧进行编码;
[0084] 在待编码视频帧之前的视频帧的编码状态指示视频帧编码未结束的情况下,确定不对待编码视频帧进行编码。
[0085] 具体的,可以在确定开始对待编码视频帧进行编码后,开始对待编码视频帧进行编码;而在确定不对待编码视频帧进行编码后,返回获取待编码视频帧前的视频帧的编码状态,直至等到在待编码视频帧之前的各个视频帧编码结束,确定开始对待编码视频帧进行编码后,开始对待编码视频帧进行编码。
[0086] 编码过程中,开始编码一帧视频帧之前,会确定该视频帧的目标编码比特数,也就是,对视频帧进行编码后希望得到的编码比特数,然而实际对视频帧进行编码时,受视频帧的具体内容、参考帧的具体内容以及码率控制策略等因素的影响,编码后得到的实际编码比特数有可能与目标编码比特数不相等,为此,视频帧的实际编码比特数与目标编码比特数偏差之间可能会存在差异。而就整个编码过程而言,往往希望得到码率平稳的编码结果,因此,根据所获得的状态,确定是否对待编码视频帧进行编码时,应尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,这样在对待编码视频帧进行编码时,能够根据更加丰富的信息调整待编码视频帧的码率控制参数。
[0087] 一种实现方式中,待编码视频帧之前的视频帧可以为一个也可以为多个,而在待编码视频帧之前的视频帧为多个的情况下,可以包括以下第一种情况和/或第二种情况。
[0088] 第一种情况:待编码视频帧之前的视频帧可以为:第一图像组GOP之前第一数量个GOP中的全部或部分视频帧,其中,第一GOP为待编码视频帧所在的GOP。
[0089] 例如,待编码视频帧在第10个GOP,当第一数量为2时,则第一GOP之前的第一数量个GOP中的视频帧为:第8个GOP、第9个GOP中的全部或部分视频帧;当第一数量为4时,则第一GOP之前的第一数量个GOP中的视频帧为:第5个GOP、第6个GOP、第7个GOP、第8个GOP中的全部或部分视频帧。
[0090] 相应的,本发明实施例一种实现方式中,可以根据待编码视频帧之前的视频帧的编码状态,判断第一GOP之前的第一数量GOP中全部或部分视频帧是否编码结束,若为是,判定开始对待编码视频帧进行编码,若为否,判定拒绝对所述待编码视频帧进行编码。而在判断第一GOP之前的第一数量GOP中部分视频帧是否编码结束时,部分视频帧可以为满足预先设定的条件的视频帧,比如,部分视频帧可以为GOP中的I帧,也可以为按照编码顺序设定的GOP中最后一帧视频帧。
[0091] 第二种情况:待编码视频帧之前的视频帧可以为:第一视频帧之前的第二数量的视频帧,其中,第一视频帧为:待编码视频帧之前、且与待编码视频帧间隔n帧的视频帧,n为正整数。例如,第二数量取10,n取3,待编码视频帧为第20帧,那么,第二数量视频帧则为:第7-16帧视频帧。
[0092] 实际编码过程中,第一视频帧为按照编码顺序,在待编码视频帧之前、且与待编码视频帧间隔n帧的视频帧的情况下,由于B帧视频帧需要在其之后显示且最近的P帧视频帧编码结束后,才会进行编码,因此,n的值需要不小于相邻两个P帧视频帧之间间隔的B帧视频帧的数量。
[0093] 相应的,本发明实施例一种实现方式中,可以根据待编码视频帧之前的视频帧的编码状态,判断第一视频帧之前的第二数量视频帧是否编码结束,若为是,判定开始对待编码视频帧进行编码,若为否,判定拒绝对待编码视频帧进行编码。
[0094] S120,为待编码视频帧分配线程,并调用所分配的线程对待编码视频帧进行编码。
[0095] 实际编码过程中,需要根据实际编码情况来确定目标码率,即编码后的每秒视频文件的目标编码比特数,根据目标码率来确定各个视频帧的目标编码比特数。例如,每个GOP的目标码率为600kbps,帧率为10,每个GOP包括10帧视频帧分别为:I、B、B、P、B、B、P、B、B、P;则可以确定I帧的目标编码比特数为360kb,P帧的目标编码比特数60kb,B帧的目标编码比特数10kb。
[0096] 但是,一帧视频帧在编码结束后,目标编码比特数可能比实际编码比特数大,也可能比实际编码比特数小,也就是会产生比特数偏差,因此,需要在对待编码视频帧进行编码前,根据已经编码完成的各个视频帧的比特数偏差来调整待编码视频帧的目标编码比特数,以使得每秒视频文件编码后的比特数接近目标码率的比特数,以保证生成稳定的码流。
[0097] 具体的,在确定开始对待编码视频帧进行编码后,可以获取待编码视频帧之前各个视频帧的目标编码比特数与实际编码比特数之间的差值,根据所获取的差值来调整待编码视频帧的目标编码比特数。
[0098] 本发明实施例一种实现方式中,S120可以包括以下步骤:
[0099] 获取待编码视频帧之前的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0100] 根据比特数偏差估算待编码视频帧的目标编码比特数;
[0101] 为待编码视频帧分配线程,并调用所分配的线程按照待编码视频帧的目标编码比特数对待编码视频帧进行编码。
[0102] 一种实现方式中,待编码视频帧之前的视频帧为多个时,可以根据待编码视频帧之前各个视频帧的目标编码比特数与实际编码比特数之间的差值的和,来调整待编码视频帧的目标编码比特数。例如,待编码视频帧的目标编码比特数为40kb,待编码视频帧之前各个视频帧的目标编码比特数与实际编码比特数之间的差值分别为-5kb、+2kb、-4kb、-3kb,总的比特数偏差为-10kb,基于此,可以将待编码视频帧的目标比特数调整为30kb。
[0103] 也可以根据待编码视频帧之前各个视频帧的目标编码比特数与实际编码比特数之间的差值的平均值,来调整待编码视频帧的目标编码比特数。例如,待编码视频帧的目标编码比特数为40kb,待编码视频帧之前各个视频帧的目标编码比特数与实际编码比特数之间的差值分别为-5kb、+2kb、-4kb、-3kb、5kb,总的比特数偏差为-5kb,平均值为-1kb,基于此,可以将待编码视频帧的目标比特数调整为39kb。
[0104] 以上步骤由于根据待编码视频帧之前部分视频帧的比特数偏差来估算待编码视频帧的目标编码比特数相比于根据待编码视频帧之前各个视频帧的比特数偏差来进行估算,能够提高估算效率。
[0105] 需要说明的是,在上述视频帧为第一视频帧之前的第二数量的视频帧的情况,获取比特数偏差和估算目标编码比特数的方式与上述方式相同,在此不在赘述。
[0106] 而在待编码视频帧之前的视频帧为第一GOP之前的第一数量GOP中的全部或部分视频帧的情况下,上述获取待编码视频帧之前的视频帧的比特数偏差,可以包括:获取第一GOP之前的第一数量GOP中视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0107] 根据比特数偏差估算待编码视频帧的目标编码比特数的步骤,可以包括:根据所获取的比特数偏差估算第一GOP的目标编码比特数,并根据估算得到的目标编码比特数,确定待编码视频帧的目标编码比特数;其中,所述第一GOP为所述待编码视频帧所在的GOP。
[0108] 具体的,为了能够得到准确的比特数偏差,可以根据第一GOP之前的第一数量GOP中全部视频帧的比特数偏差来估算第一GOP的目标编码比特数,并且由于每一GOP中包含的视频帧的数量是相同的,且每一GOP的目标码率相同,所以可以根据第一GOP之前的第一数量GOP中全部视频帧的比特数偏差的和来估算第一GOP的目标编码比特数。比如,每一GOP的目标码率为600kbps,第一GOP之前3个GOP的比特数偏差分别为:+20kb、-40kb、-30kb,比特数偏差的和为:-50kb,则可以确定第一GOP的目标编码比特数为550kb。
[0109] 以GOP为单位为各个视频帧分配目标编码比特数时,一种实现方式中,可以根据视频帧的类型为各个视频帧分配目标编码比特数。
[0110] 编码过程中,各个GOP中可以包括三种类型的视频帧,其中,I帧也被称为关键帧,是每个GOP中P帧、B帧直接或间接参考的基础帧,因此,可以根据各个视频帧的帧类型为其分配目标编码比特数。具体的,可以为I帧视频帧分配分配的目标编码比特数最大、P帧视频帧次之、B帧视频帧最小。相应地,待编码视频帧为I帧时分配的目标编码比特数最大、P帧视频帧次之、B帧视频帧最小。比如,第一GOP的目标编码比特数为600kbps,第一GOP包括10帧视频帧:一个I帧,三个P帧,6个B帧,待编码视频帧为I帧时分配的目标编码比特数可以为360kb,待编码视频帧为P帧时分配的目标编码比特数可以为60kb,待编码视频帧为B帧时分配的目标编码比特数可以为10kb。
[0111] 合理根据各个视频帧的类型为其分配目标比特数,能够使得编码后的各个GOP的比特数稳定在一定的范围之内,进而生成码率稳定的码流。
[0112] 而为了进一步加快视频编码效率,本发明实施例一种实现方式中,在上述S110之前,还包括:
[0113] 按照编码顺序,获得待编码视频帧与第二视频帧之间所间隔视频帧的数量,其中,第二视频帧为:上一次执行根据所获取的编码状态,判断是否开始对待编码视频帧进行编码的步骤所针对的视频帧;
[0114] 判断所获得的数量是否为第三数量,在所获得的数量为第三数量的情况下,执行S110。
[0115] 第三数量可以根据实际应用中对码率控制的精度要求等因素来确定,例如,对码率控制的精度要求高,则第三数量可以设置较小的取值,对码率控制的精度要求低,则第三数量可以设置较大的取值。
[0116] 具体的,可以为10,20,30等。当第三数量为30时,则表示每间隔30帧视频帧执行一次根据所获取的编码状态,判断是否开始对待编码视频帧进行编码。
[0117] 而为了满足编码过程中视频帧目标编码比特数根据实际编码情况进行调整的需要,本发明实施例一种实现方式中,S120之后,还可以包括:
[0118] 获取待编码视频帧之前已完成编码的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0119] 对所获取的比特数偏差进行数据统计,获得统计结果;
[0120] 在统计结果的绝对值大于预设第一阈值的情况下,按照预设第一步长减小第三数量;
[0121] 在统计结果的绝对值小于预设第二阈值的情况下,按照预设第二步长增大第三数量。
[0122] 第一阈值和第二阈值可以根据实际应用中对码率控制的精度要求等因素来确定,例如,对码率控制的精度要求高,则第一阈值和第二阈值可以设置较小的取值,对码率控制的精度要求低,则第一阈值和第二阈值可以设置较大的取值。
[0123] 预设第一步长和预设第二步长可以根据实际控制需求确定,两者可以相同也可以不同,本发明不做具体限定。
[0124] 一种实现方式中,对所获取的比特数偏差进行数据统计,获得统计结果时,可以将所获取的比特数偏差之和作为统计结果,也可以将所获取的比特数偏差的平均值作为统计结果,也可以将所获取的比特数偏差的方差作为统计结果,当然,还可以将所获取的比特数偏差中的最大值或最小值作为统计结果,对此本发明并不做具体限定。
[0125] 统计结果的绝对值大于预设第一阈值,则表明视频帧的目标编码比特数与实际编码比特数之间的差值过大,即设定的目标编码比特数可能过大或过小,在此基础上生成的码流会不稳定,这时则需要增加根据待编码视频帧之前各个已完成编码的视频帧的比特数偏差,来调整待编码视频帧的目标编码比特数的频率,也就是可以减小每两次执行根据所获取的编码状态,判断是否开始对待编码视频帧进行编码的步骤所针对的视频帧之间间隔的视频帧的数量,通过增加调整频率以使得编码后的视频文件的码率接近目标码率。
[0126] 而统计结果的绝对值差小于预设第二阈值时,则表明能够将视频帧的目标编码比特数与实际编码比特数之间的差值较小,在此基础上生成的码流会比较稳定,而为了提高编码效率,则可以降低根据待编码视频帧之前视频帧的比特数偏差,来调整待编码视频帧的目标比特殊的频率,也就是增大每两次执行根据所获取的编码状态,判断是否开始对待编码视频帧进行编码的步骤所针对的视频帧之间间隔的视频帧的数量。
[0127] 本发明实施例提供的各个方案中,视频编码方法可以调用用于对视频帧进行编码的多个线程进行视频编码,因而能够提高编码效率。并且,在编码过程中,获得表示各个线程所编码视频帧是否编码结束的状态,并根据所获得的状态,确定是否对待编码视频帧进行编码,也就是待编码视频帧之前视频帧的编码状态影响待编码视频的编码开始时刻,基于此,在对待编码视频帧进行编码时,能够尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,进而能够根据更加丰富的信息调整待编码视频帧的码率控制参数,减少RD损失。
[0128] 参见图3,示出了本发明实施例提供的一种视频编码装置的结构示意图,该装置包括:
[0129] 获取模块200,用于获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;
[0130] 第一判断模块210,用于根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码,并在确定开始对所述待编码视频帧进行编码的情况下触发分配模块;
[0131] 分配模块220,用于为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。
[0132] 本发明实施例一种实现方式中,所述第一判断模块210还用于,
[0133] 在所述视频帧的编码状态指示所述视频帧编码结束的情况下,确定开始对所述待编码视频帧进行编码;
[0134] 在所述视频帧的编码状态指示所述视频帧编码未结束的情况下,确定不对所述待编码视频帧进行编码。
[0135] 本发明实施例一种实现方式中,所述视频帧包括以下至少之一:
[0136] 第一图像组GOP之前第一数量个GOP中的全部或部分视频帧,其中,所述第一GOP为所述待编码视频帧所在的GOP;
[0137] 第一视频帧之前的第二数量的视频帧,其中,所述第一视频帧为:在所述待编码视频帧之前、且与所述待编码视频帧间隔n帧的视频帧,n为正整数。
[0138] 本发明实施例一种实现方式中,所述分配模块220包括:
[0139] 获取子模块,用于获取所述视频帧的比特数偏差,其中,所述视频帧的比特数偏差为:所述视频帧的目标编码比特数与实际编码比特数之间的差值;
[0140] 估算子模块,用于根据所述比特数偏差估算所述待编码视频帧的目标编码比特数;
[0141] 分配子模块,用于为所述待编码视频帧分配线程,并调用所分配的线程按照所述待编码视频帧的目标编码比特数对所述待编码视频帧进行编码。
[0142] 本发明实施例一种实现方式中,
[0143] 所述获取子模块,还用于获取所述第一GOP之前的第一数量GOP中视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0144] 所述估算子模块,还用于根据所获取的比特数偏差估算所述第一GOP的目标编码比特数,并根据估算得到的目标编码比特数,确定所述待编码视频帧的目标编码比特数;
[0145] 其中,所述第一GOP为所述待编码视频帧所在的GOP。
[0146] 本发明实施例一种实现方式中,所述视频编码装置还包括:
[0147] 获得模块,用于在运行所述第一判断模块之前,按照编码顺序,获得所述待编码视频帧与第二视频帧之间所间隔视频帧的数量,其中,所述第二视频帧为:上一次执行所述根据所获取的编码状态,判断是否开始对所述待编码视频帧进行编码的步骤所针对的视频帧;
[0148] 第二判断模块,用于判断所获得的数量是否为第三数量,在所获得的数量为所述第三数量的情况下,触发所述第一判断模块210。
[0149] 本发明实施例一种实现方式中,所述视频编码装置还包括:
[0150] 偏差模块,用于获取所述待编码视频帧之前已完成编码的视频帧的比特数偏差,其中,视频帧的比特数偏差为:视频帧的目标编码比特数与实际编码比特数之间的差值;
[0151] 统计模块,用于对所获取的比特数偏差进行数据统计,获得统计结果;
[0152] 减小模块,用于在所述统计结果的绝对值大于预设第一阈值的情况下,按照预设第一步长减小所述第三数量;
[0153] 增大模块,用于在所述统计结果的绝对值小于预设第二阈值的情况下,按照预设第二步长增大所述第三数量。
[0154] 本发明实施例提供的各个方案中,视频编码装置可以调用用于对视频帧进行编码的多个线程进行视频编码,因而能够提高编码效率。并且,在编码过程中,获得表示各个线程所编码视频帧是否编码结束的状态,并根据所获得的状态,确定是否对待编码视频帧进行编码,也就是待编码视频帧之前视频帧的编码状态影响待编码视频的编码开始时刻,基于此,在对待编码视频帧进行编码时,能够尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,进而能够根据更加丰富的信息调整待编码视频帧的码率控制参数,减少RD损失。
[0155] 本发明实施例还提供了一种电子设备,如图4所示,包括处理器001、通信接口002、存储器003和通信总线004,其中,处理器001,通信接口002,存储器003通过通信总线004完成相互间的通信,
[0156] 存储器003,用于存放计算机程序;
[0157] 处理器001,用于执行存储器003上所存放的程序时,实现本发明实施例上述提供的视频编码方法。
[0158] 可选的,上述视频编码方法可以包括:
[0159] 获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;
[0160] 根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码;
[0161] 在确定开始对所述待编码视频帧进行编码的情况下,为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。
[0162] 需要说明的是,上述处理器011执行存储器013上所存放的程序实现视频编码方法的其他实施例,与前述方法实施例部分提供的实施例相同,这里不再赘述。
[0163] 本发明实施例提供的各个方案中,电子设备可以调用用于对视频帧进行编码的多个线程进行视频编码,因而能够提高编码效率。并且,在编码过程中,获得表示各个线程所编码视频帧是否编码结束的状态,并根据所获得的状态,确定是否对待编码视频帧进行编码,也就是待编码视频帧之前视频帧的编码状态影响待编码视频的编码开始时刻,基于此,在对待编码视频帧进行编码时,能够尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,进而能够根据更加丰富的信息调整待编码视频帧的码率控制参数,减少RD损失。
[0164] 上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry  Standard Architecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0165] 通信接口用于上述电子设备与其他设备之间的通信。
[0166] 存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0167] 上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0168] 在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,本发明实施例上述提供的视频编码方法。
[0169] 可选的,上述视频编码方法,可以包括:
[0170] 获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;
[0171] 根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码;
[0172] 在确定开始对所述待编码视频帧进行编码的情况下,为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。
[0173] 需要说明的是,通过上述计算机可读存储介质实现视频编码方法的其他实施例,与前述方法实施例部分提供的实施例相同,这里不再赘述。
[0174] 本发明实施例提供的各个方案中,通过运行上述计算机可读存储介质中存储的指令,可以调用用于对视频帧进行编码的多个线程进行视频编码,因而能够提高编码效率。并且,在编码过程中,获得表示各个线程所编码视频帧是否编码结束的状态,并根据所获得的状态,确定是否对待编码视频帧进行编码,也就是待编码视频帧之前视频帧的编码状态影响待编码视频的编码开始时刻,基于此,在对待编码视频帧进行编码时,能够尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,进而能够根据更加丰富的信息调整待编码视频帧的码率控制参数,减少RD损失。
[0175] 在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,实现本发明实施例上述提供的视频编码方法。
[0176] 可选的,上述视频编码方法,可以包括:
[0177] 获取待编码视频帧之前的视频帧的编码状态,所述编码状态用于指示所述视频帧是否编码结束;
[0178] 根据所述视频帧的编码状态,确定是否开始对所述待编码视频帧进行编码;
[0179] 在确定开始对所述待编码视频帧进行编码的情况下,为所述待编码视频帧分配线程,并调用所分配的线程对所述待编码视频帧进行编码。
[0180] 需要说明的是,通过上述计算机程序产品实现视频编码方法的其他实施例,与前述方法实施例部提供的实施例相同,这里不再赘述。
[0181] 本发明实施例提供的各个方案中,通过运行上述包含指令的计算机程序产品,可以调用用于对视频帧进行编码的多个线程进行视频编码,因而能够提高编码效率。并且,在编码过程中,获得表示各个线程所编码视频帧是否编码结束的状态,并根据所获得的状态,确定是否对待编码视频帧进行编码,也就是待编码视频帧之前视频帧的编码状态影响待编码视频的编码开始时刻,基于此,在对待编码视频帧进行编码时,能够尽可能多的获取待编码视频帧之前、已完成编码的视频帧的编码结果,进而能够根据更加丰富的信息调整待编码视频帧的码率控制参数,减少RD损失。
[0182] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0183] 本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质、计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0184] 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。