一种适用于帧率上变换的分布式视频转码方法与流程

文档序号:16889808发布日期:2019-02-15 22:57阅读:203来源:国知局
一种适用于帧率上变换的分布式视频转码方法与流程

本发明涉及一种视频转码技术领域的方法,具体是一种适用于帧率上变换的分布式视频转码方法。



背景技术:

随着网络技术的不断发展和播放终端性能的不断提升,视频逐渐占据现代生活。更高速的网络、更大的屏幕和更智能的终端使视频观看更加舒适。与此同时,用户也开始对用户体验——其观看视频的品质提出了越来越高的要求,比如更高的帧率、分辨率。

除了传统的广播电视,许多视频提供商还会提供在线视频。类似ott和iptv的业务正在逐渐流行,并有取代传统广播电视的趋势,因为在线视频业务具有更方便、更廉价的特性,并提供多样化的视频观看体验。目前已经有许多流行的视频网站为用户提供,全4k视频。这些视频具有3840x2160的超高分辨率,同时具有超过50的帧率,能够给用户带来更加清晰、流畅的视频观看体验。然而,这种高质量的视频源十分稀缺,拍摄的成本也十分高昂。

为此,折中的方法是利用现有的hd视频(分辨率为1920x1080),通过现有的视频处理工具,如超分辨率、超帧率、反色调变换工具等进行上变换转码处理,得到质量优于原始视频的全4k版本,并在4k屏幕上为用户带来更好的观看体验。

然而,视频上变换是一件费时的工作,将一部2小时左右的hd电影通过上变换转码成全4k版本,需要消耗超过40小时,即便用于处理这项任务的计算机是高性能的多核服务器。虽然可以用分布式计算的理念将视频切割成多段,通过多机并行的方式加快转码速度,但对于帧率上变换的场景,转码前后视频帧的数量会改变,因此对切割的视频进行处理可能引起音频、视频时间戳无法对齐、帧冗余等错误。视频切割还可能引起质量损失,若一个帧间预测类型的视频帧与其参考的帧被切割到两个视频片段中,则该帧的解码过程将受到影响,可能出现图像模糊等问题,并影响后续的处理和重新编码,带来糟糕的用户体验。

此外,对于某些需要通过iptv业务播放的视频内容,通常有固定图像组(gop)大小的要求,因为iptv的应用场景下用户可能频繁地切换观看频道,每个节目传输信道地带宽也是固定的,需要节目内容具有稳定的码率。在这种情况下,普通的分布式视频转码方法无法提供满足要求的帧率上变换功能。



技术实现要素:

本发明针对现有分布式视频转码方法的缺陷,提出了一种适用于帧率上变换的分布式视频转码方法,该方法考虑超帧率场景下转码前后视频帧数的变化,同时考虑切割视频可能导致的视频质量损失,设计引入冗余的视频切割和转码方案,以满足分布式转码前后音视频时间对齐、切割点视频质量无损的要求。

为实现以上目的,本发明采用的技术方案是:分析输入视频流的视频帧头信息,获取视频中所有可以不影响前后帧正确解码的切割位置;根据输入视频的帧率、输出视频的帧率和输出视频的图像组长度要求规划视频分片方案;根据切割方案将输入的视频轨进行切割,对每一段切割视频进行分布式转码处理,并计算转码完成后每个视频片段前后需要截去的冗余帧数;将所有截去冗余的转码后的视频码流按照时间顺序进行拼接,并与输入视频的音轨进行复用、封装成需要的输出格式。

具体的,本发明提供的适用于帧率上变换的分布式视频转码方法,包括如下步骤:

s1,分析输入视频流的帧信息,通过帧头获取帧类型,并根据帧类型判断是否能够作为输入视频流的切割点进行视频流切片,而不影响切割点前后帧的解码正确性;

s2,根据输入视频流的帧率、转码任务参数中的输出视频目标帧率和输出视频目标图像组大小,计算切片后每一段视频的单位长度,再根据转码任务参数中对切片后每一段视频长度进行限制的目标长度计算切片后每一段视频除去冗余的长度,最后根据输入视频流的切割点分布,确定带有冗余的切割方案;

s3,根据切割方案将输入视频流分成若干切片,并根据转码任务的输出视频目标帧率参数对切片后的视频片段以分布式的方式进行解码和处理,同时为每一个视频片段计算转码后需要在片段开始和结束位置截去的冗余视频帧数目;

s4,根据s3的计算结果截去处理后视频流的前后冗余,并编码成转码任务参数中规定的格式,最后按照时间顺序拼接成完整的视频码流,与输入视频流的音频流进行复用、格式封装。

优选地,所述s1中,通过分析输入视频流每一帧的nal头和其后紧随的slice头的第一个bit,判断当前帧是否属于一个idr帧的第一个数据片,并将idr帧第一个数据片所在的位置标定为可切割点。

优选地,所述s2中,通过输入视频流的帧率fpsin、输出视频目标帧率fpsout和输出视频目标图像组大小gopout计算获得切片后每一段视频的单位长度l0:

根据每一个分片的参考长度l,即转码任务参数中对切片后每一段视频长度进行限制的目标长度,确定切片后每一段视频除去冗余的长度l:

l=n×l0,其中n为正整数;

根据输入视频流的切割点分布规划切割方案:将输入视频流的第1帧作为有效起点帧fstart,同时作为切割起点帧fcut_start;定位有效起点帧fstart之后的第l帧fstart+l,作为该片段的有效终点帧fend,并确定有效终点帧fend之后的第一个切割点作为切割终点帧fcut_end,而有效终点帧fend之前的第一个切割点作为下一片段的切割起点帧fcut_start;下一个片段的有效起点为当前片段的有效终点帧fend;切割起点帧fcut_start到切割终点帧fcut_end之间的视频帧便被划分到一个视频分片;由新的切割起点帧fcut_start和有效起点帧fstart重复这个流程直到视频的结尾。

优选地,所述s3中,根据输入视频流的帧率和输出视频目标帧率,计算出每一个视频片段计算转码后需要在片段开始位置截去的冗余rstart为:

同理,每一个视频片段计算转码后需要在片段结束位置截去的冗余rend为:

优选地,所述s4中,转码任务参数中规定的格式,包括编码格式、码率、图像组大小以及帧率。

本发明提供的一种适用于帧率上变换的分布式视频转码方法,其中:在转码视频前首先读取输入视频的帧信息,分析视频中每一帧的帧类型,并确定其中可以在切片时不影响前后视频帧正确解码的即时刷新(idr)帧作为可行切割点。其次,根据输入视频的帧率和输出视频帧率、图像组长度(大小)参数,计算切片后每一段视频的单位长度,再计算切片后每一段视频除去冗余的长度,并根据输入视频的切割点分布,确定带有冗余的切割方案。再次,根据切割方案完成视频分片后,根据输出参数对视频片段以分布式的方式进行解码和处理,同时为每一个片段计算转码后需要在片段开始和结束位置截去的冗余视频帧数目。最后,根据计算结果截去处理后视频流的前后冗余,编码并按照时间顺序拼接成完整的视频码流,再与输入视频的音频流进行复用和封装。本发明考虑视频编码码流的帧参考特性,针对帧率上变换场景设计了合理分布式视频转码方法,引入冗余以解决分布式视频转码在分片时引入的视频质量损失,同时实现了固定图像组大小的分布式帧率上变换转码。

本发明提供的一种适用于帧率上变换的分布式视频转码方法,提出了一种更加合理的输入视频切片方案,引入冗余以保证分片操作的无损,同时保证转码输出的视频满足图像组长度的需求。

与现有技术相比,本发明具有如下的有益效果:

本发明在保证常规分布式视频转码方法时间效益的同时,消除了视频切片对输出视频质量的不利影响;同时为现有分布式转码技术无法实现的固定图像组大小超帧率视频转码,提供了一种可行的解决方案。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1是本发明的适用于帧率上变换的分布式视频转码方法的流程图;

图2是本发明中采用的视频无损切割点示意图;

图3是本发明中采用的视频分片方法(分片方案)示意图;

图4是本发明中采用的冗余截去方法示意图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。

实施例

本实施例提供了一种适用于帧率上变换的分布式视频转码方法,所述方法包括:

s1,分析输入视频流的帧信息,通过帧头获取帧类型,并根据类型判断是否可以作为切割点进行视频流切片,而不会影响其前后帧的解码正确性;

s2,根据输入视频的帧率、转码任务的输出视频帧率参数和转码任务的输出视频图像组长度参数,计算切片后每一段视频的单位长度,再根据转码任务参数中对切片后每一段视频长度进行限制的“目标长度”计算切片后每一段视频除去冗余的长度,最后根据输入视频的切割点分布,确定带有冗余的切割方案;

s3,根据切割方案将视频分成若干切片,并根据转码任务的输出参数对视频片段以分布式的方式进行解码和处理,同时为每一个片段计算转码后需要在片段开始和结束位置截去的冗余视频帧数目。

s4,根据计算结果截去处理后视频流的前后冗余,并编码成转码任务参数中规定的格式(包括编码格式、码率、图像组大小以及帧率),最后按照时间顺序拼接成完整的视频码流,与输入视频的音频流进行复用、格式封装。

所述s1中,通过分析每一帧的nal头和其后紧随的slice头的第一个bit,判断当前帧是否属于一个idr帧的第一个数据片,并将idr帧第一个数据片所在的位置标定为可切割点。

所述s2中,通过输入视频帧率fpsin、输出视频目标帧率fpsout和输出视频目标图像组大小gopout计算获得视频分片的单位长度l0:

根据每一个分片的参考长度为l确定每个分片除去冗余的长度l:

l=n×l0,其中n为正整数;

最后,根据输入视频的切割点分布规划分片方案:将输入视频的第1帧作为有效起点帧fstart,同时作为切割起点帧fcut_start。定位fstart之后的第l帧fstart+l,作为该片段的有效终点帧fend,并确定fend之后的第一个切割点作为切割终点帧fcut_end,而fend之前的第一个切割点作为下一片段的切割起点fcut_start。下一个片段的有效起点为当前片段的fend。fcut_start到fcut_end之间的视频帧便被划分到一个视频分片。由新的fcut_start和fstart重复这个流程直到视频的结尾。

所述s3中,根据原始视频的帧率和输出视频的目标帧率,可以计算出结果帧序列需要在前方截去的冗余rstart为:

同理,结果帧序列需要在后方截去的冗余rend为:

本实施例考虑视频编码码流的帧参考特性,针对帧率上变换场景设计了合理分布式视频转码方法,引入冗余以解决分布式视频转码在分片时引入的视频质量损失,同时实现了固定图像组大小的分布式帧率上变换转码。

本实施例中:

以h.264、h.265编码的视频流为例,切割点帧的类型为即时刷新(idr)帧。编码标准规定帧间预测不能跨越idr帧进行,因此在idr帧处进行切割可以保证视频片段解码不会因为参考帧缺失而引起错误,进一步导致后续处理的性能损失。

切割方案的选取需要保证前后相邻两个视频片段之间的冗余帧,在时间范围上包含转码后视频流的一个gop起点。

对于每一个片段,冗余的帧数是从片段起点到预期输出片段第一个gop开始之前的所有帧,和预期输出片段最后一个gop结束到片段结尾的所有帧。

本实施例提供的一种新的适用于帧率上变换的分布式视频转码方法,具体设计思路如下:

①分析输入视频流的帧信息,通过帧头获取帧类型,并根据类型判断是否可以作为切割点进行视频流切片,而不会影响其前后帧的解码正确性;

②根据输入视频的帧率、转码任务的输出视频帧率参数和转码任务的输出视频图像组长度参数,计算切片后每一段视频(即分片)的单位长度,再根据转码任务参数对分片长度的限制计算切片后每一段视频除去冗余的长度,最后根据输入视频的切割点分布,确定带有冗余的切割方案;

③根据切割方案将视频分成若干切片,并根据转码任务的输出参数对视频片段以分布式的方式进行解码和处理,同时为每一个片段计算转码后需要在片段开始和结束位置截去的冗余视频帧数目。

④根据计算结果截去处理后视频流的前后冗余,并编码成转码任务参数规定的格式,最后按照时间顺序拼接成完整的视频码流,与输入视频的音频流进行复用、格式封装。

其中第①步分析视频码流并获取帧类型。第②步为根据帧类型规划分片方案(即切割方法)规划。第③和④步为根据分片方案进行分布式转码,对输出分片进行冗余截去并最终合并、与音频复用为规定格式的过程。

以下具体应用实例将上述方法应用在hd到全4k视频分布式增强转码处理中,具体操作流程如图1所示。

下面先介绍输入视频帧类型获取过程,然后介绍分片方案规划规程,最后介绍分布式转码实施、冗余截去与音视频复用过程。

1.输入帧类型获取

以h.264、h.265标准编码的视频码流为例。视频的帧类型可能包含i帧、p帧和b帧。其中一种特殊类型的i帧被称为idr帧,当编码进行到idr帧时,参考帧缓存会被清空,因此帧间预测的参考不能跨越idr帧进行。

考虑到分布式视频转码中视频分片可能带来的性能损失,本具体应用实例采取在idr帧处切割视频,以保证无损的视频分片。

idr帧的位置信息可以通过分析视频流的帧头信息获取。

首先,以二进制形式读取视频码流,并分析每个视频帧的nal头信息,即码流中每个分隔符:3字节的“000001”或4字节的“00000001”之后的第一个字节。如果nal头所存放的比特等同于5,即“0b00000101”,则该帧所包含的数据为idr帧的数据,否则若nal头所存放的比特等同于1,即“0b00000001”,则该帧所包含的数据为p帧、b帧、普通i帧等非idr帧的数据。

其次,对于分辨率较高的视频码流,一帧的编码信息可能被拆分到多个帧切片(slice)当中,即码流中连续读取到的nal头可能属于同一帧。因此,本具体应用实例在获取视频码流的nal头信息之后,同时对nal头之后的slice头进行分析。由于slice头是经过零阶指数哥伦布编码的,因此只需分析nal头之后的第一个比特:若为0,则slice头标注此slice为当前帧的第一个slice,反之则不是。通过分析slice头可以对视频流中的帧进行计数,即每当读取到slice头标注为第一个slice的帧片段,便可以确定此帧为新的一帧。

最后,整合通过分析得到的视频帧头信息和所有帧的slice信息,本具体应用实例确定nal头为5、slice头标明为该帧第一个slice的帧片段为视频码流可以进行无损分片的切割点。切割点的示意图如图2所示。

2.分片方案(即切割方案)规划

视频分片的具体方案需根据输入视频的帧率、转码任务参数中规定的输出视频目标帧率和输出视频目标图像组大小计算出每个视频分片(切片后每一段视频)的单位长度作为基础长度,再根据输入视频流的切割点分布确定最终的分片方案。

视频分片的基础长度要保证该视频分片可以在经过帧率上变换的转码之后,得到的输出视频片段至少包含一个完整的图像组,而分片方案引入冗余的目的是保证相邻的两个分片经过转码后可以完整包含输出视频的相邻图像组。

视频分片(切片后每一段视频)的单位长度l0可以通过输入视频帧率fpsin、输出视频目标帧率fpsout和输出视频目标图像组大小gopout计算获得:

设转码任务参数指定的每一个分片的参考长度为l,即转码任务参数中对切片后每一段视频长度进行限制的“目标长度”,则可以计算对于当前输入视频流,每个视频分片除去冗余的长度l为:

l=n×l0(2)

其中n为正整数。

最后,根据输入视频流的切割点分布规划分片方案:将输入视频的第1帧作为有效起点帧fstart,因为第一帧一定是idr帧,因此它也是切割起点帧fcut_start。接下来,定位fstart之后的第l帧,即fstart+l,作为该片段的有效终点帧fend,并确定fend之后的第一个切割点作为切割终点帧fcut_end,而fend之前的第一个切割点作为下一片段的切割起点fcut_start。下一个片段的有效起点为当前片段的fend。这样,fcut_start到fcut_end之间的视频帧便被划分到第一个视频分片,而下一个视频分片的fcut_start到这个分片的fcut_end之间的视频帧便是引入的两个分片的冗余。由新的fcut_start和fstart重复这个流程直到start+l比视频的总帧数要大时,令最后一帧为当前分片的fcut_end。至此,对一个输入视频的分片方案规划结束。分片方案规划的示意图如图3所示。

3.分布式转码实施、冗余截去与音视频复用

因本具体应用实例涉及的视频转码包含像素级操作,因此转码过程需要对输入视频进行解码,然后再进行处理和重新编码。

当输入视频被根据分片方案分割成不同的视频片段后,这些片段会被调度到不同的转码工作节点进行并行的转码。每个节点的操作流程如下:

首先,对输入视频片段进行解码,并在内存中对原始视频数据执行参数规定的包含帧率上变换的处理任务。由于视频片段的切分在idr帧处进行,因此输入视频片段可以无损失地进行解码和处理。

解码处理完成后,对结果视频帧序列进行冗余截去操作。冗余截去需要参考原始视频的分片方案。对于当前视频片段,分片方案规划的切割起点帧和有效起点帧之间的视频帧便是当前片段在前面需要截去的冗余。根据原始视频的帧率和输出视频的目标帧率,可以计算出结果帧序列需要在前方截去的冗余(即每一个视频片段计算转码后需要在片段开始位置截去的冗余)rstart为:

同理,结果帧序列需要在后方截去的冗余(每一个视频片段计算转码后需要在片段结束位置截去的冗余)rend为:

冗余截去方法如图4所示。

将截去冗余的视频帧序列编码成参数规定的编码格式,并收集所有分布式转码节点的处理结果,按照分片在输入视频中的时间顺序进行并排序并合并成一个码流。最后,将原始视频中提取的音轨和合并后的输出码流复用成转码参数要求的容器格式,即完成了适用于帧率上变换的分布式视频转码。

4.实施条件与结果

本实施例提出的适用于帧率上变换的分布式视频转码方法,针对编码格式为h.264、h.265的视频的帧率上变换转码实现,并采用电影《冲天火》的正版蓝光序列作为测试序列。测试序列的编码格式为h.264,帧率为24,转码输出参数为帧率50,图像组大小50,编码格式h.265。设定参考长度l为1500,即30倍输出视频图像组大小。

帧率上变换转码测试过程中,比较分片后视频片段解码得到的原始视频帧和输入视频解码后的原始视频帧,帧内的数据完全一致,实现了无损的分布式视频转码。

分析输出视频的帧结构,得到的是帧率50的h.265帧序列,且图像组的大小稳定在参数限定的50,实现了适用于帧率上变换的分布式视频转码。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1