一种多媒体文件拼接音视频唇音同步的方法
技术领域
本发明涉及通信及音视频拼接技术领域,特别涉及一种任意多媒体文件拼接音视频唇音同步的方法。
背景技术
随着网络通信技术的飞速发展,人们娱乐方式越来越多样化,网红直播、短视频、网剧、网络电影等基于多媒体的快时尚更是火爆现今网络。为了增强视频趣味性,用户会将两个或两个以上的多媒体文件拼接成一个,被拼接的多媒体文件格式多样、多媒体数据多样,拼接装置要确保各类媒体文件都能拼接且新生成的多媒体文件播放正常。
用于拼接的多媒体文件,常见的文件格式有MP4、MP3、FLV、AVI等,包含的多媒体数据可以同时有音视频或只有视频或只有音频。媒体文件的播放,由文件记录的流信息和媒体数据时间戳共同作用,播放器严格按时间戳标注的时间显示视频画面和音频声音,但实际拼接发现,若多媒体文件A和多媒体文件B进行拼接,若多媒体文件A只含音频或只含视频,多媒体文件B包含音视频,进行拼接生成媒体文件C,文件A的媒体数据位于多媒体文件C的前段,播放多媒体文件C出现音视频不同步问题。鉴于多媒体文件的多样性,确保拼接生成的形式不一的文件均能正常播放成为必须要解决的问题。
发明内容
鉴于上述问题,提供一种克服上述问题或者至少部分地解决上述问题的一种多媒体文件拼接音视频唇音同步的方法。
一种多媒体文件拼接音视频唇音同步的方法,包括:
S100.获取待拼接的多媒体文件,确定待拼接的多媒体文件拼接顺序;
S200.获取待拼接的多媒体文件的基础信息,根据待拼接的多媒体文件的基础信息,创建目标多媒体文件;
S300.对当前待拼接多媒体文件顺序进行判断,若当前待拼接多媒体文件顺序不为最后一个文件时,对待拼接多媒体文件类型进行判定,根据不同多媒体文件类型,采用第一预设规则进行处理,将处理后的音视频数据加入到目标多媒体文件;
S400.对当前待拼接多媒体文件顺序进行判断,若当前待拼接多媒体文件顺序为最后一个文件时,采用第二预设规则进行处理,将处理后的音视频数据加入到目标多媒体文件;
S500.当最后一个多媒体文件处理完成加入到目标多媒体文件后,对目标多媒体文件的文件头进行更新,对目标多媒体文件的文件尾进行重新写入。
进一步地,S200中,待拼接的多媒体文件的基础信息至少包括:音视频流条数、视频分辨率、音视频采样率、每帧音频包含样本数、音视频时间基。
进一步地,S300中,对待拼接多媒体文件类型进行判定,多媒体文件类型包括:只有音频、只有视频和同时含有音视频。
进一步地,第一预设规则为:若待拼接多媒体文件同时包含音视频流,记录音视频帧的显示时间分别为T1、T2,完成对目标多媒体文件数据的写入后,比对音视频最后一帧的显示时间值,若当音频显示时间小于视频显示时间,且两者差值大于预设阈值时,写入音频静音包,直到两者显示时间的差值小于预设阈值,调整记录音频显示时间T1的值;当视频显示时间小于音频显示时间时,直接调整记录视频显示时间T2的值。
进一步地,第一预设规则还包括:若待拼接多媒体文件只含音频流,记录音频帧的显示时间T1,完成音频数据的写入后,创造一帧编码为I帧的黑色的视频数据,写入目标多媒体文件,调整记录视频帧的显示时间T2,使T2等于T1。
进一步地,第一预设规则还包括:若待拼接多媒体文件只含视频流,记录视频帧的显示时间T2,完成视频数据的写入后,持续造音频静音数据,编码后写入目标多媒体文件,新造的音频包按规律标注显示时间,待音频的显示时间T1与视频显示时间T2的差值小于预设阈值后,停止静音包填充。
进一步地,S400中的第二预设规则为:对最后一个多媒体文件进行编解码,根据前一待拼接多媒体文件音频的显示时间与视频显示时间,重新为编码生成的媒体数据赋值音视频时间戳。
进一步地,S300包括:
S301.对待拼接多媒体文件进行检测,为每条媒体流创建对应的解码器,记录媒体流条数和媒体流类型;
S302.从待拼接多媒体文件读取一帧完整的媒体数据,每次读取的媒体数据显示时间遵循单调递增规律,根据帧参数判断帧类型;
S303.利用待拼接多媒体文件中音视频解码器进行解码,得到音视频原始数据,调用目标多媒体文件中的音视频编码器,对音视频原始数据进行编码得到新的音视频帧,为新生成的音视频帧重新赋值时间戳;
S304.记录音视频流显示时间分别为T1和T2,比较T1和T2大小,若待拼接多媒体文件同时包含音视频流,记录音视频帧的显示时间分别为T1、T2,完成对目标多媒体文件数据的写入后,比对音视频最后一帧的显示时间值,若当音频显示时间小于视频显示时间,且两者差值大于预设阈值时,写入音频静音包,直到两者显示时间的差值小于预设阈值,调整记录音频显示时间T1的值;当视频显示时间小于音频显示时间时,直接调整记录视频显示时间T2的值;若待拼接多媒体文件只含音频流,记录音频帧的显示时间T1,完成音频数据的写入后,创造一帧编码为I帧的黑色的视频数据,写入目标多媒体文件,调整记录视频帧的显示时间T2,使T2等于T1;若待拼接多媒体文件只含视频流,记录视频帧的显示时间T2,完成视频数据的写入后,持续造音频静音数据,编码后写入目标多媒体文件,新造的音频包按规律标注显示时间,待音频的显示时间T1与视频显示时间T2的差值小于预设阈值后,停止静音包填充。
进一步地,S400包括:
S401.对待拼接多媒体文件进行检测,读取一帧完整的媒体数据,根据帧参数判断帧类型,每次读取的同一条媒体流显示时间遵循单调递增规律。
S402:调用最后一个多媒体文件中解码器,分别解码读取的各类媒体数据,最后一个多媒体文件既可以只包含音频流,也可以只包含视频流,还可以同时包含音视频流;解码生成原始数据,视频数据进行格式和分辨率转换,音频数据进行样本重组,再调用目标多媒体文件中编码器进行编码,生成压缩后的媒体数据。
S403:在最后一个多媒体文件前一个多媒体文件音视频时间T1、T2基础上,为编码生成的媒体数据赋值时间戳,音频时间戳数据值依照目标多媒体文件中音频采样率、每帧音频样本数、当前帧序号和T1计算得到,视频时间戳数据值依照目标多媒体文件中视频帧率、当前帧序号和T2计算得到,时间戳计算要注意时间基的转换,将媒体数据写入目标多媒体文件。
本发明的有益效果是:
本发明公开了一种多媒体文件拼接音视频唇音同步的方法,通过对当前待拼接的多媒体文件顺序和文件类型,采用不同预设规则进行处理,通过待拼接的多媒体文件音视频时间戳校对,媒体数据合理填充,确保音视频唇音同步播放。此方法逻辑简单,易实现,实用性强,效果好,可行性和可靠性高,适用范围广,适用于所有主流格式的文件拼接。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本发明实施例1中,一种多媒体文件拼接音视频唇音同步的方法流程图;
图2为本发明实施例2中,非最后一个待拼接多媒体文件FstSrcFile拼接流程图;
图3为本发明实施例2中,最后一个待拼接多媒体文件SecSrcFile拼接流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了解决现有技术中多媒体文件拼接音视频唇音可能不同步,不同类型多媒体文件难以拼接的问题。本发明实施例提供了一种任意多媒体文件拼接音视频文件同步的方法。
实施例1
本实施例公开了一种多媒体文件拼接音视频唇音同步的方法,包括:
S100.获取待拼接的多媒体文件,确定待拼接的多媒体文件拼接顺序。具体的,用户可以指定任意格式、任意内容的多媒体文件和文件拼接顺序,拼接装置根据指定的顺序对多媒体文件拼接,待拼接的多媒体文件个数不少于2个。
S200.获取待拼接的多媒体文件的基础信息,根据待拼接的多媒体文件的基础信息,创建目标多媒体文件。
具体的,S200中,待拼接的多媒体文件的基础信息至少包括:音视频流条数、视频分辨率、音频采样率、每帧音频包含样本数、音视频时间基。
S300.对当前待拼接多媒体文件顺序进行判断,若当前待拼接多媒体文件顺序不为最后一个文件时,对待拼接多媒体文件类型进行判定,根据不同多媒体文件类型,采用第一预设规则进行处理,将处理后的音视频数据加入到目标多媒体文件。
在本实施例中,S300中,对待拼接多媒体文件类型进行判定,多媒体文件类型包括:只有音频、只有视频和同时含有音视频。
在一些优选实施例中,第一预设规则为:若待拼接多媒体文件同时包含音视频流,记录音视频帧的显示时间分别为T1、T2,完成对目标多媒体文件数据的写入后,比对音视频最后一帧的显示时间值,若当音频显示时间小于视频显示时间,且两者差值大于预设阈值时,写入音频静音包,直到两者显示时间的差值小于预设阈值,调整记录音频显示时间T1的值;当视频显示时间小于音频显示时间时,直接调整记录视频显示时间T2的值。
在一些优选实施例中,第一预设规则还包括:若待拼接多媒体文件只含音频流,记录音频帧的显示时间T1,完成音频数据的写入后,创造一帧编码为I帧的黑色的视频数据,写入目标多媒体文件,调整记录视频帧的显示时间T2,使T2等于T1。
在一些优选实施例中,第一预设规则还包括:若待拼接多媒体文件只含视频流,记录视频帧的显示时间T2,完成视频数据的写入后,持续造音频静音数据,编码后写入目标多媒体文件,新造的音频包按规律标注显示时间,待音频的显示时间T1与视频显示时间T2的差值小于预设阈值后,停止静音包填充。
在一些优选实施例中,S300具体包括:
S301.对待拼接多媒体文件进行检测,为每条媒体流创建对应的解码器,记录媒体流条数和媒体流类型;
S302.从待拼接多媒体文件读取一帧完整的媒体数据,每次读取的媒体数据显示时间遵循单调递增规律,根据帧参数判断帧类型;
S303.利用待拼接多媒体文件中音视频解码器进行解码,得到音视频原始数据,调用目标多媒体文件中的音视频编码器,对音视频原始数据进行编码得到新的音视频帧,为新生成的音视频帧重新赋值时间戳;
S304.记录音视频流显示时间分别为T1和T2,比较T1和T2大小,若待拼接多媒体文件同时包含音视频流,记录音视频帧的显示时间分别为T1、T2,完成对目标多媒体文件数据的写入后,比对音视频最后一帧的显示时间值,若当音频显示时间小于视频显示时间,且两者差值大于预设阈值时,写入音频静音包,直到两者显示时间的差值小于预设阈值,调整记录音频显示时间T1的值;当视频显示时间小于音频显示时间时,直接调整记录视频显示时间T2的值;若待拼接多媒体文件只含音频流,记录音频帧的显示时间T1,完成音频数据的写入后,创造一帧编码为I帧的黑色的视频数据,写入目标多媒体文件,调整记录视频帧的显示时间T2,使T2等于T1;若待拼接多媒体文件只含视频流,记录视频帧的显示时间T2,完成视频数据的写入后,持续造音频静音数据,编码后写入目标多媒体文件,新造的音频包按规律标注显示时间,待音频的显示时间T1与视频显示时间T2的差值小于预设阈值后,停止静音包填充。
S400.对当前待拼接多媒体文件顺序进行判断,若当前待拼接多媒体文件顺序为最后一个文件时,采用第二预设规则进行处理,将处理后的音视频数据加入到目标多媒体文件。
在一些优选实施例中,S400中的第二预设规则为:对最后一个多媒体文件进行编解码,根据前一待拼接多媒体文件音频的显示时间与视频显示时间,重新为编码生成的媒体数据赋值音视频时间戳。
在一些优选实施例中,S400包括:
S401.对待拼接多媒体文件进行检测,读取一帧完整的媒体数据,根据帧参数判断帧类型,每次读取的同一条媒体流显示时间遵循单调递增规律。
S402:调用最后一个多媒体文件中解码器,分别解码读取的各类媒体数据,最后一个多媒体文件既可以只包含音频流,也可以只包含视频流,还可以同时包含音视频流;解码生成原始数据,视频数据进行格式和分辨率转换,音频数据进行样本重组,再调用目标多媒体文件中编码器进行编码,生成压缩后的媒体数据。
S403:在最后一个多媒体文件前一个多媒体文件音视频时间T1、T2基础上,为编码生成的媒体数据赋值时间戳,音频时间戳数据值依照目标多媒体文件中音频采样率、每帧音频样本数、当前帧序号和T1计算得到,视频时间戳数据值依照目标多媒体文件中视频帧率、当前帧序号和T2计算得到,时间戳计算要注意时间基的转换,将媒体数据写入目标多媒体文件。
S500.当最后一个多媒体文件处理完成加入到目标多媒体文件后,对目标多媒体文件的文件头进行更新,对目标多媒体文件的文件尾进行重新写入。
本实施例公开了一种多媒体文件拼接音视频唇音同步的方法,通过对当前待拼接的多媒体文件顺序和文件类型,采用不同预设规则进行处理,通过待拼接的多媒体文件音视频时间戳校对,媒体数据合理填充,确保音视频唇音同步播放。此方法逻辑简单,易实现,实用性强,效果好,可行性和可靠性高,适用范围广,适用于所有主流格式的文件拼接。
实施例2
为了更好理解本发明,下面举一个更具体的实施例对本发明中公开的一种多媒体文件拼接音视频唇音同步的方法进行描述。
下面以2个多媒体文件拼接进行举例,例如,用户向拼接装置指定待拼接的多媒体文件FstSrcFile和SecSrcFile,同时指定文件拼接顺序。如将FstSrcFile为音频文件A.mp3文件,SecSrcFile为音视频文件B.mp4,将A.mp3文件和B.mp4文件拼接起来,A.mp3文件在前,B.mp4文件在后。
拼接装置检查A.mp3和B.mp4文件数据的正确性,文件无异常,获取A.mp3和B.mp4基础信息,主要包含音视频流条数、视频分辨率、音频采样率SampleRate、每帧音频包含样本数Nums、音视频时间基等,同时创建音视频解码器。拼接装置依据A.mp3和B.mp4基础信息创建目标多媒体文件C.mp4,同时创建C.mp4音视频流的编码器。
如图2,拼接装置对指定的第一个多媒体文件A.mp3数据检测无误后,确定文件A.mp3并非最后一个文件,记录音频时间基,为包含的音频流创建解码器,记录媒体流条数为l,类型是音频。类似的,若用户指定的第一个文件为其它格式,此处为每条媒体流创建对应的解码器,记录媒体流条数和媒体流类型。
拼接装置从FstSrcFile读取一帧完整的媒体数据,每次读取的媒体数据显示时间遵循单调递增规律,根据帧参数判断帧类型,A.mp3文件只包含音频流,读出的媒体数据均为音频帧。类似的,若用户指定的第一个文件同时包含音视频流,拼接装置每次读取的媒体数据可能是视频帧,也可能是音频帧,但同类型的媒体数据,其显示时间单调递增。
拼接装置调用A.mp3中音频解码器解码音频帧,得到音频pcm原始数据,A.mp3中音频格式为mp3,目标文件C.mp4中音频格式为AAC,不同编码格式的音频帧,每帧包含的采样样本数不同。解码得到的pcm数据重新采样组合样本数,调用C.mp4中的音频编码器,编码得到新的音频帧,为新生成的音频帧重新赋值时间戳,数据值依照AAC音频采样率、AAC每帧音频样本数和当前帧序号计算得到,完成上述操作,将音频帧写入C.mp4文件。类似的,若用户指定的第一个文件包含视频流,视频解码为YUV原始数据,对YUV进行分布格式和分辨率转换,以满足C.mp4中视频编码器需求,视频编码后,为视频帧重新赋值时间戳,数据值依照C.mp4中视频帧率和当前帧序号计算得到,完成上述操作,将视频帧写入C.mp4文件。
拼接装置操作第一个待剪辑文件中媒体数据时,会分别记录每条流的显示时间,A.mp3中只有音频流,只持续记录音频的显示时间T1,视频的显示时间T2可理解为0。类似的,若用户指定的第一个文件同时包含音视频流,拼接装置持续记录音视频的显示时间T1、T2。待所有媒体数据读取结束后,比较T1与T2大小。
阈值Threshold的值可以直接选取C.mp4中音频每帧时长,例如AAC音频每帧时长为20毫秒。以每帧音频时长作为阈值,能将音视频唇音同步误差控制在十毫秒级别,人耳无法区分。
拼接装置比较T1与T2大小,差值大于阈值Threshold需进行时间戳同步操作。A.mp3只含音频,鉴于播放器对视频流苛刻性较音频流低,且每帧视频帧占用磁盘空间大,只需为C.mp4填充一帧自造的视频I帧,视频画面为黑色,填充的视频帧时间戳直接赋值0,记录的显示时间T2等于音频显示时间T1。类似的,若用户指定的第一个文件只包含视频流,鉴于播放器对音频流苛刻性高,且每帧音频帧占用磁盘空间小,需要为C.mp4持续填充静音包,填充的音频帧时间戳赋值同S203,严格单调递增,直到音频显示时间T1与视频显示时间T2差值小于阈值Threshold;若用户指定的第一个文件同时包含音视频流,当视频显示时间T2小于音频显示时间T1时,不用填充视频数据,直接令T2等于T1,当视频显示时间T2大于音频显示时间T1时,为C.mp4持续填充静音包,直到音频显示时间T1与视频显示时间T2差值小于阈值Threshold。
如图3,拼接装置从B.mp4读取一帧完整的媒体数据,确定文件B.mp4为最后一个文件,根据帧参数判断帧类型,每次读取的同一条媒体流显示时间遵循单调递增规律。
拼接装置调用B.mp4中解码器,分别解码读取的各类媒体数据,B.mp4既可以只包含音频流,也可以只包含视频流,还可以同时包含音视频流。解码生成原始数据,视频数据进行格式和分辨率转换,音频数据进行样本重采样和重组,再调用C.mp4中编码器进行编码,生成压缩后的媒体数据。
拼接装置在T1、T2基础上,为编码生成的媒体数据赋值时间戳,音频时间戳数据值依照C.mp4中AAC音频采样率、AAC每帧音频样本数、当前帧序号和T1计算得到,视频时间戳数据值依照C.mp4中视频帧率、当前帧序号和T2计算得到,时间戳计算要注意时间基的转换。完成上述操作,再将媒体数据写入C.mp4。
B.mp4所有多媒体数据写入C.mp4后,更新C.mp4的文件头,写入文件尾,达到将A.MP3和B.MP4拼接成C.MP4目的,并且保证音视频唇音同步。
可以理解的,若待拼接多媒体文件大于2个以上,例如,将A1.mp3、B1.mp4和C1.mp4拼接成D1.mp4,前面多媒体文件A1.mp3、B1.mp4与上述A.mp3处理方式相同,C1.mp4与上述B.mp4处理方式相同,再此不再进行赘述。
本实施例公开了将音频文件和音视频文件拼接成音视频文件的方法,通过对当前待拼接的多媒体文件顺序和文件类型,采用不同预设规则进行处理,通过待拼接的多媒体文件音视频时间戳校对,媒体数据合理填充,确保音视频唇音同步播放。此方法逻辑简单,易实现,实用性强,效果好,可行性和可靠性高,适用范围广,适用于所有主流格式的文件拼接。
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。
结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。该ASIC可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。
对于软件实现,本申请中描述的技术可用执行本申请所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。