本申请实施例涉及编码技术领域,特别涉及一种视频编码方法、装置、存储介质及设备。
背景技术:
视频是由多个视频帧按序组成的视频序列。由于视频的数据量较大,可以通过编码的方式对视频进行压缩,而编码时需要确定视频中每个视频帧的编码分辨率。
相关技术提供了两种编码分辨率,第一编码分辨率是视频帧采样时的分辨率,第二编码分辨率是对第一编码分辨率进行下采样的分辨率。这里的下采样是指每间隔几个样值对样值序列取样一次,可见,第二编码分辨率低于第一编码分辨率。另一方面,终端根据视频帧的类型确定编码分辨率。其中,视频帧至少可以分为两类,一类是i帧,另一类是p帧。i帧是帧内预测帧,其自带全部信息,无需参考其他帧即可进行编码;p帧是帧间预测帧,其需要参考其他帧才能进行编码。
基于上述两类视频帧的特点,终端在对每个视频帧进行编码时,确定该视频帧是i帧还是p帧,当该视频帧是i帧时,以第一编码分辨率对该视频帧进行编码;当该视频帧是p帧时,以第二编码分辨率对该视频帧进行编码。
上述方法中同类型的视频帧对应于同一种编码分辨率,导致编码方式不够灵活。
技术实现要素:
本申请实施例提供了一种视频编码方法、装置、存储介质及设备,用于解决同类型的视频帧对应于同一种编码分辨率,导致编码方式不够灵活的问题。所述技术方案如下:
一方面,提供了一种视频编码方法,所述方法包括:
获取待编码的视频,所述视频中包括按序排列的至少两个视频帧;
对于第i个视频帧,计算所述第i个视频帧的量化参数和量化参数阈值,i为大于等于2的正整数;
根据所述量化参数和所述量化参数阈值确定所述第i个视频帧的编码分辨率,所述编码分辨率为第一编码分辨率或第二编码分辨率,所述第一编码分辨率是所述第i个视频帧采样时的分辨率,所述第二编码分辨率是对所述第一编码分辨率进行下采样的分辨率;
以所述编码分辨率对所述第i个视频帧进行编码。
一方面,提供了一种视频编码装置,所述装置包括:
获取模块,用于获取待编码的视频,所述视频中包括按序排列的至少两个视频帧;
计算模块,用于对于第i个视频帧,计算所述第i个视频帧的量化参数和量化参数阈值,i为大于等于2的正整数;
确定模块,用于根据所述计算模块得到的所述量化参数和所述量化参数阈值确定所述第i个视频帧的编码分辨率,所述编码分辨率为第一编码分辨率或第二编码分辨率,所述第一编码分辨率是所述第i个视频帧采样时的分辨率,所述第二编码分辨率是对所述第一编码分辨率进行下采样的分辨率;
编码模块,用于以所述确定模块确定的所述编码分辨率对所述第i个视频帧进行编码。
一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的视频编码方法。
一方面,提供了一种视频编码设备,所述视频编码设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的视频编码方法。
本申请实施例提供的技术方案的有益效果至少包括:
通过计算视频帧的量化参数和量化参数阈值,根据量化参数和量化参数阈值确定视频帧的编码分辨率,这样,同类型的视频帧可能对应于同一种编码分辨率,也可能对应于不同的编码分辨率,解决了同类型的视频帧对应于同一种编码分辨率时,编码方式不够灵活的问题,从而提高了编码方式的灵活性。
由于量化参数和画面质量相关,量化参数阈值和需求画面质量相关,因此,根据量化参数和量化参数阈值确定视频帧的编码分辨率,也就相当于根据画面质量和需求画面质量选择视频帧的编码分辨率,可以提高确定的编码分辨率的准确性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请部分实施例示出的确定编码分辨率的流程图;
图2是根据部分示例性实施例示出的一种视频编码系统的结构示意图;
图3是本申请一个实施例提供的视频编码方法的方法流程图;
图4是本申请另一实施例提供的视频编码方法的方法流程图;
图5是本申请另一实施例提供的计算编码代价比值的流程图;
图6是本申请一个实施例提供的视频编码装置的结构框图;
图7是本申请再一实施例提供的视频编码装置的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细地解释说明之前,先对本申请实施例的应用场景进行说明。
本申请实施例应用于视频压缩的应用场景中。在对视频进行压缩后,可以对视频进行传输,以节省视频在传输过程中所占用的带宽,并减少传输耗时;还可以对视频进行存储,以节省视频所占用的存储空间;还可以对视频进行其他操作,此处不作限定。
其中,视频传输包括实时传输和非实时传输,实时传输可以是利用即时通讯客户端进行实时视频通话、利用直播客户端进行实时直播等;非实时传输可以是视频上传、下载等。
本申请实施例概括来说可以分为五个步骤,第一步101是帧内/帧间预编码代价分析,以确定编码代价比值;第二步102是根据编码代价比值估计量化参数;第三步103是计算量化参数阈值;第四步104是根据量化参数和量化参数阈值选择编码分辨率;第五步105是以选出的编码分辨率对视频帧进行编码,请参考图1。其中,每个步骤的详细解释详见下面实施例中的描述。
本申请实施例中,视频中的各个i帧可能对应于同种编码分辨率,也可能对应于不同的编码分辨率;视频中的各个p帧可能对应于同种编码分辨率,也可能对应于不同的编码分辨率。即,同类型的视频帧可能对应于同种编码分辨率,也可能对应于不同的编码分辨率,从而提高了编码方式的灵活性。且由于量化参数和画面质量相关,量化参数阈值和需求画面质量相关,因此,根据量化参数和量化参数阈值确定视频帧的编码分辨率,也就相当于根据画面质量和需求画面质量选择视频帧的编码分辨率,可以提高确定的编码分辨率的准确性。
下面对本申请实施例的系统架构进行说明。
请参考图2,其示出了本申请实施例提供的一种视频编码系统的结构示意图,以该视频编码系统应用于利用即时通讯客户端进行实时视频通话的场景中为例,则该视频编码系统至少包括第一终端210、第二终端220和服务器230。第一终端210与服务器230通过有线网络或无线网络建立连接,第二终端220与服务器230通过有线网络或无线网络建立连接。
第一终端210是具有视频数据流收发功能的设备,比如智能手机。第一终端210中安装有即时通讯客户端,比如微信客户端、qq客户端等。
第二终端220是具有视频数据流收发功能的设备,比如智能手机。第二终端220与第一终端210中至少安装有一个相同的即时通讯客户端,且第二终端220中的即时通讯客户端与第一终端210中的即时通讯客户端可以通信。
服务器230是即时通讯客户端的后台服务器,可以是一台服务器或多台服务器组成的服务器集群或云计算中心。
本申请实施例中,可以由第一终端210通过服务器230向第二终端220发起实时视频通话;也可以由第二终端220通过服务器230向第一终端210发起实时视频通话。
下面对使用第一终端210的第一用户和使用第二终端220的第二用户进行实时视频通话的过程进行介绍。第一终端210通过摄像头对第一用户的通话过程进行拍摄,采用本申请实施例提供的视频编码方法对第一视频进行编码,将编码后得到的第一视频数据流发送给服务器230,服务器230将该第一视频数据流转发给第二终端220,第二终端220根据该编码方式对应的解码方式对该第一视频数据流进行解码,并对解码得到的第一视频进行播放。同时,第二终端220通过摄像头对第二用户的通话过程进行拍摄,采用本申请实施例提供的视频编码方法对第二视频进行编码,将编码后得到的第二视频数据流发送给服务器230,服务器230将该第二视频数据流转发给第一终端210,第一终端210根据该编码方式对应的解码方式对该第二视频数据流进行解码,并对解码得到的第二视频进行播放。
可选的,第一终端210除了播放第二视频,还可以播放自身拍摄的第一视频,即,在第一终端210的显示界面的第一区域内播放第二视频,在第二区域内播放第一视频。同理,第二终端220除了播放第一视频,还可以播放自身拍摄的第二视频,即,在第二终端220的显示界面的第一区域内播放第一视频,在第二区域内播放第二视频。其中,第一终端210和第二终端220的显示界面详见图2所示。
请参考图3,其示出了本申请一个实施例提供的视频编码方法的方法流程图,该视频编码方法可以应用于图2所示的第一终端或第二终端中。该视频编码方法,包括:
步骤301,获取待编码的视频,该视频中包括按序排列的至少两个视频帧。
视频可以是终端拍摄得到的,也可以是终端从网络中下载得到的,还可以是终端从其他设备获取到的,本实施例不对视频的来源作限定。
视频是包括按序排列的至少两个视频帧的视频序列。这里的按序排列是指按照各个视频帧的拍摄顺序排列,即,按照各个视频帧的拍摄时间由早到晚的顺序排列。
对于视频序列中的第一个视频帧,终端默认以第一编码分辨率对视频帧进行编码;对于视频序列中剩余的视频帧,终端依次从该视频序列中读取一个视频帧,将该视频帧作为第i个视频帧,再执行步骤202-204来对读取到的该视频帧进行编码,i为大于等于2的正整数。
步骤302,对于第i个视频帧,计算第i个视频帧的量化参数和量化参数阈值。
量化是将连续信号采样为离散信号,以减少需要编码的数据量,达到压缩数据的目的。
量化参数是量化视频帧的过程中涉及的参数。
量化参数是用于表示量化精度的参数。其中,量化参数与量化精度呈负相关关系。即,量化参数越小,表示量化越精细,此时的画面质量较好,数据的压缩比不高;量化参数越大,表示量化越粗糙,此时的画面质量较差,数据的压缩比较高。
量化参数是量化步长对应的序号。比如,h.264(movingpictureexpertgroup-4advancedvideocodec,运动图像专家组-4高级视频编码)中量化步长有52个值,则量化参数的数值为0~51,每个量化参数用于标识52个量化步长中的一个量化步长。
量化参数阈值是用于表示需求画面质量的阈值,这里的需求画面质量是用户主观上能接受的画面质量。其中,量化参数阈值与需求画面质量呈正相关关系。即,需求画面质量越低,量化参数阈值越小;需求画面质量越高,量化参数阈值越大。
这是因为,人眼对静止场景的画面质量损失敏感,对运动场景的画面质量损失不敏感,所以,人眼对静止场景下的视频帧的需求画面质量的要求较高,终端可以对静止场景下的视频帧设置较大的量化参数阈值,以倾向于采用第一编码分辨率进行编码,从而提高画面质量;人眼对运动场景下的视频帧的需求画面质量的要求较低,对运动场景下的视频帧设置较小的量化参数阈值,以倾向于采用第二编码分辨率进行编码,从而提高数据的压缩比。
本实施例中,对于第i个视频帧,终端计算第i个视频帧的一个量化参数和一个量化参数阈值,这里的量化参数是终端估算出来的,可能与实际的量化参数不同。其中,终端计算量化参数的内容详见步骤402或403中的描述,计算量化参数阈值的内容详见步骤404-406中的描述。
步骤303,根据量化参数和量化参数阈值确定第i个视频帧的编码分辨率。
编码分辨率为第一编码分辨率或第二编码分辨率,第一编码分辨率是第i个视频帧采样时的分辨率,也可以称为全分辨率;第二编码分辨率是对第一编码分辨率进行下采样的分辨率。其中,第二编码分辨率小于第一编码分辨率。
步骤304,以该编码分辨率对第i个视频帧进行编码。
当以第一编码分辨率对第i个视频帧进行编码时,画面质量较好,数据的压缩比较低;当以第二编码分辨率对第i个视频帧进行编码时,画面质量较差,数据的压缩比较高。
综上所述,本申请实施例提供的视频编码方法,通过计算视频帧的量化参数和量化参数阈值,根据量化参数和量化参数阈值确定视频帧的编码分辨率,这样,同类型的视频帧可能对应于同一种编码分辨率,也可能对应于不同的编码分辨率,解决了同类型的视频帧对应于同一种编码分辨率时,编码方式不够灵活的问题,从而提高了编码方式的灵活性。
由于量化参数和画面质量相关,量化参数阈值和需求画面质量相关,因此,根据量化参数和量化参数阈值确定视频帧的编码分辨率,也就相当于根据画面质量和需求画面质量选择视频帧的编码分辨率,可以提高确定的编码分辨率的准确性。
请参考图4,其示出了本申请另一实施例提供的视频编码方法的方法流程图,该视频编码方法可以应用于图2所示的第一终端或第二终端中。该视频编码方法,包括:
步骤401,获取待编码的视频,该视频中包括按序排列的至少两个视频帧。
视频可以是终端拍摄得到的,也可以是终端从网络中下载得到的,还可以是终端从其他设备获取到的,本实施例不对视频的来源作限定。
视频是包括按序排列的至少两个视频帧的视频序列。这里的按序排列是指按照各个视频帧的拍摄顺序排列,即,按照各个视频帧的拍摄时间由早到晚的顺序排列。
对于视频序列中的第一个视频帧,终端默认以第一编码分辨率对视频帧进行编码;对于视频序列中剩余的视频帧,终端依次从该视频序列中读取一个视频帧,将该视频帧作为第i个视频帧,再执行步骤402-408来对第i个视频帧进行编码,i为大于等于2的正整数。其中,第一编码分辨率是视频帧采样时的分辨率,第二编码分辨率是对第一编码分辨率进行下采样的分辨率,详见步骤303中的描述。
步骤402,当第i个视频帧的编码模式是固定质量编码模式时,读取设定的量化参数,执行步骤404。
固定质量编码模式是指以恒定画面质量对视频帧进行编码的模式,也即,对每个视频帧编码后的画面质量恒定。
由于视频帧的画面质量和量化参数相关,当画面质量恒定时,也就意味着量化参数恒定,所以,可以预先对固定质量编码模式的视频帧设定恒定的量化参数。即,当第i个视频帧的编码模式是固定质量编码模式时,第i个视频帧的量化参数是预先设定的,终端直接读取即可获得量化参数。
需要说明的是,不同编码分辨率对应于不同的量化参数,所以,在读取量化参数之前,终端还需要假定第i个视频帧的编码分辨率,读取与该编码分辨率对应的量化参数。其中,第一编码分辨率对应的量化参数大于第二编码分辨率对应的量化参数。比如,第一编码分辨率对应的量化参数为33,第二编码分辨率对应的量化参数为27。
实时视频通话的场景中的视频帧大多数以第一编码分辨率进行编码,以提高画面质量,所以,可选的,终端可以假定第i个视频帧的编码分辨率为第一编码分辨率。当然,也可以假定第i个视频帧的编码分辨率为第二编码分辨率,本实施例不作限定。
步骤403,当第i个视频帧的编码模式是固定码率编码模式时,计算第i个视频帧中第一个编码块的量化参数,将第一个编码块的量化参数确定为量化参数。
固定码率编码模式是以恒定比特率对视频帧进行编码的模式,也即,对每一秒的视频帧编码后的大小恒定。
由于以恒定的比特率对视频帧进行编码后,视频帧的画面质量不稳定,而画面质量和量化参数相关,所以,需要根据画面质量来动态确定量化参数。即,当第i个视频帧的编码模式是固定码率编码模式时,可以动态计算第i个视频帧的量化参数。
需要说明的是,不同编码分辨率对应于不同的量化参数,所以,在计算量化参数之前,终端还需要假定第i个视频帧的编码分辨率,再基于假定的编码分辨率计算量化参数。其中,假定第一编码分辨率和第二编码分辨率时对量化参数的算法相同。
其中,计算第i个视频帧中第一个编码块的量化参数,可以包括如下四种方案:
1),若第i-1个视频帧为i帧且以第二编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;获取第一偏移和第二偏移;将平均值、第一偏移和第二偏移之和确定为第一个编码块的量化参数。
若第i-1个视频帧的编码模式为固定质量编码模式,则在编码过程中,终端将该第i-1个视频帧划分为至少两个编码块,每个编码块的量化参数均为设定的量化参数,所以,所有编码块实际的量化参数的平均值仍然为设定的量化参数。
若第i-1个视频帧的编码模式为固定码率编码模式,则在编码过程中,终端将该第i-1个视频帧划分为至少两个编码块,根据编码器中设定的算法计算每个编码块实际的量化参数,将所有的量化参数相加后再除以编码块的数量,得到平均值。
需要说明的是,在对第i-1个视频帧进行预编码时,会先计算该第i-1个视频帧的第一个编码块的量化参数,再将该量化参数假设为第i-1个视频帧的量化参数。在实际编码时,终端会计算第i-1个视频帧中每一个编码块实际的量化参数,这里计算得到的实际的量化参数与之前假设的量化参数不同,本步骤中计算是的编码过程中得到的实际的量化参数的平均值。
第一偏移是第一编码分辨率对应的量化参数和第二编码分辨率对应的量化参数之间的偏移,可以是经验值,也可以是根据公式计算得到,本实施例不作限定。本实施例中将第一偏移记为qpdelta。其中,将第一编码分辨率的量化参数减去第一偏移得到第二编码分辨率的量化参数,也即,将第二编码分辨率的量化参数加上第一偏移得到第一编码分辨率的量化参数。
第二偏移是i帧和p帧之间量化参数的偏移,可以是经验值,也可以是根据公式计算得到,本实施例不作限定。本实施例中将第二偏移记为qpoffset-i/p。
在得到平均值、第一偏移和第二偏移后,将这三者之和作为第一个编码块的量化参数。
2),若第i-1个视频帧为i帧且以第一编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;获取第二偏移;将平均值和第二偏移之和确定为第一个编码块的量化参数。
其中,计算平均值和获取第二偏移的流程详见上述描述,此处不作赘述。
在得到平均值和第二偏移后,将这两者之和作为第一个编码块的量化参数。
3),若第i-1个视频帧为p帧且以第一编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;将平均值确定为第一个编码块的量化参数。
其中,计算平均值的流程详见上述描述,此处不作赘述。
在得到平均值后,将平均值作为第一个编码块的量化参数。
4),若第i-1个视频帧为p帧且以第二编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;获取第一偏移;将平均值和第一偏移之和确定为第一个编码块的量化参数。
其中,计算平均值和获取第一偏移的流程详见上述描述,此处不作赘述。
在得到平均值和第一偏移后,将这两者之和作为第一个编码块的量化参数。
本实施例中,可以根据第i-1个视频帧的类型和编码分辨率确定采用上述四种方案中的哪种方案计算第一个编码块的量化参数。
步骤404,计算假定第i个视频帧为i帧时的第一编码代价。
本实施例中,无论第i个视频帧是i帧还是p帧,都需要假定第i个视频帧为i帧来计算第一编码代价,假定第i个视频帧为p帧来计算第二编码代价。
其中,计算假定第i个视频帧为i帧时的第一编码代价,可以包括如下几个步骤:
步骤4041,将第i个视频帧划分为至少两个编码块。
其中,终端可以根据不同的算法将第i个视频帧划分为不同数量的编码块,本实施例不作限定。
在一种可能的实现方式中,终端将第i个视频帧划分为8*8个编码块。
步骤4042,对编码块进行帧内预测编得到帧内编码代价。
其中,帧内编码代价的算法有很多种,下面对其中的两种算法进行介绍。
在第一种算法中,帧内编码代价等于该编码块所有像素的预测残差的绝对值之和。
在第二种算法中,帧内编码代价cost=d+λ*r,其中,d为编码块的失真程度,可以用当前的编码块中所有像素编码重建图像和原始图像的差值的绝对值表示,λ为拉格朗日系统数,r为编码块占用的比特数。
步骤4043,将各个帧内编码代价之和确定为第一编码代价。
本实施例中,将第一编码代价记为icost。
可选的,在将第i个视频帧划分为至少两个编码块之前,该方法还包括:对第i个视频帧进行下采样。
其中,终端可以先以简单的下采样算法对第i个视频帧进行下采样,以减小第i个视频帧的数据量,从而提高后续计算第一编码代价和第二编码代价的速度,最终提高确定编码分辨率的速度。
在一种可能的实现方式中,终端对第i个视频帧的长和宽进行2:1的下采样。当然,终端也可以进行其他比例的下采样,本实施例不作限定。
步骤405,计算假定第i个视频帧为p帧时的第二编码代价。
其中,计算假定第i个视频帧为p帧时的第二编码代价,可以包括如下几个步骤:
步骤4051,将第i个视频帧划分为至少两个编码块。
其中,终端可以根据不同的算法将第i个视频帧划分为不同数量的编码块,本实施例不作限定。
需要说明的是,本步骤中划分编码块的算法与步骤4041中划分编码块的算法相同,使得本步骤中得到的各个编码块与步骤4041中得到的各个编码块相同。
在一种可能的实现方式中,终端也将第i个视频帧划分为8*8个编码块。
可选的,若终端先执行步骤4041,则终端可以直接读取步骤4041的执行结果,得到至少两个编码块,以避免重复划分编码块所消耗的时间,提高编码效率。
步骤4052,对编码块进行帧间预测编码得到帧间编码代价。
其中,帧间编码代价和帧内编码代价的算法相同,此处不作赘述。
步骤4053,将各个帧间编码代价之和确定为第二编码代价。
本实施例中,将第二编码代价记为pcost。
需要说明的是,本实施例不限定步骤404和步骤405的先后执行顺序。即,终端可以先计算第一编码代价,再计算第二编码代价;也可以先计算第二编码代价,再计算第一编码代价;还可以同时计算第一编码代价和第二编码代价。
步骤406,将第一编码代价除以第二编码代价,得到编码代价比值。
本实施例中将编码代价比值记为ipcost,则ipcost=icost/pcost。
请参考图5,其示出了编码代价比值的计算过程。
步骤407,根据编码代价比值确定量化参数阈值。
本实施例中,终端可以将编码代价比值输入公式来计算量化参数阈值,或者,可以设定编码代价比值与量化参数阈值的对应关系,终端根据编码代价比值在该对应关系中查找量化参数阈值,本实施例不作限定。这里将量化参数阈值记为qpth。
其中,无论以哪种方式确定量化阈值参数,编码代价比值与量化参数阈值都呈正相关关系。这是因为,下采样本身就会损失部分视频信息,而人眼对静止场景的画面质量损失敏感,对运动场景的画面质量损失不敏感,所以,终端可以对静止场景下的视频帧设置较大的量化参数阈值,以倾向于采用第一编码分辨率进行编码,从而提高画面质量;对运动场景下的视频帧设置较小的量化参数阈值,以倾向于采用第二编码分辨率进行编码,从而提高数据的压缩比。
一般的,编码代价比值越小,表示当前场景运动越剧烈,需要设置较小的量化参数阈值,以倾向于采用第二编码分辨率进行编码;反之,编码代价比值越大,表示当前场景越静止,需要设置较大的量化参数阈值,以倾向于采用第一编码分辨率进行编码。
需要说明的是,量化参数阈值和编码分辨率对应,即不同的编码分辨率对应于不同的量化参数阈值。一般来说,对应于第一编码分辨率的量化参数阈值减去对应于第二编码分辨率的量化参数阈值的差值等于第一偏移。
步骤408,当量化参数小于等于量化参数阈值时,确定第i个视频帧的编码分辨率为第一编码分辨率;当量化参数大于量化参数阈值时,确定第i个视频帧的编码分辨率为第二编码分辨率。
本实施例中,由于量化参数与编码分辨率对应,量化参数阈值也与编码分辨率对应,所以,在比较量化参数和量化参数阈值之前,还需要保证量化参数和量化参数阈值对应于同一种编码分辨率。
本实施例提供了两种实现方式,第一种实现方式是设定一组阈值集合且该阈值集合对应于一种编码分辨率,在得到量化参数后,根据阈值集合所对应的编码分辨率对该量化参数进行转换,根据转换后得到的最终的量化参数和该阈值集合确定量化参数阈值。第二种实现方式是设定两组阈值集合且两组阈值集合对应于不同的编码分辨率,在得到量化参数后,先确定该量化参数对应的编码分辨率,再基于该编码分辨率从两组阈值集合中选择一组阈值集合,根据量化参数和查找到的阈值集合确定量化参数阈值。其中,阈值集合是包括至少两个量化参数阈值的集合,且阈值集合中定义有量化参数阈值和编码代价比值之间的第一对应关系。比如,
下面对这两种实现方式进行介绍。
第一种实现方式:
1)当存在一组阈值集合且该阈值集合与第一编码分辨率对应时,则在根据量化参数和量化参数阈值确定第i个视频帧的编码分辨率之前,该方法还包括:当量化参数是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,将量化参数确定为最终的量化参数;当量化参数是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,将量化参数加上第一偏移得到最终的量化参数。
比如,存在的一组阈值集合对应于第一编码分辨率,若量化参数qp是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,则将该qp作为最终的量化参数,执行步骤407;若量化参数qp是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,则将该qp+qpdelta作为最终的量化参数,执行步骤407。
2)当存在一组阈值集合且该阈值集合与第二编码分辨率对应时,则在根据量化参数和量化参数阈值确定第i个视频帧的编码分辨率之前,该方法还包括:当量化参数是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,将量化参数减去第一偏移得到最终的量化参数;当量化参数是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,将量化参数确定为最终的量化参数。
比如,存在的一组阈值集合对应于第二编码分辨率,若量化参数qp是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,则将该qp-qpdelta作为最终的量化参数,执行步骤407;若量化参数qp是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,则将该qp作为最终的量化参数,执行步骤407。
第二种实现方式:
1)当存在两组阈值集合且两组阈值集合对应于不同的编码分辨率时,当量化参数是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,根据编码代价比值、两组阈值集合和第一编码分辨率确定量化阈值参数。其中,根据编码代价比值、两种阈值集合和第一编码分辨率确定量化阈值参数,包括:在两组阈值集合中查找第一编码分辨率所对应的阈值集合;根据编码代价比值在查找到的阈值集合中查找量化阈值参数。
本实施例中,预先设定两组阈值集合和不同的编码分辨率之间的第二对应关系,则在根据编码代价比值、两种阈值集合和第一编码分辨率确定量化阈值参数时,终端先基于第二对应关系中,从两组阈值集合中查找与第一编码分辨率对应的一组阈值集合,再根据该组阈值集合中所定义的量化参数阈值和编码代价比值之间的第一对应关系,查找与该编码代价比值对应的一个量化参数阈值。
比如,在第二对应关系中,对应于第一编码分辨率的阈值集合为
2)当存在两组阈值集合且两组阈值集合对应于不同的编码分辨率时,当量化参数是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,根据编码代价比值、两组阈值集合和第二编码分辨率确定量化阈值参数。其中,根据编码代价比值、两组阈值集合和第二编码分辨率确定量化阈值参数,包括:在两组阈值集合中查找第二编码分辨率所对应的阈值集合;根据编码代价比值在查找到的阈值集合中查找量化阈值参数。
本实施例中,预先设定两组阈值集合和不同的编码分辨率之间的第二对应关系,则在根据编码代价比值、两种阈值集合和第二编码分辨率确定量化阈值参数时,终端先基于第二对应关系中,从两组阈值集合中查找与第二编码分辨率对应的一组阈值集合,再根据该组阈值集合中所定义的量化参数阈值和编码代价比值之间的第一对应关系,查找与该编码代价比值对应的一个量化参数阈值。
比如,在第二对应关系中,对应于第一编码分辨率的阈值集合为
步骤409,以该编码分辨率对第i个视频帧进行编码。
当以第一编码分辨率对第i个视频帧进行编码时,画面质量较好,数据的压缩比较低;当以第二编码分辨率对第i个视频帧进行编码时,画面质量较差,数据的压缩比较高。
本实施例可以采用h.264、h.265、avs(audiovideocodingstandard,信源编码标准)等视频压缩标准,对视频帧进行编码。
综上所述,本申请实施例提供的视频编码方法,通过计算视频帧的量化参数和量化参数阈值,根据量化参数和量化参数阈值确定视频帧的编码分辨率,这样,同类型的视频帧可能对应于同一种编码分辨率,也可能对应于不同的编码分辨率,解决了同类型的视频帧对应于同一种编码分辨率时,编码方式不够灵活的问题,从而提高了编码方式的灵活性。
由于量化参数和画面质量相关,量化参数阈值和需求画面质量相关,因此,根据量化参数和量化参数阈值确定视频帧的编码分辨率,也就相当于根据画面质量和需求画面质量选择视频帧的编码分辨率。当需求画面质量较高时,以较高的第一编码分辨率对视频帧进行编码,以提高画面质量;当需求画面质量较低时,以较低的第二编码分辨率对视频帧进行编码,以提高数据的压缩比。
通过先对视频帧进行下采样,再计算视频帧的编码代价比值,可以减小视频帧的数据量,从而提高后续计算第一编码代价和第二编码代价的速度,最终提高确定编码分辨率的速度。
请参考图6,其示出了本申请一个实施例提供的视频编码装置的结构框图,该视频编码装置可以应用于图2所示的第一终端或第二终端中。该视频编码装置,包括:
获取模块610,用于获取待编码的视频,视频中包括按序排列的至少两个视频帧;
计算模块620,用于对于第i个视频帧,计算第i个视频帧的量化参数和量化参数阈值,i为大于等于2的正整数;
确定模块630,用于根据计算模块620得到的量化参数和量化参数阈值确定第i个视频帧的编码分辨率,编码分辨率为第一编码分辨率或第二编码分辨率,第一编码分辨率是第i个视频帧采样时的分辨率,第二编码分辨率是对第一编码分辨率进行下采样的分辨率;
编码模块640,用于以确定模块630确定的编码分辨率对第i个视频帧进行编码。
可选的,计算模块620,还用于:
当第i个视频帧的编码模式是固定质量编码模式时,读取设定的量化参数;
当第i个视频帧的编码模式是固定码率编码模式时,计算第i个视频帧中第一个编码块的量化参数,将第一个编码块的量化参数确定为量化参数。
可选的,计算模块620,还用于:
若第i-1个视频帧为i帧且以第二编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;获取第一偏移和第二偏移;将平均值、第一偏移和第二偏移之和确定为第一个编码块的量化参数;和/或,
若第i-1个视频帧为i帧且以第一编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;获取第二偏移;将平均值和第二偏移之和确定为第一个编码块的量化参数;和/或,
若第i-1个视频帧为p帧且以第一编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;将平均值确定为第一个编码块的量化参数;和/或,
若第i-1个视频帧为p帧且以第二编码分辨率对第i-1个视频帧进行了编码,则计算第i-1个视频帧中所有编码块实际的量化参数的平均值;获取第一偏移;将平均值和第一偏移之和确定为第一个编码块的量化参数;
其中,第一偏移是第一编码分辨率对应的量化参数和第二编码分辨率对应的量化参数之间的偏移,第二偏移是i帧和p帧之间量化参数的偏移。
可选的,计算模块620,还用于:
计算假定第i个视频帧为i帧时的第一编码代价;
计算假定第i个视频帧为p帧时的第二编码代价;
将第一编码代价除以第二编码代价,得到编码代价比值;
根据编码代价比值确定量化参数阈值,编码代价比值与量化参数阈值呈正相关关系。
可选的,计算模块620,还用于:
将第i个视频帧划分为至少两个编码块;
对编码块进行帧内预测编得到帧内编码代价;
将各个帧内编码代价之和确定为第一编码代价。
可选的,计算模块620,还用于:
将第i个视频帧划分为至少两个编码块;
对编码块进行帧间预测编码得到帧间编码代价;
将各个帧间编码代价之和确定为第二编码代价。
可选的,计算模块620,还用于在将第i个视频帧划分为至少两个编码块之前,对第i个视频帧进行下采样。
可选的,当存在两组阈值集合且两组阈值集合对应于不同的编码分辨率时,计算模块620,还用于:
当量化参数是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,根据编码代价比值、两组阈值集合和第一编码分辨率确定量化阈值参数;
当量化参数是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,根据编码代价比值、两组阈值集合和第二编码分辨率确定量化阈值参数。
可选的,计算模块620,还用于:
在两组阈值集合中查找第一编码分辨率所对应的阈值集合;
根据编码代价比值在查找到的阈值集合中查找量化阈值参数。
可选的,计算模块620,还用于:
在两组阈值集合中查找第二编码分辨率所对应的阈值集合;
根据编码代价比值在查找到的阈值集合中查找量化阈值参数。
可选的,确定模块630,还用于:
当量化参数小于等于量化参数阈值时,确定第i个视频帧的编码分辨率为第一编码分辨率;
当量化参数大于量化参数阈值时,确定第i个视频帧的编码分辨率为第二编码分辨率。
可选的,当存在一组阈值集合且阈值集合与第一编码分辨率对应时,确定模块630,还用于当量化参数是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,将量化参数确定为最终的量化参数;当量化参数是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,将量化参数加上第一偏移得到最终的量化参数。
可选的,当存在一组阈值集合且阈值集合与第二编码分辨率对应时,确定模块630,还用于当量化参数是假定以第一编码分辨率对第i个视频帧进行编码计算得到时,将量化参数减去第一偏移得到最终的量化参数;当量化参数是假定以第二编码分辨率对第i个视频帧进行编码计算得到时,将量化参数确定为最终的量化参数。
综上所述,本申请实施例提供的视频编码装置,通过计算视频帧的量化参数和量化参数阈值,根据量化参数和量化参数阈值确定视频帧的编码分辨率,这样,同类型的视频帧可能对应于同一种编码分辨率,也可能对应于不同的编码分辨率,解决了同类型的视频帧对应于同一种编码分辨率时,编码方式不够灵活的问题,从而提高了编码方式的灵活性。
由于量化参数和画面质量相关,量化参数阈值和需求画面质量相关,因此,根据量化参数和量化参数阈值确定视频帧的编码分辨率,也就相当于根据画面质量和需求画面质量选择视频帧的编码分辨率。当需求画面质量较高时,以较高的第一编码分辨率对视频帧进行编码,以提高画面质量;当需求画面质量较低时,以较低的第二编码分辨率对视频帧进行编码,以提高数据的压缩比。
通过先对视频帧进行下采样,再计算视频帧的编码代价比值,可以减小视频帧的数据量,从而提高后续计算第一编码代价和第二编码代价的速度,最终提高确定编码分辨率的速度。
图7示出了本申请一个示例性实施例提供的终端700的结构框图。该终端700可以是便携式移动终端,比如:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端700还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端700包括有:处理器701和存储器702。
处理器701可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器701可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器701可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器701还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
存储器702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器702中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器701所执行以实现本申请中方法实施例提供的视频编码方法。
在一些实施例中,终端700还可选包括有:外围设备接口703和至少一个外围设备。处理器701、存储器702和外围设备接口703之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口703相连。具体地,外围设备包括:射频电路704、触摸显示屏705、摄像头706、音频电路707、定位组件708和电源709中的至少一种。
外围设备接口703可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器701和存储器702。在一些实施例中,处理器701、存储器702和外围设备接口703被集成在同一芯片或电路板上;在一些其他实施例中,处理器701、存储器702和外围设备接口703中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路704用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路704通过电磁信号与通信网络以及其他通信设备进行通信。射频电路704将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路704包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路704可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路704还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏705用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏705是触摸显示屏时,显示屏705还具有采集在显示屏705的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器701进行处理。此时,显示屏705还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏705可以为一个,设置终端700的前面板;在另一些实施例中,显示屏705可以为至少两个,分别设置在终端700的不同表面或呈折叠设计;在再一些实施例中,显示屏705可以是柔性显示屏,设置在终端700的弯曲表面上或折叠面上。甚至,显示屏705还可以设置成非矩形的不规则图形,也即异形屏。显示屏705可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。
摄像头组件706用于采集图像或视频。可选地,摄像头组件706包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件706还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路707可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器701进行处理,或者输入至射频电路704以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端700的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器701或射频电路704的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路707还可以包括耳机插孔。
定位组件708用于定位终端700的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件708可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源709用于为终端700中的各个组件进行供电。电源709可以是交流电、直流电、一次性电池或可充电电池。当电源709包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端700还包括有一个或多个传感器710。该一个或多个传感器710包括但不限于:加速度传感器711、陀螺仪传感器712、压力传感器713、指纹传感器714、光学传感器715以及接近传感器716。
加速度传感器711可以检测以终端700建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器711可以用于检测重力加速度在三个坐标轴上的分量。处理器701可以根据加速度传感器711采集的重力加速度信号,控制触摸显示屏705以横向视图或纵向视图进行用户界面的显示。加速度传感器711还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器712可以检测终端700的机体方向及转动角度,陀螺仪传感器712可以与加速度传感器711协同采集用户对终端700的3d动作。处理器701根据陀螺仪传感器712采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器713可以设置在终端700的侧边框和/或触摸显示屏705的下层。当压力传感器713设置在终端700的侧边框时,可以检测用户对终端700的握持信号,由处理器701根据压力传感器713采集的握持信号进行左右手识别或快捷操作。当压力传感器713设置在触摸显示屏705的下层时,由处理器701根据用户对触摸显示屏705的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器714用于采集用户的指纹,由处理器701根据指纹传感器714采集到的指纹识别用户的身份,或者,由指纹传感器714根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器701授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器714可以被设置终端700的正面、背面或侧面。当终端700上设置有物理按键或厂商logo时,指纹传感器714可以与物理按键或厂商logo集成在一起。
光学传感器715用于采集环境光强度。在一个实施例中,处理器701可以根据光学传感器715采集的环境光强度,控制触摸显示屏705的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏705的显示亮度;当环境光强度较低时,调低触摸显示屏705的显示亮度。在另一个实施例中,处理器701还可以根据光学传感器715采集的环境光强度,动态调整摄像头组件706的拍摄参数。
接近传感器716,也称距离传感器,通常设置在终端700的前面板。接近传感器716用于采集用户与终端700的正面之间的距离。在一个实施例中,当接近传感器716检测到用户与终端700的正面之间的距离逐渐变小时,由处理器701控制触摸显示屏705从亮屏状态切换为息屏状态;当接近传感器716检测到用户与终端700的正面之间的距离逐渐变大时,由处理器701控制触摸显示屏705从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图7中示出的结构并不构成对终端700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
本申请一个实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上所述的视频编码方法。
本申请一个实施例提供了一种视频编码设备,所述视频编码设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的视频编码方法。
其中,当视频编码设备是终端类的电子设备时,该视频编码设备的结构详见图7所示的实施例中对终端700的结构的描述。
需要说明的是:上述实施例提供的视频编码装置在进行视频编码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将视频编码装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的视频编码装置与视频编码方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。