本发明是关于视频通信技术领域,特别是关于一种视频编解码方法及系统、计算机可读存储介质。
背景技术:
视频码流中的idr帧(即时解码刷新帧)是解码其他帧的基础,接收到视频码流后需要首先接收和解码idr帧,当视频码流在传输中出现误码、丢包而无法恢复时,也需要编码器重新插入idr帧。idr帧后面的其他帧,如p帧(前向预测编码帧)、b帧(双向预测内插编码帧)等,在编码时会参考idr帧,因此idr帧的图像质量也会影响后面的其他帧的图像质量。
idr帧仅采用帧内预测编码算法,比其他帧(如p帧、b帧)压缩效率小很多,所以为了获得相同或者相近的图像质量,idr帧比其他帧的码率大很多。
在网络视频会议等低延时视频通信应用场景中,码率控制算法主要分为两类。一类算法更多的是保证码流的平稳性,视频编码器输出的视频码流越平稳越有助于在互联网上进行稳定传输,但是该算法会使得idr帧图像质量变差,给用户造成图像闪烁或者图像质量在前后帧之间分布不均的较差体验。另一类算法则是为了保证图像质量均匀,idr帧会采用较大码率,但是由于p帧、b帧码率较小,因此加大了idr帧和p帧、b帧之间的码率差异,容易造成传输时延和抖动。
公开于该背景技术部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。
技术实现要素:
本发明的目的在于提供一种视频编解码方法及系统,其能够降低idr帧的峰值码率,提高视频传输质量。
为实现上述目的,本发明提供了一种视频编解码方法,其包括:对视频序列进行测试和训练,确定idr子帧的平均目标qp值与图像的sad复杂度的函数关系;确定本帧图像的sad复杂度;根据所述本帧图像的sad复杂度以及所述函数关系来确定本帧图像的idr子帧的平均目标qp值;确定所述本帧图像的p子帧的平均目标qp值;编码idr子帧和p子帧。
在本发明的一实施方式中,确定本帧图像的sad复杂度包括:对本帧图像的每个宏块采用sad快速算法选择最佳帧内预测模式;将所有宏块的最佳帧内预测模式下的sad值进行累加得到所述本帧图像的sad复杂度。
在本发明的一实施方式中,确定所述本帧图像的p子帧的平均目标qp值包括:根据编码器的整体码率控制算法,把本帧图像作为p帧进行目标码率分配,并且将作为p帧的本帧图像的平均目标qp值与上一帧的平均qp值的差控制在一定范围内,把依此分配得到的本帧图像的平均目标qp值确定为所述p子帧的平均目标qp值。
在本发明的一实施方式中,所述编码idr子帧和p子帧包括:采用所述本帧图像的idr子帧的平均目标qp值按照idr帧算法对所述本帧图像进行编码从而得到idr子帧压缩码流;采用所述本帧图像的p子帧的平均目标qp值按照p帧算法对所述本帧图像进行编码从而得到p子帧压缩码流。
在本发明的一实施方式中,所述编码idr子帧和p子帧还包括:将所述idr子帧压缩码流和所述p子帧压缩码流与当前视频序列中其余帧的压缩码流一同进行打包、传输或存储,其中,对于存在反馈机制的码率控制算法而言,将idr子帧和p子帧的码流长度之和作为本帧图像的输出码流总长度值,并把该总长度值送到反馈环路中进行此序列整体码率特性的控制与调节。
在本发明的一实施方式中,所述视频编解码方法还包括:解码所述idr子帧压缩码流和所述p子帧压缩码流,除了idr子帧以外,其它类型帧直接输出重构图像帧,对于解码的idr子帧,判断其帧内所有宏块的平均qp值,若该平均qp值大于一定阈值,则不输出重构图像帧,否则输出重构图像帧。
基于同样的发明构思,本发明还提供了一种视频编解码系统,包括:函数关系确定模块、sad复杂度确定模块、第一平均目标qp值确定模块、第二平均目标qp值确定模块以及编码模块。函数关系确定模块用于对视频序列进行测试和训练,确定idr子帧的平均目标qp值与图像的sad复杂度的函数关系;sad复杂度确定模块用于确定本帧图像的sad复杂度;第一平均目标qp值确定模块,与所述函数关系确定模块以及所述sad复杂度确定模块均相耦合,用于根据所述本帧图像的sad复杂度以及所述函数关系来确定本帧图像的idr子帧的平均目标qp值;第二平均目标qp值确定模块,用于确定所述本帧图像的p子帧的平均目标qp值;编码模块与所述第一平均目标qp值确定模块以及所述第二平均目标qp值确定模块均相耦合,用于编码idr子帧和p子帧。
在本发明的一实施方式中,所述sad复杂度确定模块包括:最佳帧内预测模块选择模块和累加模块。最佳帧内预测模块选择模块用于对本帧图像的每个宏块采用sad快速算法选择最佳帧内预测模式。累加模块用于将所有宏块的最佳帧内预测模式下的sad值进行累加得到所述本帧图像的sad复杂度。
在本发明的一实施方式中,所述第二平均目标qp值确定模块用于根据编码器的整体码率控制算法,把本帧图像作为p帧进行目标码率分配,并且将作为p帧的本帧图像的平均目标qp值与上一帧的平均qp值的差控制在一定范围内,把依此分配得到的本帧图像的平均目标qp值确定为所述p子帧的平均目标qp值。
在本发明的一实施方式中,所述编码模块包括:idr子帧编码模块和p子帧编码模块。idr子帧编码模块与所述第一平均目标qp值确定模块相耦合,用于采用所述本帧图像的idr子帧的平均目标qp值按照idr帧算法对所述本帧图像进行编码从而得到idr子帧压缩码流。p子帧编码模块与所述第二平均目标qp值确定模块相耦合,用于采用所述本帧图像的p子帧的平均目标qp值按照p帧算法对所述本帧图像进行编码从而得到p子帧压缩码流。
在本发明的一实施方式中,所述编码模块还用于将所述idr子帧压缩码流和所述p子帧压缩码流与当前视频序列中其余帧的压缩码流一同进行打包、传输或存储,其中,对于存在反馈机制的码率控制算法而言,将idr子帧和p子帧的码流长度之和作为本帧图像的输出码流总长度值,并把该总长度值送到反馈环路中进行此序列整体码率特性的控制与调节。
在本发明的一实施方式中,所述视频编解码系统还包括解码模块。解码模块用于解码所述idr子帧压缩码流和所述p子帧压缩码流,除了idr子帧以外,其它类型帧直接输出重构图像帧,对于解码的idr子帧,判断其帧内所有宏块的平均qp值,若该平均qp值大于一定阈值,则不输出重构图像帧,否则输出重构图像帧。
基于同样的发明构思,本发明还提供了一种计算机可读存储介质,该计算机可读存储介质用于执行如上述任一实施方式所述的视频编解码方法。
与现有技术相比,根据本发明的视频编解码方法及系统、计算机可读存储介质,实际上将现有编码方法的idr帧进行了拆分,分成idr子帧和p子帧,idr子帧以低码流实现视频快速接入,p子帧可以提高压缩效率以及图像质量的p子帧,码流得到降低,两部分码流加起来仍然比原有的单独idr帧的码流要小。最终在保证图像质量的情况下实现了码率的降低,进而降低了视频序列中各类型帧的码率差异,缓解了传输时延抖动和码率过大波动。因此采用本实施方式进行视频传输,可以提高视频传输的稳定性以及保证图像质量的均匀,提高了用户体验质量。
附图说明
图1是根据本发明一实施方式的视频编解码方法的流程图;
图2是根据本发明一实施方式的视频编解码系统的组成。
具体实施方式
下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。
除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。
为了克服现有技术的问题,本发明把每一个idr帧拆分为一个idr子帧和一个p子帧组合,其中idr子帧使用较低的码率提供解码接入能力,而p子帧则充分利用帧间预测模式的多种压缩工具,提供高压缩率、高质量的图像帧。在编码器内部,首先根据大数据训练得到的qp-sad拟合曲线获取目标qp,并使用此qp对idr子帧进行编码;然后使用正常的码率控制算法对p子帧进行编码;最后把idr子帧和p子帧的压缩码流作为本帧图像的输出码流。在解码器内部,依次解码idr子帧和p子帧,并且只把p子帧的重构图像作为解码器的输出图像。
图1是根据本发明一实施方式的视频编解码方法的流程图,其包括:步骤s1~步骤s5。
在步骤s1中确定函数关系。具体而言,对多种场景下(如慢动作、快动作、静止、运动等场景)的视频序列进行测试和训练,采用曲线拟合的方法建立idr子帧与图像复杂度sad的函数关系曲线。一般而言,该拟合曲线会因所选取的视频序列有所不同,但是当训练序列足够多的时候,拟合的曲线将趋于准确。经过建模训练最终得到的函数关系可表示为y=f(x)。其中,y为idr子帧的平均目标qp值,x为本帧图像的sad复杂度。其中qp是量化参数,反映了空间细节压缩情况,值越小,量化越精细,图像质量越高,产生的码流也越长。若qp小,大部分的细节都会被保留;qp增大,一些细节丢失,码率降低,但图像失真加强和质量下降。sad为绝对误差和,图像的sad复杂度为根据图像sad计算出的复杂度。
在步骤s2中确定本帧图像的sad复杂度。在本实施方式中,确定本帧图像的sad复杂度包括:根据h264帧内预测模式选择算法,对本帧图像的每个宏块采用sad快速算法选择最佳帧内预测模式;将所有宏块的最佳帧内预测模式下的sad值进行累加得到所述本帧图像的sad复杂度。本领域通用的sad计算公式如下:
其中s(x,y)是大小为mxn的搜索图像,t(x,y)是mxn的模板图像。通常的视频编码算法,搜索图像为重构图像,而模板图像为原始图像。而本实施方式中计算图像的sad复杂度的搜索图像和模板图像都是原始图像。
在步骤s3中确定本帧图像的idr子帧的平均目标qp值。根据所述本帧图像的sad复杂度以及所述函数关系来确定本帧图像的idr子帧的平均目标qp值。
在步骤s4中确定所述本帧图像的p子帧的平均目标qp值。具体地,确定所述本帧图像的p子帧的平均目标qp值包括:根据编码器的整体码率控制算法,把本帧图像作为p帧进行目标码率分配,并且将作为p帧的本帧图像的平均目标qp值与上一帧的平均qp值的差控制在一定范围内,例如可以控制在0~4之间。把依此分配得到的本帧图像的平均目标qp值确定为所述p子帧的平均目标qp值。
在步骤s5中编码idr子帧和p子帧。采用所述本帧图像的idr子帧的平均目标qp值按照idr帧算法对所述本帧图像进行编码从而得到idr子帧压缩码流;采用所述本帧图像的p子帧的平均目标qp值按照p帧算法对所述本帧图像进行编码从而得到p子帧压缩码流;之后将所述idr子帧压缩码流和所述p子帧压缩码流与当前视频序列中其余帧的压缩码流一同进行打包、传输或存储,其中,对于存在反馈机制的码率控制算法而言,将idr子帧和p子帧的码流长度之和作为本帧图像的输出码流总长度值,并把该总长度值送到反馈环路中进行此序列整体码率特性的控制与调节。需要说明一点的是,本发明中所提到的idr子帧和p子帧的意义与h264协议规定的idr帧和p帧完全相同,可以使用标准解码器进行解码,只是为了描述方便才加以区分。
在一实施方式中,所述视频编解码方法还包括:解码所述idr子帧压缩码流和所述p子帧压缩码流,除了idr子帧以外,其它类型帧直接输出重构图像帧,对于解码的idr子帧,判断其帧内所有宏块的平均qp值,若该平均qp值大于一定阈值(如大于36),则图像质量较差,不输出重构图像帧,否则输出重构图像帧。即若idr子帧图像质量非常差,则只保留质量比较好的p子帧。
通过上述方法,本实施方式中实际上将现有编码方法的idr帧进行了拆分。分成idr子帧和p子帧,idr子帧可以实现视频快速接入,p子帧可以提高压缩效率以及图像质量的p子帧,码流得到降低,两部分码流加起来仍然比原有的单独idr帧的码流要小。
图2是根据本发明一实施方式的视频编解码系统,其包括:函数关系确定模块10、sad复杂度确定模块11、第一平均目标qp值确定模块12、第二平均目标qp值确定模块13以及编码模块14。
函数关系确定模块10用于对视频序列进行测试和训练,确定idr子帧的平均目标qp值与图像的sad复杂度的函数关系。
sad复杂度确定模块11用于确定本帧图像的sad复杂度;第一平均目标qp值确定模块12与所述函数关系确定模块10以及所述sad复杂度确定模块11均相耦合,用于根据所述本帧图像的sad复杂度以及所述函数关系来确定本帧图像的idr子帧的平均目标qp值。第二平均目标qp值确定模块13用于确定所述本帧图像的p子帧的平均目标qp值。编码模块14与所述第一平均目标qp值确定模块12以及所述第二平均目标qp值确定模块13均相耦合,用于编码idr子帧和p子帧。
所述sad复杂度确定模块11包括:最佳帧内预测模块选择模块11a和累加模块11b。最佳帧内预测模块选择模块11a用于对本帧图像的每个宏块采用sad快速算法选择最佳帧内预测模式。累加模块11b用于将所有宏块的最佳帧内预测模式下的sad值进行累加得到所述本帧图像的sad复杂度。
所述第二平均目标qp值确定模块13用于根据编码器的整体码率控制算法,把本帧图像作为p帧进行目标码率分配,并且将作为p帧的本帧图像的平均目标qp值与上一帧的平均qp值的差控制在一定范围内,把依此分配得到的本帧图像的平均目标qp值确定为所述p子帧的平均目标qp值。
所述编码模块14包括:idr子帧编码模块14a和p子帧编码模块14b。idr子帧编码模块14a与所述第一平均目标qp值确定模块12相耦合,用于采用所述本帧图像的idr子帧的平均目标qp值按照idr帧算法对所述本帧图像进行编码从而得到idr子帧压缩码流。p子帧编码模块14b与所述第二平均目标qp值确定模块13相耦合,用于采用所述本帧图像的p子帧的平均目标qp值按照p帧算法对所述本帧图像进行编码从而得到p子帧压缩码流。
在一实施方式中,所述编码模块14还用于将所述idr子帧压缩码流和所述p子帧压缩码流与当前视频序列中其余帧的压缩码流一同进行打包、传输或存储,其中,对于存在反馈机制的码率控制算法而言,将idr子帧和p子帧的码流长度之和作为本帧图像的输出码流总长度值,并把该总长度值送到反馈环路中进行此序列整体码率特性的控制与调节。
在一实施方式中,所述视频编解码系统还包括解码模块。解码模块用于解码所述idr子帧压缩码流和所述p子帧压缩码流,除了idr子帧以外,其它类型帧直接输出重构图像帧,对于解码的idr子帧,判断其帧内所有宏块的平均qp值,若该平均qp值大于一定阈值,则不输出重构图像帧,否则输出重构图像帧。
本实施方式还提供了一种计算机可读存储介质,该计算机可读存储介质用于执行如上述任一实施方式所述的视频编解码方法。
综上所述,根据本实施方式的视频编解码方法及系统、计算机可读存储介质中实际上将现有编码方法的idr帧进行了拆分。分成idr子帧和p子帧,idr子帧以低码流实现视频快速接入,p子帧可以提高压缩效率以及图像质量的p子帧,码流得到降低,两部分码流加起来仍然比原有的单独idr帧的码流要小。最终在保证图像质量的情况下实现了码率的降低,进而降低了视频序列中各类型帧的码率差异,缓解了传输时延抖动和码率过大波动。因此采用本实施方式进行视频传输,可以提高视频传输的稳定性以及保证图像质量的均匀,提高了用户体验质量。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
前述对本发明的具体示例性实施方案的描述是为了说明和例证的目的。这些描述并非想将本发明限定为所公开的精确形式,并且很显然,根据上述教导,可以进行很多改变和变化。对示例性实施例进行选择和描述的目的在于解释本发明的特定原理及其实际应用,从而使得本领域的技术人员能够实现并利用本发明的各种不同的示例性实施方案以及各种不同的选择和改变。本发明的范围意在由权利要求书及其等同形式所限定。