本发明涉及视频处理技术领域,尤其涉及一种设定视频序列中帧内编码帧的方法及装置。
背景技术:
帧是组成视频序列的基本单位。在视频编码时,可将帧类型的设定为I帧、P帧或B帧。帧内编码帧(I帧),是一个全帧内压缩的编码帧。解码时仅用I帧的数据不需要参考其他画面就可重构完整的图像,能够作为后续的若干帧的参考帧。预测帧(P帧)只保存有当前帧与I帧或前一帧之间画面差别的数据;双向预测帧(B帧)记录的是当前帧与前、后帧之间画面差别的数据。而I帧的编码效率最低。因此,在视频序列中设置合适数量的I帧对于提高编码的效率十分重要。
现有的视频编码技术中,通常会在两种情况下将视频序列中的某一帧设置I帧:随机访问需要和发生场景切换时。现有的所有相关技术,都只是检测当前帧和前向相邻帧或者前向参考帧之间是否发生了场景切换。如果发生了场景切换,那么就把当前帧设定为帧内编码帧。但是,当视频序列中持续发生场景切换时,将每个场景切换帧均设置为I帧会给码率控制带来困难,影响视频编码效率。
技术实现要素:
有鉴于此,本发明提供了一种设定视频序列中帧内编码帧的方法及装置,能够解决现有技术在视频序列中持续发生场景切换时,将每个场景切换帧均设置为I帧,会影响到视频编码效率的问题。
本发明实施例提供的一种设定视频序列中帧内编码帧的方法,包括:
获取视频序列,所述视频序列包括多个按顺序排列的帧;
逐一检测所述视频序列的第k帧与第一集合中每一帧之间是否发生场景切换,k为大于1的整数,所述第一集合包括所述视频序列的第k-1帧;
逐一检测所述第k帧与第二集合中每一帧之间是否发生场景切换,所述第二集合包括所述视频序列的第k+1帧;
当所述第k帧与所述第一集合中每一帧之间均发生场景切换且所述第k帧与所述第二集合中的至少一帧之间未发生场景切换时,将所述第k帧设置为帧内编码帧。
优选的,所述第一集合还包括所述视频序列的第k-m帧,m为大于1的整数。
优选的,所述第二集合还包括所述视频序列的第k+n帧,n为大于1的整数。
优选的,所述逐一检测所述视频序列的第k帧与第一集合中每一帧之间是否发生场景切换,具体包括:
获取所述第k帧的帧内复杂度,得到帧内值;
获取所述第k帧和第j帧之间的帧间复杂度,得到帧间值,所述第j帧为所述第一集合中的一帧;
获取所述帧内值与所述帧间值的差值,得到第一值;
将所述帧内值除以所述第一值,得到第二值;
当所述第二值大于预设阈值时,所述第k帧与所述第j帧之间发生场景切换。
优选的,所述逐一检测所述第k帧与第二集合中每一帧之间是否发生场景切换,具体包括:
获取所述第k帧的帧内复杂度,得到帧内值;
获取所述第k帧和第q帧之间的帧间复杂度,得到帧间值,所述第q帧为所述第二集合中的一帧;
获取所述帧内值与所述帧间值的差值,得到第一值;
将所述帧内值除以所述第一值,得到第二值;
当所述第二值大于预设阈值时,所述第k帧与所述第q帧之间发生场景切换。
本发明实施例提供的一种设定视频序列中帧内编码帧的装置,包括:视频获取模块、类型设定模块、第一检测模块和第二检测模块;
所述视频获取模块,用于获取视频序列,所述视频序列包括多个按顺序排列的帧;
所述第一检测模块,用于逐一检测所述视频序列的第k帧与第一集合中每一帧之间是否发生场景切换,k为大于1的整数,所述第一集合包括所述视频序列的第k-1帧;
所述第二检测模块,用于逐一检测所述第k帧与第二集合中每一帧之间是否发生场景切换,所述第二集合包括所述视频序列的第k+1帧;
所述类型设定模块,用于当所述第一检测模块判断所述第k帧与所述第一集合中每一帧之间均发生场景切换且所述第二检测模块判断所述第k帧与所述第二集合中的至少一帧之间未发生场景切换时,将所述第k帧设置为帧内编码帧,所述对比帧为所述第二集合中的一帧。
优选的,所述第一集合还包括所述视频序列的第k-m帧,m为大于1的整数。
优选的,所述第二集合还包括所述视频序列的第k+n帧,n为大于1的整数。
优选的,所述第一检测模块,具体包括:第一复杂度子模块、第一计算子模块、第一判断子模块和第一确定子模块;
所述第一复杂度子模块,用于获取所述第k帧的帧内复杂度,得到帧内值;
所述第一复杂度子模块,还用于获取所述第k帧和第j帧之间的帧间复杂度,得到帧间值,所述第j帧为所述第一集合中的一帧;
所述第一计算子模块,用于获取所述帧内值与所述帧间值的差值,得到第一值;
所述第一计算子模块,还用于将所述帧内值除以所述第一值,得到第二值;
所述第一判断子模块,用于判断所述第二值是否大于预设阈值;
所述第一确定子模块,用于当所述第一判断子模块判断所述第二值大于所述预设阈值时,确定所述第k帧与所述第j帧之间发生场景切换。
优选的,所述第二检测模块,具体包括:第二复杂度子模块、第二计算子模块、第二判断子模块和第二确定子模块;
所述第二复杂度子模块,用于获取所述第k帧的帧内复杂度,得到帧内值;
所述第二复杂度子模块,还用于获取所述第k帧和第q帧之间的帧间复杂度,得到帧间值,所述第q帧为所述第二集合中的一帧;
所述第二计算子模块,用于获取所述帧内值与所述帧间值的差值,得到第一值;
所述第二计算子模块,还用于将所述帧内值除以所述第一值,得到第二值;
所述第二判断子模块,用于判断所述第二值是否大于预设阈值;
所述第二确定子模块,用于当所述第二判断子模块判断所述第二值大于预设阈值时,确定所述第k帧与所述第q帧之间发生场景切换。
与现有技术相比,本发明至少具有以下优点:
本发明实施例提供的设定视频序列中帧内编码帧的方法,在获取到视频序列后,检测视频序列中的当前帧与前向帧集合和后向帧集合中每一帧之间是否发生场景切换。只有在当前帧和前向帧集合中的每一帧均发生了场景切换且当前帧与后向帧集合中的至少一帧之间未发生场景切换的情况下,才将当前帧设定为帧内编码帧。在保证视频编码质量不变且视频序列中未发生场景切换帧的编码效率不变的情况下,减少了视频序列中帧内编码帧的数量,不仅减小了视频的比特数,还提高了整体视频编码的效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明提供的设定视频序列中帧内编码帧的方法实施例的流程示意图;
图2为本发明提供的设定视频序列中帧内编码帧的装置实施例的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有的设置视频序列中帧内编码帧的方法,均是在当前帧和其前向的相邻帧或者前向的参考帧之间发生了场景切换时,将当前帧设定为帧内编码帧(I帧)。如果没有发生场景切换,则根据实际情况,将当前帧设定为前向编码帧(P帧)或者双向编码帧(B帧)。当视频序列中连续发生场景切换时,由于场景切换帧与后续的一个或多个帧之间画面的差距较大,将场景切换帧设置为I帧并不能够为后续的若干帧的编码提供参考,需将后续每个发生场景切换的帧均设置为I帧。这样会导致视频序列中设置的I帧数量过多,从而会影响到视频编码的效率。
为此,本发明实施例提供了一种设定视频序列中帧内编码帧的方法。该方法和现有技术相比,引入后向相邻帧作为I帧设定的判断依据。在当前帧与前向相邻帧之间发生了场景切换的情况下,只有当后向相邻帧和当前帧之间没有发生场景切换时,即当前帧就可以为后向相邻帧,乃至更多的后向其他帧提供编码的参考时才将当前帧设定为I帧。其余情况下,均将当前帧设定为P帧或B帧(可根据实际情况设定)。由于I帧的编码效率一般会低于P帧和B帧,相较于现有技术来说,上述方法减少了视频序列中I帧的数量,提高了视频编码的效率。
基于上述思想,为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
方法实施例:
参见图1,该图为本发明提供的设定视频序列中帧内编码帧的方法实施例的流程示意图。
本实施例提供的设定视频序列中帧内编码帧的方法,包括:
S101:获取视频序列,所述视频序列包括多个按顺序排列的帧;
视频是由多个按时间轴排列的静止画面组成的,每个静止画面为一帧。
需要说明的是,为保证帧内编码帧设定的准确,视频序列中每一帧的分辨率需相同。
S102:逐一检测所述视频序列的第k帧与第一集合中每一帧之间是否发生场景切换,k为大于1的整数,所述第一集合包括所述视频序列的第k-1帧;
可以理解的是,视频编码时,均是从第一帧开始向后逐帧编码。而视频序列中的第一帧没有编码的依据,只能将其设置为I帧,来为后续的帧提供编码的依据。
在优选的实施方案中,所述第一集合还包括所述视频序列的第k-m帧,m为大于1的整数。
由于P帧一般可为后续的帧提供编码的依据但B帧不一定能够为后续的帧提供编码的依据。因此,第k-m帧可为第k帧前向的I帧或P帧。第一集合中的帧不一定相邻。
在一个例子中,第一集合中可包括前向相邻帧(即第k-1帧)和前向的2或3个相邻或不相邻的P帧。
在本实施例的一些可能的实现方式中,所述逐一检测所述视频序列的第k帧与第一集合中每一帧之间是否发生场景切换包括:
首先,获取所述第k帧的帧内复杂度,得到帧内值;
在计算第k帧的自相关性时,可以使用原始分辨率的视频图像或者降低分辨率的下采样视频图像,以进行帧内预测。然后计算帧内预测残差的平方和或者绝对值之和,以此来描述第k帧的帧内复杂度。由于帧内复杂度和帧间复杂度的计算受视频分辨率的影响,相应的,第一集合中的帧需与第k帧的分辨率相同。
其次,获取所述第k帧和第j帧之间的帧间复杂度,得到帧间值,所述第j帧为所述第一集合中的一帧;
第k帧和第j帧之间的帧间互相关性,可使用第k帧和第j帧之间的帧间预测所获得的帧间预测残差的平方和或者绝对值之和来描述。而后,所获得的帧间预测残差的平方和或者绝对值之和,需要进一步和第k帧帧内预测时所获得的帧内预测残差的平方和或者绝对值之和相比较,将两者中较小的值称其为第k帧的帧间复杂度。
再次,获取所述帧内值与所述帧间值的差值,得到第一值;
可以理解的是,第k帧的帧内复杂度总是大于第k帧与第j帧之间的帧间复杂度,即第一值大于零。
需要说明的是,当视频中某一帧发生实际的场景切换的时候,一个显著的特点是第k帧和时间轴上的某一位置不同的参考帧间的互相关性很小,即帧间值较大。如果没有发生场景切换的时候,由于第k帧与参考帧的互相关性较大,帧间复值较小。这样,对第k帧来说,发生场景切换时的帧间值要大于无场景切换时的帧间值。即,对于同一帧来说,该帧为场景切换帧时的第一值大于该帧不是场景转换帧时的第一值。
作为一个示例,可根据第一值的大小来判断第k帧和第j帧之间是否发生场景切换。即,当第一值大于或预设阈值时,第k帧和第j帧之间发生了场景切换;当第一值小于预设阈值时,第k帧和第j帧之间没有发生场景切换。
进一步的,还可通过以下步骤进行场景切换判断,提高判断的准确率:将所述帧内值除以所述第一值,得到第二值;当所述第二值大于预设阈值时,所述第k帧与所述第j帧之间发生场景切换。
这里需要说明的是,当帧间复杂度与帧内复杂度比较接近的情况下,仅使用帧间复杂度与帧内复杂度的大小关系进行场景切换检测所得到的结果的准确性较低。因此,采用上述步骤来判断第k帧是否为视频序列中场景切换的帧,以复杂度差为除数,以帧内复杂度为被除数,可使得第一复杂度商在不同的情况下有一个更大的变化范围,更准确的判断第一帧是否为视频序列中场景切换的帧。
S103:逐一检测所述第k帧与第二集合中每一帧之间是否发生场景切换,所述第二集合包括所述视频序列的第k+1帧;
在优选的实施方案中,所述第二集合还包括所述视频序列的第k+n帧,n为大于1的整数。
同理,第k+n帧可为第k帧后向的I帧、P帧或B帧。第二集合中的帧不一定相邻。
在一个例子中,第二集合中可包括后向相邻帧(即第k+1帧)和后向的2或3个相邻或不相邻的帧。
在本实施例的一些可能的实现方式中,所述逐一检测所述第k帧与第二集合中每一帧之间是否发生场景切换,具体包括:
首先,获取所述第k帧的帧内复杂度,得到帧内值;
其次,获取所述第k帧和第q帧之间的帧间复杂度,得到帧间值,所述第q帧为所述第二集合中的一帧;
再次,获取所述帧内值与所述帧间值的差值,得到第一值;
作为一个示例,可根据第一值的大小来判断第k帧和第q帧之间是否发生场景切换。即,当第一值大于或预设阈值时,第k帧和第q帧之间发生了场景切换;当第一值小于预设阈值时,第k帧和第q帧之间没有发生场景切换。
进一步的,还可通过以下步骤进行场景切换判断,提高判断的准确率:将所述帧内值除以所述第一值,得到第二值;当所述第二值大于预设阈值时,所述第k帧与所述第q帧之间发生场景切换。
可以理解的是,检测所述第k帧与第二集合中每一帧之间是否发生场景切换的方法与检测所述第k帧与第一集合中每一帧之间是否发生场景切换的方法类似,具体解释这里不再一一赘述。
S104:当所述第k帧与所述第一集合中每一帧之间均发生场景切换且所述第k帧与所述第二集合中的至少一帧之间未发生场景切换时,将所述第k帧设置为帧内编码帧;
当第k帧与第一集合中每一帧之间均发生场景切换时,即说明第k帧的前向帧中没有与其画面类似的帧。此时,将第k帧设置为I帧、P帧或B帧时,编码效率相差不大。此时,需根据第k帧与第二集合中帧之间是否发生场景切换来判断是否需将第k帧设定为帧内编码帧,来为后向帧提供编码的依据,提高后向帧编码的效率。
之后,当第k帧和包括后向的一个或多个帧的第二集合中的某一帧(即对比帧)之间未发生场景切换时,说明第k帧可以为该帧提供编码的依据,作为该帧的编码参考帧。此时,将第k帧设置为I帧,较现有技术来说,可保证与第k帧之间没有发生场景切换的帧的编码效率不变。
总的来说,经本实施例提供的方法来设定视频序列中的帧内编码帧,相较于现有技术来说,减少的I帧的数量,提高了视频编码的效率。
本实施例提供的设定视频序列中帧内编码帧的方法,在获取到视频序列后,首先检测视频序列中当前帧与前向帧集合和后向帧集合中每一帧之间是否发生场景切换。只有在当前帧和前向帧集合中的每一帧均发生了场景切换且当前帧与后向帧集合中的至少一帧之间未发生场景切换的情况下,才将当前帧设定为帧内编码帧。在保证视频编码质量不变且视频序列中未发生场景切换帧的编码效率不变的情况下,减少了视频序列中帧内编码帧的数量,不仅减小了视频的比特数,还提高了整体视频编码的效率。
基于上述实施例提供的设定视频序列中帧内编码帧的方法,本发明实施例还提供了一种设定视频序列中帧内编码帧的装置。
装置实施例:
参见图2,该图为本发明提供的设定视频序列中帧内编码帧的装置实施例的结构示意图。
本实施例提供的设定视频序列中帧内编码帧的装置,包括:视频获取模块100、第一检测模块200、第二检测模块300和类型设定模块400;
所述视频获取模块100,用于获取视频序列,所述视频序列包括多个按顺序排列的帧;
所述第一检测模块200,用于逐一检测所述视频序列的第k帧与第一集合中每一帧之间是否发生场景切换,k为大于1的整数,所述第一集合包括所述视频序列的第k-1帧;
可以理解的是,视频编码时,均是从第一帧开始向后逐帧编码。而视频序列中的第一帧没有编码的依据,只能将其设置为I帧,来为后续的帧提供编码的依据。
在优选的实施方案中,所述第一集合还包括所述视频序列的第k-m帧,m为大于1的整数。
在本实施例的一些可能的实现方式中,所述第一检测模块200,具体包括:第一复杂度子模块、第一计算子模块、第一判断子模块和第一确定子模块(均未在图中示出);
所述第一复杂度子模块,用于获取所述第k帧的帧内复杂度,得到帧内值;
所述第一复杂度子模块,还用于获取所述第k帧和第j帧之间的帧间复杂度,得到帧间值,所述第j帧为所述第一集合中的一帧;
所述第一计算子模块,用于获取所述帧内值与所述帧间值的差值,得到第一值;
所述第一计算子模块,还用于将所述帧内值除以所述第一值,得到第二值;
所述第一判断子模块,用于判断所述第二值是否大于预设阈值;
所述第一确定子模块,用于当所述第一判断子模块判断所述第二值大于所述预设阈值时,确定所述第k帧与所述第j帧之间发生场景切换。
所述第二检测模块300,用于逐一检测所述第k帧与第二集合中每一帧之间是否发生场景切换,所述第二集合包括所述视频序列的第k+1帧;
在优选的实施方案中,所述第二集合还包括所述视频序列的第k+n帧,n为大于1的整数。
在本实施例的一些可能的实现方式中,所述第二检测模块300,具体包括:第二复杂度子模块、第二计算子模块、第二判断子模块和第二确定子模块(均未在图中示出);
所述第二复杂度子模块,用于获取所述第k帧的帧内复杂度,得到帧内值;
所述第二复杂度子模块,还用于获取所述第k帧和第q帧之间的帧间复杂度,得到帧间值,所述第q帧为所述第二集合中的一帧;
所述第二计算子模块,用于获取所述帧内值与所述帧间值的差值,得到第一值;
所述第二计算子模块,还用于将所述帧内值除以所述第一值,得到第二值;
所述第二判断子模块,用于判断所述第二值是否大于预设阈值;
所述第二确定子模块,用于当所述第二判断子模块判断所述第二值大于预设阈值时,确定所述第k帧与所述第q帧之间发生场景切换。
所述类型设定模块400,还用于当所述第一检测模块200判断所述第k帧与所述第一集合中每一帧之间均发生场景切换且所述第二检测模块300判断所述第k帧与所述第二集合中的至少一帧之间未发生场景切换时,将所述第k帧设置为帧内编码帧。
本实施例提供的设定视频序列中帧内编码帧的装置,在视频获取模块获取到视频序列后,第一检测模块和第二检测模块分别检测当前帧与前向帧集合和后向帧集合中每一帧之间是否发生场景切换。只有在当前帧和前向帧集合中的每一帧均发生了场景切换且当前帧与后向帧集合中的至少一帧之间未发生场景切换的情况下,类型设定模块才将当前帧设定为帧内编码帧。在保证视频编码质量不变且视频序列中未发生场景切换帧的编码效率不变的情况下,减少了视频序列中帧内编码帧的数量,不仅减小了视频的比特数,还提高了整体视频编码的效率。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。