发明内容
本申请实施例提供一种视频文件生成方法,解决现有生成多种格式视频文件时CPU的消耗较大,生成效率低下的问题。
本申请还提供了一种视频文件生成系统,用以保证上述方法在实际中的应用及实现。
本申请实施例公开了一种视频文件生成方法,所述方法包括下述步骤:
获取原始视频码流;
将所述原始视频码流分割成原始视频帧,各原始视频帧分别具有对应的时间戳;
将各原始视频帧以及对应的时间戳封装为待生成视频格式文件。
优选的是,所述原始视频码流为H.264码流。
优选的是,所述获取原始视频码流的步骤包括:
生成H.264码流并写入内存;
从内存中读取所述H.264码流。
优选的是,所述将所述原始视频码流分割成原始视频帧的步骤包括:
识别所述原始视频码流中每视频帧之间的分隔符;
按照所述分隔符将所述原始视频码流分割成原始视频帧。
优选的是,所述将各原始视频帧以及对应的时间戳封装为待生成视频格式文件的步骤包括:
从所述原始视频码流中读取视频基本信息,按照待生成视频格式将所述视频基本信息写入所述待生成视频格式文件的文件头;
按照时间戳的顺序将各原始视频帧写入所述待生成视频格式文件;
各原始视频帧写入结束后,写入所述待生成视频格式文件的文件尾。
优选的是,所述视频基本信息包括原始视频编码器版本的字段,以及视频的码率、长宽。
优选的是,所述待生成视频格式文件的格式包括avi格式,mkv格式,ts格式,mov格式,qt格式,mp4格式。
本申请实施例同时还公开一种视频文件生成系统,所述系统包括:
原始视频码流获取单元,用于获取原始视频码流;
视频码流分割单元,用于将所述原始视频码流分割成原始视频帧,各原始视频帧分别具有对应的时间戳;以及
视频文件生成单元,用于将各原始视频帧以及对应的时间戳封装为待生成视频格式文件。
优选的是,所述原始视频码流为H.264码流。
优选的是,所述原始视频码流获取单元包括:
原始视频编码器,用于生成H.264码流并写入内存;以及
原始视频码流读取模块,用于从内存中读取所述H.264码流。
优选的是,所述视频码流分割单元包括:
分隔符识别模块,用于识别所述原始视频码流中每视频帧之间的分隔符;以及
码流分割模块,用于按照所述分隔符将所述原始视频码流分割成原始视频帧。
优选的是,所述视频文件生成单元包括:
视频文件头写入模块,用于从所述原始视频码流中读取视频基本信息,按照待生成视频格式将所述视频基本信息写入所述待生成视频格式文件的文件头;
视频帧写入模块,用于按照时间戳的顺序将各原始视频帧写入所述待生成视频格式文件;
视频文件尾写入模块,用于各原始视频帧写入结束后,写入所述待生成视频格式文件的文件尾。
优选的是,所述视频基本信息包括原始视频编码器版本的字段,以及视频的码率、长宽。
优选的是,所述待生成视频格式文件的格式包括avi格式,mkv格式,ts格式,mov格式,qt格式,mp4格式。
与现有技术相比,本申请具有以下优点:
本申请实施例通过将原始视频码流分割后,封装成需要生成的视频文件格式,只需要一次编码就可以同步生成多个格式的视频文件,每增加一个视频文件格式,仅需要多写入一次文件,避免了不必要的编码和解码,降低了CPU的损耗,使得多格式视频文件的生成效率得到了很大提高。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请实施例的核心构思之一在于,将原始视频码流分割后,按照待生成的视频文件格式进行封装,同步生成多个格式的视频文件,大幅度提高多格式视频文件的生成效率。
图2示出了本申请实施例提供的视频文件生成方法的实现流程,详述如下:
在步骤S201中,获取原始视频码流;
在本申请实施例中,原始视频码流为H.264码流。
作为本申请的一个实施例,获取原始视频码流时,首先生成H.264码流并写入内存,然后从内存中读取H.264码流,以对原始视频码流进行后续处理。这样,原始视频码流仅在内存保留一次,可以降低系统损耗。
在步骤S202中,将原始视频码流分割成原始视频帧,各原始视频帧具有对应的时间戳;
在步骤S203中,将各原始视频帧以及对应的时间戳封装为待生成视频格式文件。
在本申请实施例中,为了确保生成的视频文件解码播放的时间正确性,在封装时将原始视频帧和对应的时间戳一起封装。
作为本申请的一个实施例,由于原始视频码流中每帧之间有分隔符,分割时按照分隔符来作分割。
图3示出了本申请实施例提供的原始视频码流分割的实现流程,详述如下:
在步骤S301中,识别原始视频码流中每视频帧之间的分隔符;
在步骤S302中,按照分隔符将原始视频码流分割成原始视频帧。
图4示出了本申请实施例中提供的待生成视频格式文件封装的实现流程,详述如下:
在步骤S401中,从原始视频码流中读取视频基本信息,按照待生成视频格式将视频基本信息写入待生成视频格式文件的文件头;
在本申请实施例中,视频基本信息为原始视频编码器版本的字段,以及视频的码率、长宽等信息。
在步骤S402中,按照时间戳的顺序将各原始视频帧写入待生成视频格式文件;
在步骤S403中,各原始视频帧写入结束后,写入待生成视频格式文件的文件尾。
在本申请实施例中,待生成视频格式文件的视频格式可以为avi格式、mkv格式、ts格式、mov格式、qt格式,或者mp4格式等。
由上述可知,通过本申请实施例的方法,只需要一次编码就可以同步生成多个格式的视频文件,每增加一个视频文件格式,仅需要多写入一次文件即可,避免了不必要的编码和解码。
以下对各种视频格式文件的封装细节进行分析。其中,斜体部分为视频帧,前面为视频文件头,后面为视频文件尾。
avi的结构为:
RIFF头,RIFF列表1,RIFF列表2(子列表,子列表...)
其中,媒体流格式的RIFF列表中,有一个RIFF子列表,保存了原始视频编码器版本的字段以及视频的长宽等信息。
保存媒体流数据的RIFF列表中有多个RIFF子列表,分别包含原始视频码流中的每一帧,以及每一帧的时间戳。
Mkv的结构为:
EBML,Segment(Track(Video(Block,Block...)))
其中,EBML为MKV的文件头,Segment段里面包含了所有数据,数据中保存了Track段的信息。
Video段中保存了原始视频编码器版本的字段以及视频的长宽等信息,以及多个Block,每一个Block分别包含原始视频码流中的每一帧,以及每一帧的时间戳。
ts的结构为:
ts包括了两种类型的数据段:PSI和PES。
结构为:PSI,PES,PES...
PSI为文件头,其中定义了原始视频编码器版本的字段以及视频的长宽等信息。
接下来的每一个PES分别包含原始视频码流中的每一帧,以及每一帧的时间戳。
mov、qt、mp4均是采用相同的QuickTime文件格式。
其结构为:ftyp段,mdat段,moov段(trak段(mdia段(stbl段,stbl段...)))
其中,ftyp段为文件头。
Mdat段中定义了随后moov段中的视频信息,包括原始视频编码器版本的字段以及视频的长宽等信息。
Moov段为视频数据段,其中包含了trak段。
Trak段中包含了media段。
Media段中为多个stbl段,每个stbl段分别包含原始视频码流中的每一帧,以及每一帧的时间戳。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
图5示出了本申请实施例提供的视频文件生成的装置的结构,为了便于说明,仅示出了与本申请实施例相关的部分。
原始视频码流获取单元11获取原始视频码流。
在本申请实施例中,原始视频码流为H.264码流。
如图6所示,作为本申请的一个实施例,原始视频码流获取单元11获取原始视频码流时,原始视频编码器111生成H.264码流并写入内存。原始视频码流读取模块112从内存中读取H.264码流。这样,原始视频码流仅在内存保留一次,可以降低系统损耗。
视频码流分割单元12将所述原始视频码流分割成原始视频帧,各原始视频帧分别具有对应的时间戳。
作为本申请的一个实施例,由于原始视频码流中每帧之间有分隔符,分割时按照分隔符来作分割。
如图7所示,分隔符识别模块121识别原始视频码流中每视频帧之间的分隔符。码流分割模块122按照分隔符将原始视频码流分割成原始视频帧。
视频文件生成单元13将各原始视频帧以及对应的时间戳封装为待生成视频格式文件。
作为本申请的一个实施例,如图8所示,在封装时,视频文件头写入模块131从原始视频码流中读取视频基本信息,按照待生成视频格式将视频基本信息写入待生成视频格式文件的文件头。
视频帧写入模块132按照时间戳的顺序将各原始视频帧写入待生成视频格式文件。
视频文件尾写入模块133在原始视频帧写入结束后,写入待生成视频格式文件的文件尾。
在本申请实施例中,视频基本信息为原始视频编码器版本的字段,以及视频的码率、长宽等信息。
在本申请实施例中,待生成视频格式文件的视频格式可以为avi格式、mkv格式、ts格式、mov格式、qt格式,或者mp4格式等。
在本申请实施例中,对各种格式视频帧的封装细节如上所述,不再赘述。
视频文件尾写入模块133在原始视频帧全部写入结束后,写入待生成视频文件格式的视频文件尾。
本申请实施例通过将原始视频码流分割后,封装成需要生成的视频文件格式,只需要一次编码就可以同步生成多个格式的视频文件,每增加一个视频文件格式,仅需要多写入一次文件,避免了不必要的编码和解码,降低了CPU的损耗,使得多格式视频文件的生成效率得到了很大提高。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上对本申请所提供的一种视频文件生成方法及系统进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。