一种视频裁剪方法及装置与流程

文档序号:15079281发布日期:2018-08-03 11:43阅读:159来源:国知局

本申请涉及视频处理领域,特别是涉及一种视频裁剪方法及装置。



背景技术:

实际应用中,需要对视频文件包含的原始视频数据和原始音频数据进行裁剪,即从分别从原始视频数据和原始音频数据中,获取预设起始时间点到预设截止时间点所对应的目标视频数据与目标音频数据。并将裁剪后的目标视频数据和目标音频数据写入目标视频文件。

为了实现目标视频文件中目标视频数据和目标音频数据可以正常播放,需要目标视频中的第一帧为保留完整画面的视频帧,目前,对原始视频数据进行裁剪时,根据预设起始时间点,确定原始视频数据中距离该预设起始时间点所对应的视频帧最近的关键视频帧,获取从该关键视频帧到原始视频数据中预设截止时间点对应的视频帧所组成的目标视频数据,并将目标视频数据写入目标视频文件。

而所需的目标视频数据为:原始视频数据中从预设起始时间点对应的视频帧,到,预设截止时间点对应的视频帧的视频数据,因此,实际得到的目标视频数据中的视频帧数与所需的目标视频数据中的视频帧数存在误差,即目前对原始视频数据进行裁剪的方法,存在所得到的目标视频数据在视频帧数上精确性低的问题。



技术实现要素:

基于此,本申请提出了一种视频裁剪方法,用以在不影响对待裁剪视频数据的裁剪速度的前提下,提高裁剪的精确性。

本申请还提供了一种视频裁剪装置,用以保证上述方法在实际中的实现及应用。

本申请提供的技术方案为:

本申请公开了一种视频的裁剪方法,该方法包括:

获取对待裁剪视频数据进行裁剪的预设起始时间点与预设截止时间点;

确定所述预设起始时间点在所述待裁剪视频数据中对应的起始视频帧;

若所述起始视频帧为非关键帧时,分别为所述起始视频帧到中间视频帧的每个视频帧,确定所述视频帧经解码后得到的具有完整视频画面的目标视频帧;所述中间视频帧为:位于所述起始视频帧之后目标关键视频帧之前,且,与所述目标关键视频帧相邻的视频帧;所述目标关键视频帧为:位于所述起始视频帧之后,且距离所述起始视频帧最近的关键视频帧;

获取从所述目标关键视频帧到所述预设截止时间点对应的截止视频帧的视频帧;

依次将编码后的每个目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入目标视频文件。

其中,所述确定所述视频帧经解码后得到的具有完整视频画面的目标视频帧,包括:

获取从起始关键视频帧到所述起始视频帧的视频帧;所述起始关键视频帧为:位于所述起始视频帧之前,且,距离所述起始视频帧最近的关键视频帧;

调用解码器,使得解码器依据从所述起始关键帧到所述视频帧的视频帧,对所述视频帧进行解码,得到所述视频帧对应的具有完整视频画面的目标视频帧。

其中,所述依次将编码后的每个目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入目标视频文件,包括:

依次对每个所述目标视频帧进行编码;

依次将编码后的目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入所述目标视频文件。

其中,在所述调用解码器之后,还包括:

对所述目标视频帧进行渲染;

将渲染后的目标视频帧发送至编码器,以便所述编码器对所述渲染后的目标视频帧进行编码。

其中,所述获取从起始关键视频帧到起始视频帧的视频帧,包括:

获取预设参数;

根据所述预设参数,将指针跳转到所述起始关键视频帧;

依次获取从所述起始关键视频帧到起始视频帧的视频帧。

其中,所述方法还包括:

获取待裁剪音频数据;

从所述待裁剪音频数据中,获取从所述预设起始时间点对应的起始音频点,到,所述预设截止时间点对应的截止音频点的音频数据;

将所述音频数据写入所述目标视频文件。

本申请还提供了一种视频的裁剪装置,该装置包括:

第一获取单元,用于获取对待裁剪视频数据进行裁剪的预设起始时间点与预设截止时间点;

第一确定单元,用于确定所述预设起始时间点在所述待裁剪视频数据中对应的起始视频帧;

第二确定单元,用于若所述起始视频帧为非关键帧时,分别为所述起始视频帧到中间视频帧的每个视频帧,确定所述视频帧经解码后得到的具有完整视频画面的目标视频帧;所述中间视频帧为:位于所述起始视频帧之后目标关键视频帧之前,且,与所述目标关键视频帧相邻的视频帧;所述目标关键视频帧为:位于所述起始视频帧之后,且距离所述起始视频帧最近的关键视频帧;

第二获取单元,用于获取从所述目标关键视频帧到所述预设截止时间点对应的截止视频帧的视频帧;

第一写入单元,用于依次将编码后的每个目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入目标视频文件。

其中,所述第二确定单元具体用于确定所述视频帧经解码后得到的具有完整视频画面的目标视频帧时,包括:

获取子单元,用于获取从起始关键视频帧到所述起始视频帧的视频帧;所述起始关键视频帧为:位于所述起始视频帧之前,且,距离所述起始视频帧最近的关键视频帧;

解码子单元,用于调用解码器,使得解码器依据从所述起始关键帧到所述视频帧的视频帧,对所述视频帧进行解码,得到所述视频帧对应的具有完整视频画面的目标视频帧。

其中,所述第一写入单元包括:

编码子单元,用于依次对每个所述目标视频帧进行编码;

写入子单元,用于依次将编码后的目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入所述目标视频文件。

其中,所述装置还包括:

渲染单元,用于在解码子单元对所述视频帧进行解码后,对解码后的目标视频帧进行渲染;

发送单元,用于将渲染后的目标视频帧发送至编码器,以便所述编码器对所述渲染后的目标视频帧进行编码。

其中,所述获取子单元包括:

第一获取模块,用于获取预设参数;

跳转模块,用于根据所述预设参数,将指针跳转到所述起始关键视频帧;

第二获取模块,用于依次获取从所述起始关键视频帧到起始视频帧的视频帧。

其中,所述装置还包括:

第三获取单元,用于获取待裁剪音频数据;

第四获取单元,用于从所述待裁剪音频数据中,获取从所述预设起始时间点对应的起始音频点,到,所述预设截止时间点对应的截止音频点的音频数据;

第二写入单元,用于将所述音频数据写入所述目标视频文件。

本申请的有益效果为:

在本申请实施例中,当待裁剪视频数据中,预设起始时间点对应的起始视频帧为非关键帧时,将待裁剪视频数据中从起始视频帧到预设截止时间点对应的截止视频帧,分为两部分,其中,一部分为:从起始视频帧到中间视频帧每个视频帧,另一部分为:从与中间帧相邻且位于中间帧之后的起始关键帧到截止视频帧的每个视频帧;对于前者,通过解码获取每个视频帧对应的具有完整视频画面的目标视频帧;并将目标视频帧与后者对应的视频帧写入目标视频文件中,由于目标视频帧为具有完整视频画面的视频帧,可以保证目标视频文件中的目标视频能够正常播放,对于后者对应的视频帧直接写入目标视频文件,可以保证对待裁剪视频数据的裁剪速度,并且,本申请实施例中写入目标视频文件的视频帧数目为:从起始视频帧到截止视频帧的视频帧数目。因此,本申请实施例在保证目标视频文件中的视频可以正常播放的同时,既保证了对待裁剪视频数据的裁剪速度,又保证对待裁剪视频数据裁剪的精确性。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请中一种视频的裁剪方法实施例的流程图;

图2为本申请中一种视频的裁剪装置实施例的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例是在安卓系统所提供的硬件编解码的基础上,通过调用安卓系统所提供的软件库以及硬件模块,实现视频裁剪。在本申请实施例中,将待裁剪视频数据中,预设起始时间点对应的视频帧称为起始视频帧,将位于该起始视频帧之后,且距离该起始视频帧最近的关键帧称为目标关键视频帧,将位于该目标关键视频帧之前,且与该目标关键视频帧相邻的视频帧称为中间视频帧。

在本申请实施例中,将待裁剪视频数据分为两部分,一部分为:从起始视频帧到中间视频帧的第一视频帧,另一部分为:从目标关键视频帧到截止视频帧的第二视频帧;通过对每个第一视频帧解码,得到每个第一视频帧对应的解码后的视频帧,其中,每个第一视频帧所对应的解码后的视频帧是具有完整视频画面的第一目标视频帧,并依次将每个第一目标视频帧与每个第二视频帧写入目标视频文件。由于第一目标视频帧为解码后得到的具有完整视频画面的视频帧,可以保证目标视频文件中的第一目标视频帧能够正常播放,对于第二视频帧直接写入目标视频文件,可以保证对待裁剪视频数据的裁剪速度,并且,本申请实施例中写入目标视频文件中的目标视频的视频帧数为:从起始视频帧到截止视频帧的视频帧数。因此,本申请实施例在保证目标视频文件中的视频可以正常播放的同时,既保证了对待裁剪视频数据的裁剪速度,又达到对待裁剪视频数据裁剪的精确性。

参考图1,示出了本申请中一种视频裁剪方法实施例的流程图,该方法实施例可以包括:

步骤101:从待裁剪视频文件中获取待裁剪视频数据。

在本实施例中,打开保存有待裁剪视频数据和待裁剪音频数据的本地文件后,在该本地文件中待裁剪视频数据对应视频轨道序号,以及待裁剪音频数据对应音频轨道序号。具体的,在本步骤中,可以通过调用MediaExtractor类,该类是通过待裁剪视频文件中约定的数据组装格式,通过读取待裁剪视频文件中的不同文件块,得到待裁剪视频数据和待裁剪音频数据,并获取对待裁剪视频数据进行裁剪的预设起始时间点与预设截止时间点。

步骤101的目的为:获取对待裁剪视频数据进行裁剪的预设起始时间点与预设截止时间点。

步骤102:根据预设起始裁剪时间点与预设截止时间点,判断该待裁剪视频数据中预设起始时间点对应的起始视频帧是否为关键帧,若不是,则执行步骤103,若是,则将起始视频帧确定为当前视频帧,接着执行步骤114。

在获取到待裁剪视频数据后,接着,在本步骤中,根据用户对待裁剪视频进行裁剪的预设起始时间点与预设截止时间点,获取该待裁剪视频数据中预设起始时间点对应的视频帧,为了描述方便,在本实施例中,将待裁剪视频数据中预设起始时间点对应的视频帧称为起始视频帧,将待裁剪视频数据中预设截止时间点对应的视频帧称为截止视频帧。在获取待裁剪视频数据中的起始视频帧后,接着,判断该起始视频帧是否为关键帧,如果该起始视频帧不为关键帧,则执行步骤103的动作,如果该起始视频帧为关键帧,则执行步骤115的动作。

步骤102的目的为:确定预设起始时间点在待裁剪视频数据中对应的起始视频帧,并判断该起始视频帧是否为关键视频帧。

步骤103:获取用户输入的预设参数,并将文件指针根据该预设参数,跳转到位于起始视频帧之前,且,距离该起始视频帧最近的起始关键帧。

在判断得到起始视频帧为非关键帧时,执行本步骤的动作,具体的,在本步骤中,获取用户输入的预设参数,并调用MediaExtractor类,其中,该MediaExtractor类中封装有定位方法,该MediaExtractor类通过其中的定位方法,使得该定位方法基于该预设参数,将文件指针跳转到位于起始视频帧之前,且,距离起始视频帧最近的关键帧,为了描述方便,本实施例将位于起始视频帧之前,且距离起始视频帧最近的关键帧称为起始关键帧。

步骤104:获取当前视频帧。

通过MediaExtractor类中的定位算法定位到起始关键帧后,接着,在本步骤中,获取当前MediaExtractor类中的文件指针定位到的视频帧,为了描述方便,并将当前MediaExtractor类中的文件指针定位到的视频帧称为当前视频帧。

步骤105:对获取的当前视频帧进行解码。

在获取到当前视频帧后,接着,在本步骤中,将该视频帧输入编码器的输入缓存区,以便该编码器对该视频帧进行解码。其中,在本实施例中,编码器对视频帧进行解码可以采用异步解码,并将解码后的视频帧输入解码器的输出缓存区。

步骤106:判断解码器的输出缓存区是否存在解码后的当前视频帧,若不存在,则执行步骤105,直至解码器的输出缓存区存在解码后的当前视频帧,则执行步骤107。

在将获取的当前视频帧输入到解码器的输入缓存区后,接着,在本步骤中,判断解码器的输出缓存区中是否存在解码后的当前视频帧,若不存在解码后的当前视频帧,则返回步骤105,直至解码器的输出缓存区中存在解码后的当前视频帧时,则执行步骤107的动作。

步骤107:判断该解码后的当前视频帧的时间戳是否不小于起始视频帧的时间戳,若小于,则执行步骤110,若不小于,则执行步骤108。

在本实施例中,待裁剪视频数据中的每个视频帧都对应有表征在待裁剪视频数据中播放先后顺序的时间戳,其中,视频帧的时间戳越大表明该视频帧在待裁剪视频数据中的播放顺序越靠后,同理,相反,则该视频帧在待裁剪视频数据中的播放顺序越靠前。在解码器的输出缓存区中存在解码后的当前视频帧时,该解码后的视频帧具有完整视频画面的视频帧,接着,在本步骤中,从解码器的输出缓存区中读取解码后的当前视频帧,并判断该解码后的当前视频帧的时间戳是否不小于起始视频帧的时间戳,若解码后的当前视频帧的时间戳小于起始视频帧的时间戳,则执行步骤110的动作,若解码后的当前视频帧的时间戳不小于起始视频帧的时间戳,则执行步骤108的动作。

上述步骤103~步骤107的目的为:若起始视频帧为非关键帧时,分别为起始视频帧到中间视频帧的每个视频帧,确定该视频帧对应的具有完整视频画面的目标视频帧。

步骤108:对该解码后的当前视频帧进行渲染。

当解码后的当前视频帧的时间戳不小于起始视频帧的时间戳时,执行本步骤的动作,具体的,在本步骤中,调用OpengLES对该解码后的当前视频帧进行渲染,其中,OpenglES和GPU进行通信的一种开源算法,将复杂图形,或者纹理数据传输到GPU,然后GPU将数据栅格化,并显示到屏幕上,在本实施例中,可以将数据渲染到GPU的缓存区中,而不必在屏幕显示出来。

步骤109:对该解码后的视频帧进行编码,并将该编码后的当前视频帧写入目标视频文件。

在将解码的当前视频帧进行渲染后,接着,在本步骤中,调用编码器对该解码后的当前视频帧进行编码,并调用MediaMuxer类,其中,该MediaMuxer类中封装了视频文件写入的格式,比如将渲染好的视频从上面的CPU缓存区拷贝下来,然后利用视频编码的压缩算法,将视频压缩处理,同时将压缩后的数据,再通过一定的文件格式规范写入文件中。

需要说明的是,在本实施例中,解码后的当前视频帧为具有完整视频画面的视频数据帧,在本步骤中,对该解码后的当前视频帧进行编码后,所得到的编码后的当前视频帧没有被压缩,在实际播放时,对该编码后的当前视频帧解码后就可以得到具有完整视频画面的视频帧。

步骤110:获取下一视频帧,并将获取的下一视频帧确定为当前视频帧,接着,执行步骤111。

在将编码后的当前视频帧写入目标视频文件后,接着,在本步骤中,通过MediaExtractor类获取下一视频帧,并将获取的下一视频帧确定为当前视频帧,接着,执行步骤111的动作。

步骤111:判断当前视频帧的时间戳是否不小于目标关键视频帧的时间戳,若不小于,则执行步骤112,若小于,则执行步骤105。

在本实施例中,为了描述方便,将位于起始视频帧之后,且距离起始视频帧最近的关键帧称为目标关键帧。在获取了下一个视频帧,并将获取的视频帧作为当前视频帧后,接着,在本步骤中,判断当前视频帧的时间戳是否不小于目标关键视频帧的时间戳。若本步骤判断得到当前视频帧的时间戳不小于目标关键帧的时间戳时,则执行步骤112的动作,若当前视频帧的时间戳小于目标关键视频帧的时间戳,则返回步骤105。

步骤112:将当前视频帧写入目标视频文件。

在当前视频帧为目标视频帧时,执行本步骤的动作,具体的,在本步骤中,调用MediaMuxer类,使得该MediaMuxer类将当前视频帧写入目标视频文件。

步骤113:获取下一视频帧,并将获取的下一视频帧确定为当前视频帧,接着,执行步骤114。

在将当前视频帧写入目标视频文件后,接着,在本步骤中,通过MediaExtractor类获取下一视频帧,并将获取的下一视频帧确定为当前视频帧,接着,执行步骤114的动作。

步骤114:判断当前视频帧的时间戳是否不大于截止视频帧的时间戳,若不大于,则执行步骤112,若大于,则执行步骤115。

在获取当前视频帧后,接着,在本步骤中,判断当前视频帧的时间戳是否小于或等于截止视频帧的时间戳,如果当前视频帧的时间戳小于或等于截止视频帧的时间戳,则执行步骤112的动作,否则,执行步骤115的动作。

步骤115:从本地文件中获取待裁剪音频数据,并从待裁剪音频数据中,确定预设起始时间点对应的起始音频点到预设截止时间点对应的截止音频点的音频数据,写入目标文件。

在将截止视频帧写入目标视频文件后,接着,在本步骤中,调用MediaExtractor类,从本地文件中获取待裁剪音频数据的轨道序号,通过MediaExtractor类获取待裁剪音频数据,从待裁剪音频数据中裁剪预设时间段的音频数据,为了描述方便,本实施例中,将待裁剪音频数据中,预设起始时间点对应的音频点称为起始音频点,预设截止时间点对应的音频点称为截止音频点。并调用MediaMuxer类将起始音频点到截止音频点的音频数据写入目标视频文件。

步骤116:生成裁剪后的目标视频。

将目标视频文件中,裁剪后的视频数据与裁剪后的音频数据合为目标视频,得到裁剪后的目标视频。

在本申请实施例中,当待裁剪视频数据中,预设起始时间点对应的起始视频帧为非关键帧时,将待裁剪视频数据中从起始视频帧到预设截止时间点对应的截止视频帧,分为两部分,其中,一部分为:从起始视频帧到中间视频帧每个视频帧,另一部分为:从与中间帧相邻且位于中间帧之后的起始关键帧到截止视频帧的每个视频帧;对于前者,确定每个视频帧对应的具有完整视频画面的目标视频帧;并将目标视频帧与后者对应的视频帧写入目标视频文件中,由于目标视频帧为具有完整视频画面的视频帧,可以保证目标视频文件中的目标视频能够正常播放,对于后者对应的视频帧直接写入目标视频文件,可以保证对待裁剪视频数据的裁剪速度,并且,本申请实施例中写入目标视频文件的视频帧数目为:从起始视频帧到截止视频帧的视频帧数目。因此,本申请实施例在保证目标视频文件中的视频可以正常播放的同时,既保证了对待裁剪视频数据的裁剪速度,又保证对待裁剪视频数据裁剪的精确性。

参考图2,示出了本申请中一种视频的裁剪装置实施例的结构示意图,该装置实施例可以包括:

第一获取单元201,用于获取对待裁剪视频数据进行裁剪的预设起始时间点与预设截止时间点;

第一确定单元202,用于确定所述预设起始时间点在所述待裁剪视频数据中对应的起始视频帧;

第二确定单元203,用于若所述起始视频帧为非关键帧时,分别为所述起始视频帧到中间视频帧的每个视频帧,确定所述视频帧经解码后得到的具有完整视频画面的目标视频帧;所述中间视频帧为:位于所述起始视频帧之后目标关键视频帧之前,且,与所述目标关键视频帧相邻的视频帧;所述目标关键视频帧为:位于所述起始视频帧之后,且距离所述起始视频帧最近的关键视频帧;

其中,该第二确定单元203具体用于确定所述视频帧经解码后得到的具有完整视频画面的目标视频帧时,包括:

获取子单元,用于获取从起始关键视频帧到所述起始视频帧的视频帧;所述起始关键视频帧为:位于所述起始视频帧之前,且,距离所述起始视频帧最近的关键视频帧;

其中,获取子单元可以包括:

第一获取模块,用于获取预设参数;

跳转模块,用于根据所述预设参数,将指针跳转到所述起始关键视频帧;

第二获取模块,用于依次获取从所述起始关键视频帧到起始视频帧的视频帧。

解码子单元,用于调用解码器,使得解码器依据从所述起始关键帧到所述视频帧的视频帧,对所述视频帧进行解码,得到所述视频帧对应的具有完整视频画面的目标视频帧。

其中,该装置实施例还可以包括:

渲染单元,用于在解码子单元对所述视频帧进行解码后,对解码后的目标视频帧进行渲染;

发送单元,用于将渲染后的目标视频帧发送至编码器,以便所述编码器对所述渲染后的目标视频帧进行编码。

第二获取单元204,用于获取从所述目标关键视频帧到所述预设截止时间点对应的截止视频帧的视频帧;

第一写入单元205,用于依次将编码后的每个目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入目标视频文件。

其中,第一写入单元205可以包括:

编码子单元,用于依次对每个所述目标视频帧进行编码;

写入子单元,用于依次将编码后的目标视频帧,以及从所述目标关键视频帧到所述截止视频帧的每个视频帧写入所述目标视频文件。

其中,该装置实施例还可以包括:

第三获取单元,用于获取待裁剪音频数据;

第四获取单元,用于从所述待裁剪音频数据中,获取从所述预设起始时间点对应的起始音频点,到,所述预设截止时间点对应的截止音频点的音频数据;

第二写入单元,用于将所述音频数据写入所述目标视频文件。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同相似部分互相参见即可。在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。在文中的“包括”、“包含”等词语解释为包含的含义而不是排他或穷举的含义;也就是说,是“包含但不限于”的含义。在不脱离本发明构思的前提下,还可以做出变形、同等替换、改进等,这些都属于本发明的保护范围。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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