CN109936763A - 视频的处理及发布方法 - Google Patents
视频的处理及发布方法 Download PDFInfo
- Publication number
- CN109936763A CN109936763A CN201711360317.6A CN201711360317A CN109936763A CN 109936763 A CN109936763 A CN 109936763A CN 201711360317 A CN201711360317 A CN 201711360317A CN 109936763 A CN109936763 A CN 109936763A
- Authority
- CN
- China
- Prior art keywords
- video
- key frame
- thumbnail
- frame
- target video
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Television Signal Processing For Recording (AREA)
Abstract
本发明公开了一种视频的处理及发布方法。其中,该处理方法包括:展示目标视频的关键帧;根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧;根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。本发明解决了现有技术中对视频进行处理时比较繁琐的技术问题。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种视频的处理及发布方法。
背景技术
在网络应用中,视频发表是一个非常重要的模块,而且也是用户浏览量最高的模块,但是视频的发表往往存在个问题,发表视频是个漫长的等待过程,根据视频文件的大小不同,用户发表所需时间长短也不一样,文件越大,发表的时间也越长,反之,在同等带宽条件下,文件越小,发表所需的时间越少。同时,一些用户发表视频时,只想选其中精华部分或非常精彩的部分进行发表,而不是全部视频进行发表,这时用户需要对视频进行编辑及裁剪(视频的裁剪可以缩减视频大小),通常的做法是通过专业的视频裁剪软件先裁剪好,然后将裁剪好的视频拷贝至移动客户端指定目录,再进行发表。这样的操作是非常繁琐的,严重影响用户发表视频的积极性。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种视频的处理及发布方法,以至少解决现有技术中对视频进行处理时比较繁琐的技术问题。
根据本发明实施例的一个方面,提供了一种视频的处理方法,包括:展示目标视频的关键帧;根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧;根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。
根据本发明实施例的另一方面,还提供了一种视频的处理装置,包括:展示单元,用于展示目标视频的关键帧;选择单元,用于根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧;处理单元,用于根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。
可选地,所述展示单元包括:第一获取模块,用于获取处理所述目标视频时所允许的最大处理时长和所述最大处理时长内允许提取关键帧的最大提取数量;第一确定模块,用于根据所述最大处理时长和所述最大提取数量确定预设关键帧提取间隔;第一提取模块,用于按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到第一数量的关键帧;第一展示模块,用于对所述第一数量的关键帧进行展示。
可选地,所述提取模块包括:提取子模块,用于利用至少一个线程按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到所述第一数量的关键帧。
可选地,所述展示单元包括:第二展示模块,用于依据关键帧的时间戳提取目标视频关键帧进行展示。
可选地,所述第二展示模块包括:索引模块,用于按照预设关键帧提取间隔从目标视频中提取关键帧的索引位置;时间戳模块,用于提取所述索引位置所指示的关键帧的时间戳信息,得到时间戳列表;第二提取模块,用于按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧。
可选地,所述展示单元包括:第三提取模块,用于在所述目标视频中提取出的所有关键帧的个数小于所述第一数量的情况下,提取所述目标视频中的所有关键帧,得到第二数量的关键帧;缩略图模块,用于重复展示所述第二数量的关键帧的缩略图,以使展示的所述缩略图的数量为所述第一数量。
可选地,所述展示单元包括:第二获取模块,用于获取所述关键帧的存储地址和所述关键帧在所述目标视频中播放时间信息;读取模块,用于根据所述播放时间信息从相应的所述存储地址读取所述关键帧;第一展示模块,用于展示读取的所述关键帧。
可选地,所述展示单元包括:第三获取模块,用于获取所述显示区域显示的关键帧的最大显示数量和显示区域的宽度;生成模块,用于根据所述最大显示数量和所述显示区域的宽度生成每个关键帧的缩略图,其中,每个所述缩略图的宽度用于像素的数量表示,每个像素表示预设时长;第二展示模块,用于展示所述关键帧的所述缩略图。
可选地,所述获取单元包括:检测模块,用于检测所述选择指令所选择的第一缩略图和第二缩略图;第四获取模块,用于获取所述第一缩略图相对于第一参考时间点的像素偏移,以及所述第二缩略图相对于第二参考时间点的像素偏移;第二确定模块,用于根据所述像素偏移、每个像素表示的所述预设时长、第一参考时间点和所述第二参考时间点确定所述第一缩略图所对应的起始关键帧以及所述第二缩略图所对应的结束关键帧。
可选地,所述检测模块包括:显示子模块,用于显示用于选择所述第一缩略图的第一标识和用于选择所述第二缩略图的第二标识,其中,所述第一标识和所述第二标识处于可移动状态;检测子模块,用于检测用于指示移动所述第一标识的第一指令和用于指示移动所述第二标识的第二指令;确定子模块,用于将所述第一指令指示所述第一标识停留的缩略图作为所述第一缩略图,将所述第二指令指示所述第二标识停留的缩略图作为所述第二缩略图。
可选地,所述展示单元包括:显示模块,用于在所述目标视频的时长小于或者等于所述最大处理时长时,所述第一数量小于或者等于所述最大显示数量,在所述显示区域静态显示所述第一数量的所述缩略图;在所述目标视频的时长大于所述最大处理时长时,所述第一数量大于所述最大显示数量,在所述显示区域滚动显示所述第一数量的所述缩略图。
根据本发明实施例的另一方面,还提供了一种视频的发布方法,包括:接收对目标视频进行处理的第一指令,所述第一指令用于指示从所述目标视频中截取任意时长的一段视频;在接收到所述第一指令之后,按照上述述的处理方法截取所述一段视频;发布根据所述第一指令截取得到的所述一段视频,其中,所述一段视频的长度为所述选择指令所指示的从所述起始关键帧至所述结束关键帧之间的时长。
根据本发明实施例的另一方面,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述的方法。
根据本发明实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器通过所述计算机程序执行上述的方法。
在本发明实施例中,通过对目标视频提取一定数量的关键帧,利用关键帧所表示的目标视频的时长来选择进行处理的一段视频,可以快速选择一段视频并完成视频的处理,进而解决了现有技术中对视频进行处理时比较繁琐的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种硬件环境的示意图;
图2是根据本发明实施例的视频的处理方法的流程图;
图3是根据本发明实施例的确定索引位置的示意图;
图4是根据本发明实施例的一种关键帧的显示方式的示意图;
图5是根据本发明实施例的视频编辑时间点选择区的示意图;
图6是根据本发明实施例的移动滑块的示意图;
图7是根据本发明实施例的不可见区域的缩略图的示意图;
图8是根据本发明实施例的不同宽度的缩略图的示意图;
图9是根据本发明实施例的滑块的移动范围的示意图;
图10是根据本发明实施例的提取关键帧的流程图;
图11是根据本发明实施例视频的处理方法的场景示意图;
图12是根据本发明实施例的视频的发布方法的流程图;
图13是根据本发明实施例的发布界面的示意图;
图14是根据本发明实施例的选择视频的界面的示意图;
图15是根据本发明实施例的截取视频的界面的示意图;
图16是根据本发明实施例的截取得到视频的界面的示意图;
图17是根据本发明实施例的视频的处理装置的示意图;以及
图18是根据本发明实施例的硬件装置的架构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种视频的处理方法。在本实施例中,上述视频的处理方法可以应用于如图1所示的终端102和服务器104所构成的硬件环境中。如图1所示,终端102通过网络与服务器104进行连接,上述网络包括但不限于:广域网、城域网或局域网,终端102可以是手机终端,也可以是PC终端、笔记本终端或平板电脑终端。
根据本发明实施例,提供了一种视频的处理方法,图2是根据本发明实施例的视频的处理方法的流程图。如图2所示,该方法包括:
步骤S202,展示目标视频的关键帧。
本实施例提供的视频处理方法可以应用在社交应用中。例如,当用户需要通过社交应用发送视频时,通过该视频的处理方法对视频进行裁切等处理,并将处理后的视频通过社交应用发布。具体地,用户通过社交应用中的视频选择页面选择目标视频,当接收到用户需要编辑裁剪视频的指令时,社交应用将会跳转至视频编辑页面,视频编辑页面为该社交应用的一个功能。
目标视频由多个帧形成,播放每一帧图像来实现目标视频的播放。每一帧都对应目标视频的一个时刻。为了便于对目标视频进行裁剪,且减少数据处理量和提高处理速度,可以提取一定数量的关键帧进行展示,利用展示的关键帧来提示用户选择需要裁剪的时刻。通过记录用户选择关键帧,以及关键帧所对应的目标视频的时刻,来确定需要裁剪的时刻。
可选地,展示目标视频的关键帧包括:获取处理目标视频时所允许的最大处理时长和最大处理时长内允许提取关键帧的最大提取数量;根据最大处理时长和最大提取数量确定预设关键帧提取间隔;按照预设关键帧提取间隔从目标视频中提取关键帧,得到第一数量的关键帧;对所述第一数量的关键帧进行展示。
最大处理时长是后台动态可配置的,配置的原则是参考不同社交应用发布视频片段的时长需求。例如,游戏类社交平台上根据不同游戏平台的视频需求及裁剪视频越长,平台发表上传的时间越长的因素等来综合考量可允许裁剪的最大时长。比如游戏类视频裁剪,因为游戏对局时间很短,一般都在五分钟以内完成对局,因此可将游戏的视频时长通过后台配置成可裁剪最大时长五分钟。在进行视频处理时,通过客户端向后台发送拉取可裁减时长(即最大处理时长)的信息请求并返回,假设后台配置的用户可裁剪时长是5min限定,这说明允许可裁剪的最大视频时长是5分钟。
如图3所示,该视频编辑页面主要由三个模块构成,一个是视频预览区,用于循环播放用户待裁剪的目标视频;一个是视频裁剪点的选择区,用于选择视频裁剪点;最后一个是视频裁剪交互模块,用于根据视频的裁剪点裁剪用户所需的视频,并保存至客户端的存储目录中,用于社交应用的社区平台进行发布。
提取间隔根据最大提取数量和最大处理时长确定。假设目标视频的时长为10min,每张图片表示1s,此时10分钟的目标视频为600s,即需要提取600张图片来表示10分钟视频时长,一方面提取600张视频帧画面需要占用大量的时间,另一方面严重影响应用程序的应用体验,而且会占用应用程序大量的内存。为了减少内存的占用和提取的时间,本实施例对最大处理时长5min区域内,提取特定张数的关键帧画面,本发明实施例的示例中采用的是10张,即在最大处理时长5分钟内关键帧的最大提取数量为10张。当目标视频的时长为5分钟时,提取的第一数量的关键帧为10张;当目标视频的时长为10分钟时,提取的第一数量的关键帧为20张。
可选地,本实施例提供了两种提取关键帧的方式。第一种是遍历所有的关键帧,从所有关键帧中按照预设关键帧提取间隔提取关键帧;第二种是根据关键帧的时间戳来提取关键帧。第一种提取方式由于需要遍历所有的关键帧,因此提取关键帧是个很耗时的过程,需要创建后台线程来提取具体时间点的帧画面。本发明为了提高帧画面的提取速度,采用多线程技术来提取视频帧画面的缩略图,即按照预设关键帧提取间隔从目标视频中提取关键帧,得到第一数量的关键帧包括:利用至少一个线程按照预设关键帧提取间隔从目标视频中提取关键帧,得到第一数量的关键帧。
需要说明的是,对于视频宽高比较小的视频或者视频容量比较小的视频,在提取视频帧画面时也可以采用单线程,对于视频宽高比较大的视频或者视频容量比较大的视频,在提取视频帧画面时也可以采用多线程,此处并不限制必须使用多个线程,而是可以根据视频进行灵活选择。
以两个线程提取关键帧为例,具体原理是,线程1用于提取以上目标视频所需10张关键帧的奇数帧,线程2用于提取以上目标视频所需10张关键帧的偶数帧。
第二种方式不需要遍历所有关键帧,只要在关键帧列表中确定需要提取的关键帧的时间戳,并根据时间戳来提取关键帧,因此,一个线程就可以完成关键帧的提取。以下对本实施例提取关键帧的第二种方式进行说明。
步骤1:用户选择视频文件之后,获取到视频文件的存储地址URL;
步骤2:通过MediaExtractor的setDataSource的方法将视频文件加载进视频分离器,用来提取视频轨道的视频信息;MediaExtractor负责读取视频文件,获得视频文件信息,以及提供视频编码后的帧数据;
步骤3:通过getTrackFormat方法,获取提取轨道的格式信息,并判断当前轨道的格式信息是否是视频轨道,若是,则记录当前的轨道的索引信息,否则,继续遍历所有的轨道。
步骤4:之后,通过MediaExtractor的getSampleTime方法(用来提取帧画面当前的时间戳)及seekTo(用来切换至下一个关键帧)方法来提取视频中的所有关键帧的时间戳信息,并记录为提取到的所有关键帧列表;为了提高提取关键帧的速度,本实施例提取关键帧时,还可以依据关键帧的时间戳进行提取。即,依据关键帧的时间戳提取目标视频关键帧进行展示。可选地,依据关键帧的时间戳提取目标视频关键帧进行展示包括:按照预设关键帧提取间隔从目标视频中提取关键帧的索引位置;提取所述索引位置所指示的关键帧的时间戳信息,得到时间戳列表;按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧。
具体步骤如下:
初始化提取第一帧的时间点time=1s也即1000000us;
通过MediaExtractor类的seekTo方法跳转至time时间点,seekTo方法有两个参数,第一个参数为时间点time单位为微妙,第二个参数为Mode,Mode可取三个值分别为靠近当前时间点关键帧,取当前时间点关键帧的上一个关键帧及当前时间点关键帧的下一个关键帧。本实施例中当视频时长小于等于1分钟时,Mode参数取靠近当前时间点最近的关键帧;对视频时大于1分钟时,Mode采用的是当前时间点关键帧的下一关键帧,这样可以大大减少提取关键帧的帧数,从而减少提取视频关键所耗费的时间;
一般的视频编码中,1s时间内至少有24帧以上视频帧画面,视频编码包括画面组,该画面组中包括一个关键帧,其他的为非关键帧。一个画面组可以包括10帧画面、15帧画面、20帧画面,甚至更多。如果视频编码时每一个画面组有15帧画面,那么,一秒钟包括一个关键帧,如果一个画面组有10帧画面,那么,一秒钟包括2个关键帧。如果视频编码时每个画面组有25帧画面,那么,一秒钟可能没有关键帧。因此,在选择Mode值时,time中的时间点可能没有对应的关键帧,这就需要确定靠近当前时间点关键帧。
通过MediaExtractor类的getSampleTime获取当前时间点关键帧的时间戳,并将其加入关键帧的时间戳列表中;
将当前时间点time+1s及此时time=2000000us,之后重复执行上述三个步骤,直到当前时间点time大于提取的视频时长时结束。
步骤5:通过上一个步骤,提取到了视频关键帧的所有帧画面的时间戳,利用MediaCodec视频编解码器类,即可根据指定的关键帧的时间戳来提取视频帧画面信息。但是一段视频包括很多关键帧,比如一个2分30左右的视频,其每秒提取一个关键帧,关键帧就有150多帧,如果通过MediaCodec提取150多帧画面并保存,用时需要10s多时间,平均每秒能解析大概10帧的画面并保存,但是,本实施例所需的只是提取这段时间里面的特定张数的图片作为关键帧的帧画面的缩略图来表示待裁剪的视频时长,比如本实施例中采用的10张图片。具体如下:
假设所有关键帧里面有mTotalCount个关键帧,然后待提取的关键帧个数为count个,因此即可计算出提取的步长step=mTotalCount/count。
根据步长确定出关键帧列表中需要提取的关键帧的索引位置。例如,待提取第1个关键帧的索引位置position=step*i+step/2,通过计算出的索引位置,即可通过访问关键帧列表里面对应的位置的关键帧作为待提取的10张图片的第一个时间点位置。如图3所示,假设视频时长为5min,提取的到关键帧300帧,即mTotalCount=300,待提取关键帧count=10,则step=300/10=30,则提取的第一个关键帧的索引位置为position=30*0+30/2=15,以此类推,提取的第10个关键帧的索引位置为position=30*9+30/2=285。
计算到提取的10张关键帧的索引位置之后,从关键帧列表里面的300个关键帧里面,提取指定位置的关键帧的时间戳信息,构成待提取的10个关键帧的时间戳列表。
但是,当视频时长比较短时,比如只有5s的视频时长时,依然需要提取10关键帧图片时,提取的step是0,则提取的所有的位置信息position都为0。为此,当视频画面的提取的所有关键帧数大于需要提取的关键帧的个数时,采用上述方法;反之,则提取当前所有关键帧。然后因为显示区域是需要显示至少10张图片的,而提取的图片不够10张,此时在图片显示的时候需要调整显示规则。即,可选地,在按照预设关键帧提取间隔从目标视频中提取第一数量的关键帧的索引位置之前,展示目标视频的关键帧包括:在所述目标视频中提取出的所有关键帧的个数小于所述第一数量的情况下,提取所述目标视频中的所有关键帧,得到第二数量的关键帧;重复展示所述第二数量的关键帧的缩略图,以使展示的所述缩略图的数量为所述第一数量。
具体规则如下:
规则1:当提取的所有关键帧的个数N大于等于5小于10张时的图片显示规则为前(10-N)张重复显示,最后N-(10-N)张只显示一次;假如N=6张,则前4张时需要重复显示的,最后2张只显示一下,具体样式为1122334456这样构成十张图片显示,如下图4所示。
规则2:当提取的所有关键帧画面的个数N小于5张时的图片显示规则为若N=1,则同一张图片显示十次;
若N=2,则第一次图片重复显示五次之后,第二种图片在重复显示五次,图片显示索引排列为1111122222;
若N=3,则第一次图片重复显示四次之后,第二种图片重复显示四次,最后一张图片重复显示两次,图片显示索引排列为1111222233;
若N=4,则前三张图片重复显示3次,最后一张图片只显示一次,图片显示的索引排列为1112223334。
步骤6:提取得到关键帧列表之后,需要将MediaExtractor的视频媒体分离器通过seekTo方法重置初始位置。
步骤7:通过之前步骤中选中的视频轨道索引,可获取当前视频轨道媒体格式MediaFormat信息,并通过获取到的媒体格式信息,利用MediaCodec.createDecoderByType的方法来获取对应媒体信息的编解码器MediaCodec的对象decoder。
步骤8:获取到decoder对象需要设置解码器的异步回调MediaCodec.CallBack方法,之后可通过decoder.configure(mediaFormat,null,null,0)方法来初始化,并通过start()方法来启动decoder解码器。MediaCodec.CallBack主要提供四个回调方法,其提供两个方法主要方法回调
onInputBufferAvailable(MediaCodec codec,int index)及
onOutputBufferAvailable(MediaCodec codec,int index,MediaCodec.BufferInfo info)。
第一个方法MediaCodec解码器不断提供输入缓存,通过MediaExtractor的reamdSampleData不断向输入缓存提供数据并传递给解码器,当到达输入数据的末尾时,在调用queueInput缓存时,必须指定缓存_FLAG_END_OF_STREAM标志,发送给codec,可以在最后一个可用的输入缓存或者额外提交一个空的输入缓存设置end-of-stream标志。如果使用空缓存,其时间戳将被忽略。同时,为了不让解码器读取提取的所有关键帧画面的位缓存数据,避免提取到很多并不需要的帧数据,因此在每次调用queueInput缓存方法之后,会将提取的目标视频通过seekTo方法,定位至下一个需要提取的关键帧的时间戳,之后,通过readSampleData方法将提取的关键帧数据填充至输入缓存,通过queueInput缓存方法将帧数据提供给解码器,即可快速提取到指定时间戳的关键帧画面,而不用遍历所有关键帧的位缓存。
第二个方法,解码器根据回调方法的索引,不断提供不同帧格式的输出缓存,然后输出缓存可通过getOutput缓存或者getOutPutImage方法获得,同时对应的返回为位缓存或者图片的对象。输出回调同样也是通过返回的缓存Info中的标志位MediaCodec.缓存_FLAG_END_OF_STREAM结束,当然也可预先设置读取结束的条件,比如所需要的所有关键帧都提取完成了,则可提前结束输出缓存的读取,然后每次输出缓存使用结束之后,必须调用releaseOutput缓存方法,释放对应的数据缓存,返回给编码器。
步骤9获取到输出缓存之后,本实施例是利用getOutputImage方法获取输出帧数据缓存,并返回一个图片的对象。将图片对象中的位缓存数据,解码成指定的YUV帧格式数据,通过YuvImage类的compressToJpeg方法将YUV帧格式的数据转换成JPGE类型的图片保存至本地,并返回保存的本地图片存储地址的URL,图片保存成功之后,通知缩略图列表刷新指定位置的数据信息,UI界面根据指定位置信息对应的URL地址从指定文件地址读取缩略图并显示。本实施例中,图片不用转换成Bitmap,而是直接通过提取的YUV帧数据直接保存为JPEG类型的图片,这样可以大大节省图片提取及保存所需的时间。即,按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧包括:将所述时间戳列表中的时间戳输入到编码器来提取所述目标视频中与所述时间戳对应的关键帧;展示从目标视频中按照预设关键帧提取间隔提取第一数量的关键帧包括:通过所述编码器将提取的所述关键帧输出为YUV帧格式的数据,并将所述YUV帧格式的数据转换为图片。
本实施例中提取的帧画面根据提取的位置信息来同步。即,展示目标视频的关键帧包括:获取所述关键帧的存储地址和所述关键帧在所述目标视频中播放时间信息;根据所述播放时间信息从相应的所述存储地址读取所述关键帧;展示读取的所述关键帧。
提取关键帧后将关键帧保存至SD指定目录,并记录文件存储的URL地址;因采用多线程提取视频帧画面,因此需要控制线程的数据同步问题,数据同步通过提取关键帧的对应位置来同步的,提取数据完成之后,通知UI列表刷新指定位置信息的数据信息,UI界面根据指定位置信息对应的URL地址从指定目录读取关键帧。
例如,UI列表可以显示线程1提取的奇数帧和线程2提取的偶数帧。显示的关键帧可以按照关键帧对应在目标视频中的时间来确定。例如,线程1提取10张关键帧中编号为1、3、5、7、9的关键帧,线程2提取10张关键帧中编号为2、4、6、8、10的关键帧,这10张关键帧的时间顺序为1、2、3、4……8、9、10,则UI列表按照1至10的顺序从相应的存储地址读取每个关键帧,并对读取的关键帧进行展示。
可选地,展示目标视频的关键帧包括:获取显示区域显示的关键帧的最大显示数量和显示区域的宽度;根据最大显示数量和显示区域的宽度生成每个关键帧的缩略图,其中,每个缩略图的宽度用于像素的数量表示,每个像素表示预设时长;展示第一数量的关键帧的缩略图。
在展示关键帧的画面之前,将关键帧缩放至指定高宽,得到关键帧的缩略图。当显示区域内可以展示的最大显示数量大于或者等于最大提取数量时,此时显示区域内可以展示提取的全部关键帧,如图5和图6中黑色的矩形块标识全部关键帧的缩略图。若最大显示数量小于最大提取数量时,此时显示区域内可以展示提取的部分关键帧的缩略图,并且全部关键帧处于可滚动状态,通过滚动在显示区域内显示剩余的其他关键帧缩略图。
如图6中可见区域和不可见区域内的全部黑色矩形块表示全部关键帧的缩略图,但是,在可见区域和不可见区域分别显示部分关键帧的缩略图。通过向左滚动使得不可见区域的缩略图在显示区域中显示。本实施例优选将最大显示数量设置为最大提取数量。即在目标视频的时长小于或者等于最大处理时长时,第一数量小于或者等于最大显示数量,则在显示区域静态显示第一数量的缩略图;在目标视频的时长大于最大处理时长时,第一数量大于最大显示数量,则在显示区域滚动显示第一数量的缩略图。
生成缩略图例如,图片宽width=(屏幕的宽度-左右的边距)/10,假设屏幕宽度720dp,左右边距各35dp,则图片的width=(720-35*2)/10=65dp。
步骤S204,根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧。图3所示的视频编辑时间点选择区中示出的白色矩形块为用于选择关键帧的标识,两个白色矩形块之间连续的黑色矩形块为一段连续的关键帧。
步骤S206,根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。
可选地,获根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪:检测选择指令所选择的第一缩略图和第二缩略图;获取第一缩略图相对于第一参考时间点的像素偏移,以及第二缩略图相对于第二参考时间点的像素偏移;根据像素偏移、每个像素表示的预设时长、第一参考时间点和第二参考时间点确定第一缩略图所对应的起始关键帧以及第二缩略图所对应的结束关键帧。
每个缩略图的宽度可以用像素来表示,同时,第一数量的缩略图的宽度总和表示目标视频的总时长,据此可以得到每个像素所表示的时长。例如,目标视频的长度为5min,第一数量为10,根据这十张缩略图在所占用的屏幕宽度的总的像素来表示五分钟的时长,相当于每一张缩略图可以用来表示30s的视频时长,即屏幕每个像素点表示多少视频的时长原理来实现用户裁剪点的视频选择功能。具体算法原理如下:
情况1:当目标视频的时长VD小于等于最大处理时长MCD即5min时,就展示特定张数的视频缩略图图片,本发明实施例采用10张,也可根据需要设定展示规则。则每张图片在屏幕所占用的宽度为(屏幕的宽度-左右边距)/10,假设屏幕的宽度为720dp,左右边距为35dp,则每张图片占用的宽度为(720-35*2)/10=65dp(dp代表像素密度,高分辨率的像素密度1dp=2Pix),因此可计算出平均每个像素所占用的时长averageTimePerPix即VD/(65*dp*10),此时视频缩略图只有10张,缩略图的列表不可滑动,用户可通过左右移动滑块的左右两个选择点(图5至图8中的白色矩形块)位置来选择视频裁剪的起始关键帧及视频裁剪的结束关键帧。用户通过选择指令选择起始关键帧和结束关键帧。起始关键帧对应起始时刻,结束关键帧对应结束时刻。选择指令包括第一指令和第二指令,第一指令用于指示移动第一标识,第二指令用于指示移动第二标识,第一标识和第二标识处于可移动状态;将第一指令指示第一标识停留的缩略图作为第一缩略图,将第二指令指示第二标识停留的缩略图作为第二缩略图。比如,第一标识和第二标识可以是图6所示的滑块。图4所示的目标视频的时长为5分钟,第一个滑块(视频第一个选择点)向右移动65dp,第二个滑块向左移动65dp,则两个滑块之间视频的时长刚好是4min,则对应的视频裁剪的起始时刻0s变为
0s+65*dp*averageTimePerPix=30s,对应视频裁剪的结束时刻位置由视频的时长5min的位置变为5*60s-30s=270s。
当用户选择好第一时间点即裁剪的起始时刻时,视频预览区会通过seekTo方法会从新选择的起始时刻开始至结束时刻位置重复播放该视频片段,同理,当用户选择好第二时间点即裁剪的结束时刻时,视频预览区也会通过seekTo方法,从之前的起始时刻开始到新的结束时刻位置重复播放该视频片段。
用户通过左右移动第一个时间点及第二个时间点位置的两个滑块,可以选择视频裁剪的起始点及视频裁剪的结束点位置,但是滑块滑动方向是有限制的,第一个滑块当向左滑动至列表的起始位置即左边距的距离不能再向左滑动;向右滑动时,第一个滑块只能滑动至与第二个滑块最小裁剪视频时长的地方,本发明限制的最小裁剪时长是3s;同理,第二个滑块当向右滑动不能超过右边距的距离;向左滑动时,只能滑动至与第一个滑块最小裁剪视频时长的地方,这里也是3s,具体过程如图9所示。
情况2:如图7所示,当目标视频时长大于5min时,则需要展示更多张数的缩略图,比如目标视频的时长是15min,则展示的缩略图的张数为目标视频时长/5min*10=30张缩略图。当前屏幕只能显示10张缩略图,此时目标视频的缩略图列表是可向左滑动的,通过缩略图列表的滚动,可以调整视频裁剪的起始时刻及结束时刻。
具体原理:
计算屏幕每个像素点所占的视频时长averageDurationPerPix=视频总时长/(每张图片的宽度*缩略图的个数);这里同样以屏幕能够放下十张图片为例,假设屏幕的宽度为720dp,左右边距为35dp,则每张图片占用的宽度为(720-35*2)/10=65dp(dp代表像素密度,高分辨率的像素密度1dp=1.5Pix),则屏幕每个dp所占用的视频时长=15*60s/(30*65),当视频缩率图列表向左滑动时,滑动之前假设第一时间点位置为30s,第二时间点位置为4min即240s所在的位置,缩率图列表向左滚动65*dp个distance像素,则视频裁剪的第一时间点位置变为30s+distance*averageDurationPerPix=30+30=60s,视频裁剪的第二时间点位置变为240s+distance*averageDurationPerPix=240+30=270s位置。滑动之后,视频预览区又重新从新的第一时间点位置开始到新的第二时间点位置结束重复播放该视频片段,供用户预览该视频片段是否为自己期望裁剪部分,若不满意则重新选择新的时间点,重复以上操作。
情况3:在情况2中,都是基于视频时长为5min倍数的时长来分析所需视频缩略图的个数,因此不会出现视频时长通过缩略图滚动取不到的情况。假如目标视频的时长并非5min的倍数,如目标视频的时长是10分17s时,此时如果提取的缩略图仍然按之前的算法(5分钟用10张缩略图表示,每张可表示30s视频时长,因此17s不足已用一张缩略图来表示),只提取20张缩略图,则只能表示10分钟的视频,则最后17s视频用户也就选择不到,因此对提取视频缩略图的张数进行优化,具体算法:
所需缩略图个数=视频时长/视频裁剪最大时长*裁剪最大时长所需缩略图的个数
显然当所需缩略图个数只取整数时,则只会提取20张图片,因此在这里还需在处理所需缩略图个数值的小数部分,当所需缩略图的个数的小数部分大于0,则说明用整数个缩略图来表示视频的时长会出现视频最后不满30秒部分用户选择不了。此时则可以再提取缩略图个数的基础上再添加一个缩略图,只是这个缩略图的宽度与正常缩略图的宽度有差异,这个缩略图的宽度lastItemWidth的计算方法:
lastItemWidth=(视频时长%缩略图所表示的时长)/缩略图所表示的时长*缩略图的宽度,视频时长%缩略图所表示的时长表示取余。
根据之前计算单个缩略图的宽度是65dp则,此时最后一个缩略图的
lastItemWidth=17%30*65dp=36.8dp。
已添加的20张缩略图的基础上,再补上最后一个一张宽度为36.8dp缩略图之后,缩略图的列表在滑动至第20张缩略图时,则可以继续向左滑动,此时用户也就能选择到最后17s视频的时间点了,如下图8所示。
步骤S208,对目标视频中与起始时刻至结束时刻对应的一段视频进行处理。
本发明实施例,通过对目标视频提取一定数量的关键帧,利用关键帧所表示的目标视频的时长来选择进行处理的一段视频,可以快速选择一段视频并完成视频的处理,进而解决了现有技术中对视频进行处理时比较繁琐的技术问题。本实施例可以支持任意视频格式的视频裁剪,同时在应用程序性能允许情况下,可支持裁剪任意时长的视频及任意时长视频的编辑。
本发明实施例在用户选择裁剪视频的时间点之后,通过视频剪切工具来实现视频裁剪过程,如采用Mp4Parser库的方式对MP4视频格式的裁剪,采用FFMpeg软解码方式来对任意视频格式裁剪。裁剪是个耗时的过程,裁剪的视频越大,用时也更长,因此需要开启后台线程进行视频裁剪操作,裁剪过程,当前页面视频进入暂停状态,直至剪裁结束当前播放编辑视频页面销毁,将裁剪后得到的一段视频保存至本地指定文件目录下。
下面对图5所示的三个模块的具体实现进行详细阐述:
第一步:在通过视频选择页面,选择待裁剪的目标视频之后,将会跳转至视频的编辑页面;之后通过客户端向后台发送拉取用户可裁减时长(即最大处理时长)的信息请求并返回,假设后台配置的用户可裁剪时长是5min限定,这说明允许可裁剪的最大视频时长是5分钟,裁剪的时长是后台动态可配置的,因此根据不同游戏平台的视频需求及裁剪视频越长,平台发表上传的时间越长的因素等来综合考量可允许裁剪的最大时长。比如游戏类视频裁剪,因为游戏对局时间很短,一般都在五分钟以内完成对局,因此可将游戏的视频时长通过后台配置成可裁剪最大时长五分钟。
第二步:拉取到最大可裁剪时长D=5min之后,视频预览区便开始重复播放目标视频0-5min这视频片段,具体实现通过在预览区添加的视频播放器启动该目标视频的播放,然后通过视频播放器的seekTo操作可选择视频从指定的位置开始播放视频,当视频播放至五分钟的位置时,然后从0s这个时间点重新开始播放,以达到重复播放目标视频的效果。当目标视频可播放时长不足五分钟时,此时,最大可裁剪时长即为目标视频的时长,同时预览区重复播放的时间段为从0s到目标视频的视频长度。
第三步:视频裁剪的时间点选择区主要提供给用户以便于用户选择裁剪的时间点,其具体实现过程如下:
时间点的选择是根据需要提取视频缩略图张数来确定的,假设视频时长10min,每张图片表示1s,此时10分钟的视频600s,即需要提取600张图片来表示10分钟视频时长,一方面提取600张视频关键帧需要占用大量的时间,另一方面严重影响APP的应用体验,而且会占用APP大量的内存。本发明针对此技术方面进行了改进优化,对裁剪5min区域内,只提取特定张数的关键帧,本发明中示例中采用的是10张。
关键帧的提取过程,如图10的流程图所示:
801,获取后台可裁剪的最大时长MaxDuration=5*60s,即5分钟;
802,确定关键帧的提取时间间隔,因为提取十张图片,则提取的时间间隔Interval=MaxDuration/10=30s;
803,根据确定的关键帧的时间间隔,通过安卓系统库MediaMetaDataRetriver类的getFrameAtTime的提取视频的关键帧,第1张的时间点为0*Interval=0依次类推,第9张对应的时间点为Interval=9*30s;
804,通过以上方法提取关键帧是个很耗时的过程,因此需要创建后台线程来提取具体时间点的关键帧,本发明为了提高关键帧的提取速度,采用多线程技术来提取视频关键帧的缩略图,具体原理是通过两个线程来提取视频,然后提取的关键帧根据提取的位置信息来同步,:
805,线程1用于提取以上所需10张视频关键帧的奇数帧;
806,线程2用于提取视频关键帧的偶数帧。
807,提取关键帧之后,对其进行缩放至指定的宽高,图片宽width=(屏幕的宽度-左右的边距)/10,假设屏幕宽度720dp,左右边距各35dp,则图片的width=(720-35*2)/10=65dp;
808,将缩放后的关键帧保存至SD指定目录,并记录文件存储的URL地址;
809,因采用多线程提取视频关键帧,因此需要控制线程的数据同步问题,数据同步通过提取关键帧的对应位置来同步的,提取数据完成之后,通知UI列表刷新指定位置的数据信息,UI界面根据指定位置信息对应的URL地址从指定文件地址读取缩略图并显示。
场景描述:
首先,本实施例的视频的处理方法可以是对视频的裁剪,尤其是对任意长度视频的裁剪,可以裁剪得到任意长度的视频。裁剪的长度可以根据用户的需要自行选择。裁剪得到的视频可以保存在本地,或者向其他应用转发。本实施例的视频的处理方法可以作为一个功能模块嵌入在某些应用中,如嵌入在社区类应用、浏览器类应用、即时通讯应用和图片处理类应用中。当然,本实施例的视频的处理方法还可以作为一个单独的应用进行视频裁剪。
其次,视频需要裁剪的长度需要根据用户给定一个起始时间点及结束时间点来确定,因此视频的裁剪的前提是选择视频裁剪的时间点;每个视频具有很多帧画面,用户进行时间点选择之前,需要依据帧画面的内容来选择时间点。本发明通过特定的宽度的图片缩略图来表示视频的时长。具体原理:首先假设需要裁剪的目标视频时长为5min,且用特定宽度来表示这5min的时长,以图11的UI展示为例。图11的C区为视频的播放区,B区为选中的5分钟时长,A区为超过5分钟的图片缩略图,B区和A区的缩略图可以滚动展示。A区和B区所在的展示区域的左右边距均为35pix,屏幕宽度为720pix,则可以用来表示目标视频的总时长的宽度为720-2*35=650pix,因此,本实施例为了用户能够方便的选择视频裁剪的起始时间点及结束时间点,需要从这5分钟的关键帧画面,提取特定张数的缩略图来表示650pix宽度的区域,然后可以计算出每个pix所表示的视频时长,倘若视频时长超过5min,则可通过滚动缩略图列表来选择超过5min的视频其他裁剪时间点,其具体计算过程为滚动后的时间点time=上次的时间点位置+列表滚动的像素*每个像素所表示的时长。提取张数可根据用户需求来选择,图片选择太多,太密集,用户基本看不清,且内存也较多,影响应用性能,图片选择太少,则会出现变形不美观,同时也会影响用户时间点的选择。因此本实施例中选择10关键帧画面的缩略图来构建一个缩略图列表,用来表示5min的视频时长。此外,当超过五分钟时长视频时,假设视频时长是30min,则需要提取的视频帧画面的张数=30min/5min*10=60张。因此视频帧画面的提取过程快慢将直接影响用户的体验。本实施例可以通过按照预设间隔提取关键帧,或者,根据关键帧的时间戳来提取关键帧,能快速提取给定时间点的关键帧画面,快速显示预览关键帧的视频帧画面,同时也让用户对视频裁剪时间点的选择能有更好的体验。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
根据本发明实施例,还提供了一种视频的发布方法。如图12所示,该视频的发布方法包括如下步骤:
S1202,接收对目标视频进行处理的第一指令,第一指令用于指示从目标视频中截取任意时长的一段视频。
该第一指令可以通过客户端来接收,该客户端可以是用来截取视频的专用客户端,也可以是社区类或者通信类等需要视频截取功能的客户端。在专用客户端中,可以将打开客户端的指令作为第一指令,即将检测到的用于指示打开客户端的点击操作作为第一指令,以使客户端对目标视频进行截取操作。然后通过该客户端从目标视频中截取任意时长的一段视频。或者,将检测到的对客户端中一个功能标识的点击操作作为第一指令,以利用客户端的一个功能对目标视频进行截取操作。该视频截取功能作为某个客户端的一个功能设置在客户端中,例如,在社区类客户端中截取目标视频中的一段视频,在即时通信类客户端中截取目标视频。截取的视频可以是任意时长的一段视频,该一段视频的时长小于或者等于目标视频的总长度。截取的一段视频的时长由用户决定,用户通过上述视频处理方法的选择指令选择目标视频中的一段视频进行截取,该选择指令决定截取的一段视频的时长。
S1204,在接收到第一指令之后,按照上述的视频处理方法截取一段视频。
S1206,发布根据第一指令截取得到的一段视频,其中,一段视频的长度为选择指令所指示的从起始时刻至结束时刻之间的时长。
在截取得到一段视频之后,可以对该段视频进行转发。该段视频可以发布在截取视频的本客户端中,也可以转发到其他客户端中。即发布根据第一指令截取得到的一段视频包括:在客户端中发布一段视频,或者,在客户端中将一段视频转发到其他客户端中进行发布。
例如,在社区类客户端中截取目标视频得到一段视频之后,发布到社区中,或者转发到如即时通信类等其他客户端中进行发布。
本实施例通过上述视频处理的方法从目标视频中截取任意时长的一段视频,以至少解决现有技术中对视频进行处理时比较繁琐的技术问题。同时,由于本实施例可以对截取得到的一段视频进行转发,因此,简化了发布视频的流程。
以下结合附图13-16对本实施例的视频的发布方法进行说明。
1、打开客户端中的发表功能,客户端展示发表页面,如图13所示。该发表页面可以发布文字、图片、表情、视频和链接等内容,还可以在该发表页面设置内容标签。该内容标签用来表示发表的内容关联的应用、涉及的领域等。
2、在图13所示的发表页面点击“视频”图标(方框内的图标),跳转到图14所示的选择视频的页面。用户可以从选择视频的页面选择任意一个视频。
3、用户选择任意一个视频之后,显示图15所示的页面。图15所示的页面为客户端从视频中按照预设关键帧提取间隔提取多个关键帧。以便用户根据显示的关键帧选择一段视频进行裁剪(即截取一段视频)。用户可以拖动图15中显示的滑块(下册两端带两条竖线的滑块),左侧的滑块可以向右移动,右侧的滑块可以向左移动。即,选择的一段视频可以是从视频的起始播放时刻开始选择,也可以选择视频的中间一段,还可以是从视频的中间选择到视频的结束播放时刻。图15示出了从5分钟时长的视频中选择5分钟的一段视频。在用户选择结束后,点击“确定”图标,跳转到图15所示的页面中。
4、图16中显示了在发表的页面中显示截取的一段视频。用户还可以在该页面中添加文字、图片或者链接等,然后点击“发表”图标,发布截取得到的一段视频。图16示出了在客户端中截取并发布截取到的一段视频,该一段视频还可以通过该客户端发布到其他客户端中。例如,从用于截取视频的客户端中截取一段视频发布到即时通信类客户端中,或者发布到社区类客户端中。
根据本发明实施例,还提供了一种用于实施上述视频的处理方法的视频的处理装置。如图17所示,该装置包括:
展示单元10,用于展示目标视频的关键帧;
本实施例提供的视频处理方法可以应用在社交应用中。例如,当用户需要通过社交应用发送视频时,通过该视频的处理方法对视频进行裁切等处理,并将处理后的视频通过社交应用发布。具体地,用户通过社交应用中的视频选择页面选择目标视频,当接收到用户需要编辑裁剪视频的指令时,社交应用将会跳转至视频编辑页面,视频编辑页面为该社交应用的一个功能。
目标视频由多个帧形成,播放每一帧图像来实现目标视频的播放。每一帧都对应目标视频的一个时刻。为了便于对目标视频进行裁剪,且减少数据处理量和提高处理速度,可以提取一定数量的关键帧进行展示,利用展示的关键帧来提示用户选择需要裁剪的时刻。通过记录用户选择关键帧,以及关键帧所对应的目标视频的时刻,来确定需要裁剪的时刻。
可选地,所述展示单元包括:第一获取模块,用于获取处理所述目标视频时所允许的最大处理时长和所述最大处理时长内允许提取关键帧的最大提取数量;第一确定模块,用于根据所述最大处理时长和所述最大提取数量确定预设关键帧提取间隔;第一提取模块,用于按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到第一数量的关键帧;第一展示模块,用于对所述第一数量的关键帧进行展示。
最大处理时长是后台动态可配置的,配置的原则是参考不同社交应用发布视频片段的时长需求。例如,游戏类社交平台上根据不同游戏平台的视频需求及裁剪视频越长,平台发表上传的时间越长的因素等来综合考量可允许裁剪的最大时长。比如游戏类视频裁剪,因为游戏对局时间很短,一般都在五分钟以内完成对局,因此可将游戏的视频时长通过后台配置成可裁剪最大时长五分钟。在进行视频处理时,通过客户端向后台发送拉取可裁减时长(即最大处理时长)的信息请求并返回,假设后台配置的用户可裁剪时长是5min限定,这说明允许可裁剪的最大视频时长是5分钟。
如图3所示,该视频编辑页面主要由三个模块构成,一个是视频预览区,用于循环播放用户待裁剪的目标视频;一个是视频裁剪点的选择区,用于选择视频裁剪点;最后一个是视频裁剪交互模块,用于根据视频的裁剪点裁剪用户所需的视频,并保存至客户端的存储目录中,用于社交应用的社区平台进行发布。
提取间隔根据最大提取数量和最大处理时长确定。假设目标视频的时长为10min,每张图片表示1s,此时10分钟的目标视频为600s,即需要提取600张图片来表示10分钟视频时长,一方面提取600张视频帧画面需要占用大量的时间,另一方面严重影响应用程序的应用体验,而且会占用应用程序大量的内存。为了减少内存的占用和提取的时间,本实施例对最大处理时长5min区域内,提取特定张数的关键帧画面,本发明实施例的示例中采用的是10张,即在最大处理时长5分钟内关键帧的最大提取数量为10张。当目标视频的时长为5分钟时,提取的第一数量的关键帧为10张;当目标视频的时长为10分钟时,提取的第一数量的关键帧为20张。
可选地,本实施例提供了两种提取关键帧的方式。第一种是遍历所有的关键帧,从所有关键帧中按照预设关键帧提取间隔提取关键帧;第二种是根据关键帧的时间戳来提取关键帧。第一种提取方式由于需要遍历所有的关键帧,因此提取关键帧是个很耗时的过程,需要创建后台线程来提取具体时间点的帧画面。本发明为了提高帧画面的提取速度,采用多线程技术来提取视频帧画面的缩略图,即所述提取模块包括:提取子模块,用于利用至少一个线程按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到所述第一数量的关键帧。
需要说明的是,对于视频宽高比较小的视频或者视频容量比较小的视频,在提取视频帧画面时也可以采用单线程,对于视频宽高比较大的视频或者视频容量比较大的视频,在提取视频帧画面时也可以采用多线程,此处并不限制必须使用多个线程,而是可以根据视频进行灵活选择。
以两个线程提取关键帧为例,具体原理是,线程1用于提取以上目标视频所需10张关键帧的奇数帧,线程2用于提取以上目标视频所需10张关键帧的偶数帧。
第二种方式不需要遍历所有关键帧,只要在关键帧列表中确定需要提取的关键帧的时间戳,并根据时间戳来提取关键帧,因此,一个线程就可以完成关键帧的提取。以下对本实施例提取关键帧的第二种方式进行说明。
步骤1:用户选择视频文件之后,获取到视频文件的存储地址URL;
步骤2:通过MediaExtractor的setDataSource的方法将视频文件加载进视频分离器,用来提取视频轨道的视频信息;MediaExtractor负责读取视频文件,获得视频文件信息,以及提供视频编码后的帧数据;
步骤3:通过getTrackFormat方法,获取提取轨道的格式信息,并判断当前轨道的格式信息是否是视频轨道,若是,则记录当前的轨道的索引信息,否则,继续遍历所有的轨道。
步骤4:之后,通过MediaExtractor的getSampleTime方法(用来提取帧画面当前的时间戳)及seekTo(用来切换至下一个关键帧)方法来提取视频中的所有关键帧的时间戳信息,并记录为提取到的所有关键帧列表;为了提高提取关键帧的速度,本实施例提取关键帧时,还可以依据关键帧的时间戳进行提取。
具体步骤如下:
初始化提取第一帧的时间点time=1s也即1000000us;
通过MediaExtractor类的seekTo方法跳转至time时间点,seekTo方法有两个参数,第一个参数为时间点time单位为微妙,第二个参数为Mode,Mode可取三个值分别为靠近当前时间点关键帧,取当前时间点关键帧的上一个关键帧及当前时间点关键帧的下一个关键帧。本实施例中当视频时长小于等于1分钟时,Mode参数取靠近当前时间点最近的关键帧;对视频时大于1分钟时,Mode采用的是当前时间点关键帧的下一关键帧,这样可以大大减少提取关键帧的帧数,从而减少提取视频关键所耗费的时间;
一般的视频编码中,1s时间内至少有24帧以上视频帧画面,视频编码包括画面组,该画面组中包括一个关键帧,其他的为非关键帧。一个画面组可以包括10帧画面、15帧画面、20帧画面,甚至更多。如果视频编码时每一个画面组有15帧画面,那么,一秒钟包括一个关键帧,如果一个画面组有10帧画面,那么,一秒钟包括2个关键帧。如果视频编码时每个画面组有25帧画面,那么,一秒钟可能没有关键帧。因此,在选择Mode值时,time中的时间点可能没有对应的关键帧,这就需要确定靠近当前时间点关键帧。
通过MediaExtractor类的getSampleTime获取当前时间点关键帧的时间戳,并将其加入关键帧的时间戳列表中;
将当前时间点time+1s及此时time=2000000us,之后重复执行上述三个步骤,直到当前时间点time大于提取的视频时长时结束。
步骤5:通过上一个步骤,提取到了视频关键帧的所有帧画面的时间戳,利用MediaCodec视频编解码器类,即可根据指定的关键帧的时间戳来提取视频帧画面信息。但是一段视频包括很多关键帧,比如一个2分30左右的视频,其每秒提取一个关键帧,关键帧就有150多帧,如果通过MediaCodec提取150多帧画面并保存,用时需要10s多时间,平均每秒能解析大概10帧的画面并保存,但是,本实施例所需的只是提取这段时间里面的特定张数的图片作为关键帧的帧画面的缩略图来表示待裁剪的视频时长,比如本实施例中采用的10张图片。具体如下:
假设所有关键帧里面有mTotalCount个关键帧,然后待提取的关键帧个数为count个,因此即可计算出提取的步长step=mTotalCount/count。
根据步长确定出关键帧列表中需要提取的关键帧的索引位置。例如,待提取第1个关键帧的索引位置position=step*i+step/2,通过计算出的索引位置,即可通过访问关键帧列表里面对应的位置的关键帧作为待提取的10张图片的第一个时间点位置。如图3所示,假设视频时长为5min,提取的到关键帧300帧,即mTotalCount=300,待提取关键帧count=10,则step=300/10=30,则提取的第一个关键帧的索引位置为position=30*0+30/2=15,以此类推,提取的第10个关键帧的索引位置为position=30*9+30/2=285。
计算到提取的10张关键帧的索引位置之后,从关键帧列表里面的300个关键帧里面,提取指定位置的关键帧的时间戳信息,构成待提取的10个关键帧的时间戳列表。
提取的帧画面根据提取的位置信息来同步。可选地,所述展示单元包括:第二获取模块,用于获取所述关键帧的存储地址和所述关键帧在所述目标视频中播放时间信息;读取模块,用于根据所述播放时间信息从相应的所述存储地址读取所述关键帧;第一展示模块,用于展示读取的所述关键帧。
提取关键帧后将关键帧保存至SD指定目录,并记录文件存储的URL地址;因采用多线程提取视频帧画面,因此需要控制线程的数据同步问题,数据同步通过提取关键帧的对应位置来同步的,提取数据完成之后,通知UI列表刷新指定位置信息的数据信息,UI界面根据指定位置信息对应的URL地址从指定目录读取关键帧。
例如,UI列表可以显示线程1提取的奇数帧和线程2提取的偶数帧。显示的关键帧可以按照关键帧对应在目标视频中的时间来确定。例如,线程1提取10张关键帧中编号为1、3、5、7、9的关键帧,线程2提取10张关键帧中编号为2、4、6、8、10的关键帧,这10张关键帧的时间顺序为1、2、3、4……8、9、10,则UI列表按照1至10的顺序从相应的存储地址读取每个关键帧,并对读取的关键帧进行展示。
可选地,所述展示单元包括:第三获取模块,用于获取所述显示区域显示的关键帧的最大显示数量和显示区域的宽度;生成模块,用于根据所述最大显示数量和所述显示区域的宽度生成每个关键帧的缩略图,其中,每个所述缩略图的宽度用于像素的数量表示,每个像素表示预设时长;第二展示模块,用于展示所述关键帧的所述缩略图。
在展示关键帧的画面之前,将关键帧缩放至指定高宽,得到关键帧的缩略图。当显示区域内可以展示的最大显示数量大于或者等于最大提取数量时,此时显示区域内可以展示提取的全部关键帧,如图3和图4中黑色的矩形块标识全部关键帧的缩略图。若最大显示数量小于最大提取数量时,此时显示区域内可以展示提取的部分关键帧的缩略图,并且全部关键帧处于可滚动状态,通过滚动在显示区域内显示剩余的其他关键帧缩略图。
如图5中可见区域和不可见区域内的全部黑色矩形块表示全部关键帧的缩略图,但是,在可见区域和不可见区域分别显示部分关键帧的缩略图。通过向左滚动使得不可见区域的缩略图在显示区域中显示。本实施例优选将最大显示数量设置为最大提取数量。即在目标视频的时长小于或者等于最大处理时长时,第一数量小于或者等于最大显示数量,则在显示区域静态显示第一数量的缩略图;在目标视频的时长大于最大处理时长时,第一数量大于最大显示数量,则在显示区域滚动显示第一数量的缩略图。
生成缩略图例如,图片宽width=(屏幕的宽度-左右的边距)/10,假设屏幕宽度720dp,左右边距各35dp,则图片的width=(720-35*2)/10=65dp。
选择单元20用于根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧。图3所示的视频编辑时间点选择区中示出的白色矩形块为用于选择关键帧的标识,两个白色矩形块之间连续的黑色矩形块为一段连续的关键帧。
处理单元30,用于根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始时刻至结束时刻对应的一段视频进行裁剪。
可选地,所述获取单元包括:检测模块,用于检测所述选择指令所选择的第一缩略图和第二缩略图;第四获取模块,用于获取所述第一缩略图相对于第一参考时间点的像素偏移,以及所述第二缩略图相对于第二参考时间点的像素偏移;第二确定模块,用于根据所述像素偏移、每个像素表示的所述预设时长、第一参考时间点和所述第二参考时间点确定所述第一缩略图所对应的起始时刻以及所述第二缩略图所对应的结束时刻。
可选地,所述检测模块包括:显示子模块,用于显示用于选择所述第一缩略图的第一标识和用于选择所述第二缩略图的第二标识,其中,所述第一标识和所述第二标识处于可移动状态;检测子模块,用于检测用于指示移动所述第一标识的第一指令和用于指示移动所述第二标识的第二指令;确定子模块,用于将所述第一指令指示所述第一标识停留的缩略图作为所述第一缩略图,将所述第二指令指示所述第二标识停留的缩略图作为所述第二缩略图。
可选地,所述展示单元包括:显示模块,用于在所述目标视频的时长小于或者等于所述最大处理时长时,所述第一数量小于或者等于所述最大显示数量,在所述显示区域静态显示所述第一数量的所述缩略图;在所述目标视频的时长大于所述最大处理时长时,所述第一数量大于所述最大显示数量,在所述显示区域滚动显示所述第一数量的所述缩略图。
每个缩略图的宽度可以用像素来表示,同时,第一数量的缩略图的宽度总和表示目标视频的总时长,据此可以得到每个像素所表示的时长。例如,目标视频的长度为5min,第一数量为10,根据这十张缩略图在所占用的屏幕宽度的总的像素来表示五分钟的时长,相当于每一张缩略图可以用来表示30s的视频时长,即屏幕每个像素点表示多少视频的时长原理来实现用户裁剪点的视频选择功能。具体算法原理如下:
情况1:当目标视频的时长VD小于等于最大处理时长MCD即5min时,就展示特定张数的视频缩略图图片,本发明实施例采用10张,也可根据需要设定展示规则。则每张图片在屏幕所占用的宽度为(屏幕的宽度-左右边距)/10,假设屏幕的宽度为720dp,左右边距为35dp,则每张图片占用的宽度为(720-35*2)/10=65dp(dp代表像素密度,高分辨率的像素密度1dp=2Pix),因此可计算出平均每个像素所占用的时长averageTimePerPix即VD/(65*dp*10),此时视频缩略图只有10张,缩略图的列表不可滑动,用户可通过左右移动滑块的左右两个选择点(图3至图6中的白色矩形块)位置来选择视频裁剪的起始时刻及视频裁剪的结束时刻。用户通过选择指令选择起始时刻和结束时刻。选择指令包括第一指令和第二指令,第一指令用于指示移动第一标识,第二指令用于指示移动第二标识,第一标识和第二标识处于可移动状态;将第一指令指示第一标识停留的缩略图作为第一缩略图,将第二指令指示第二标识停留的缩略图作为第二缩略图。比如,第一标识和第二标识可以是图4所示的滑块。图4所示的目标视频的时长为5分钟,第一个滑块(视频第一个选择点)向右移动65dp,第二个滑块向左移动65dp,则两个滑块之间视频的时长刚好是4min,则对应的视频裁剪的起始时刻0s变为
0s+65*dp*averageTimePerPix=30s,对应视频裁剪的结束时刻位置由视频的时长5min的位置变为5*60s-30s=270s。
当用户选择好第一时间点即裁剪的起始时刻时,视频预览区会通过seekTo方法会从新选择的起始时刻开始至结束时刻位置重复播放该视频片段,同理,当用户选择好第二时间点即裁剪的结束时刻时,视频预览区也会通过seekTo方法,从之前的起始时刻开始到新的结束时刻位置重复播放该视频片段。
用户通过左右移动第一个时间点及第二个时间点位置的两个滑块,可以选择视频裁剪的起始点及视频裁剪的结束点位置,但是滑块滑动方向是有限制的,第一个滑块当向左滑动至列表的起始位置即左边距的距离不能再向左滑动;向右滑动时,第一个滑块只能滑动至与第二个滑块最小裁剪视频时长的地方,本发明限制的最小裁剪时长是3s;同理,第二个滑块当向右滑动不能超过右边距的距离;向左滑动时,只能滑动至与第一个滑块最小裁剪视频时长的地方,这里也是3s,具体过程如图7所示。
情况2:如图5所示,当目标视频时长大于5min时,则需要展示更多张数的缩略图,比如目标视频的时长是15min,则展示的缩略图的张数为目标视频时长/5min*10=30张缩略图。当前屏幕只能显示10张缩略图,此时目标视频的缩略图列表是可向左滑动的,通过缩略图列表的滚动,可以调整视频裁剪的起始时刻及结束时刻。
具体原理:
计算屏幕每个像素点所占的视频时长averageDurationPerPix=视频总时长/(每张图片的宽度*缩略图的个数);这里同样以屏幕能够放下十张图片为例,假设屏幕的宽度为720dp,左右边距为35dp,则每张图片占用的宽度为(720-35*2)/10=65dp(dp代表像素密度,高分辨率的像素密度1dp=1.5Pix),则屏幕每个dp所占用的视频时长=15*60s/(30*65),当视频缩率图列表向左滑动时,滑动之前假设第一时间点位置为30s,第二时间点位置为4min即240s所在的位置,缩率图列表向左滚动65*dp个distance像素,则视频裁剪的第一时间点位置变为30s+distance*averageDurationPerPix=30+30=60s,视频裁剪的第二时间点位置变为240s+distance*averageDurationPerPix=240+30=270s位置。滑动之后,视频预览区又重新从新的第一时间点位置开始到新的第二时间点位置结束重复播放该视频片段,供用户预览该视频片段是否为自己期望裁剪部分,若不满意则重新选择新的时间点,重复以上操作。
情况3:在情况2中,都是基于视频时长为5min倍数的时长来分析所需视频缩略图的个数,因此不会出现视频时长通过缩略图滚动取不到的情况。假如目标视频的时长并非5min的倍数,如目标视频的时长是10分17s时,此时如果提取的缩略图仍然按之前的算法(5分钟用10张缩略图表示,每张可表示30s视频时长,因此17s不足已用一张缩略图来表示),只提取20张缩略图,则只能表示10分钟的视频,则最后17s视频用户也就选择不到,因此对提取视频缩略图的张数进行优化,具体算法:
所需缩略图个数=视频时长/视频裁剪最大时长*裁剪最大时长所需缩略图的个数
显然当所需缩略图个数只取整数时,则只会提取20张图片,因此在这里还需在处理所需缩略图个数值的小数部分,当所需缩略图的个数的小数部分大于0,则说明用整数个缩略图来表示视频的时长会出现视频最后不满30秒部分用户选择不了。此时则可以再提取缩略图个数的基础上再添加一个缩略图,只是这个缩略图的宽度与正常缩略图的宽度有差异,这个缩略图的宽度lastItemWidth的计算方法:
lastItemWidth=(视频时长%缩略图所表示的时长)/缩略图所表示的时长*缩略图的宽度,视频时长%缩略图所表示的时长用来表示取余。
根据之前计算单个缩略图的宽度是65dp则,此时最后一个缩略图的
lastItemWidth=17%30*65dp=36.8dp。
已添加的20张缩略图的基础上,再补上最后一个一张宽度为36.8dp缩略图之后,缩略图的列表在滑动至第20张缩略图时,则可以继续向左滑动,此时用户也就能选择到最后17s视频的时间点了,如下图6所示。
本发明实施例,通过对目标视频提取一定数量的关键帧,利用关键帧所表示的目标视频的时长来选择进行处理的一段视频,可以快速选择一段视频并完成视频的处理,进而解决了现有技术中对视频进行处理时比较繁琐的技术问题。本实施例可以支持任意视频格式的视频裁剪,同时在应用程序性能允许情况下,可支持裁剪任意时长的视频及任意时长视频的编辑。
本发明实施例在用户选择裁剪视频的时间点之后,通过视频剪切工具来实现视频裁剪过程,如采用Mp4Parser库的方式对MP4视频格式的裁剪,采用FFMpeg软解码方式来对任意视频格式裁剪。裁剪是个耗时的过程,裁剪的视频越大,用时也更长,因此需要开启后台线程进行视频裁剪操作,裁剪过程,当前页面视频进入暂停状态,直至剪裁结束当前播放编辑视频页面销毁,将裁剪后得到的一段视频保存至本地指定文件目录下。
根据本发明实施例,还提供了一种用于实施上述视频的处理方法的电子装置,如图18所示,该电子装置包括:
1)处理器
2)存储器
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
可选地,在本实施例中,上述电子装置可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,图18是根据本发明实施例的一种电子装置的结构框图。如图18所示,该电子装置可以包括:一个或多个(图中仅示出一个)处理器101、至少一个通信总线102、用户接口103、至少一个传输装置104和存储器105。其中,通信总线102用于实现这些组件之间的连接通信。其中,用户接口103可以包括显示器106和键盘107。传输装置104可选的可以包括标准的有线接口和无线接口。
其中,存储器105可用于存储软件程序以及模块,如本发明实施例中的视频的处理方法和装置对应的程序指令/模块,处理器101通过运行存储在存储器105内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的视频的处理方法。存储器105可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器105可进一步包括相对于处理器101远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置104用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置104包括一个网络适配器(NetworkInterface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置104为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
其中,存储器105用于存储目标视频以及截取的一段视频。
在本实施例中,处理器101可以通过传输装置调用存储器105存储的信息及应用程序,以执行下述步骤:展示目标视频的关键帧;根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧;根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。
可选的,上述处理器101还可以执行如下步骤的程序代码:获取处理所述目标视频时所允许的最大处理时长和所述最大处理时长内允许提取关键帧的最大提取数量;根据所述最大处理时长和所述最大提取数量确定预设关键帧提取间隔;按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到第一数量的关键帧;对所述第一数量的关键帧进行展示。
可选的,上述处理器101还可以执行如下步骤的程序代码:利用至少一个线程按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到所述第一数量的关键帧。
可选的,上述处理器101还可以执行如下步骤的程序代码:依据关键帧的时间戳提取目标视频关键帧进行展示。
可选的,上述处理器101还可以执行如下步骤的程序代码:按照预设关键帧提取间隔从目标视频中提取关键帧的索引位置;提取所述索引位置所指示的关键帧的时间戳信息,得到时间戳列表;按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧。
可选的,上述处理器101还可以执行如下步骤的程序代码:在所述目标视频中提取出的所有关键帧的个数小于所述第一数量的情况下,提取所述目标视频中的所有关键帧,得到第二数量的关键帧;重复展示所述第二数量的关键帧的缩略图,以使展示的所述缩略图的数量为所述第一数量。
可选的,上述处理器101还可以执行如下步骤的程序代码:按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧包括:将所述时间戳列表中的时间戳输入到编码器来提取所述目标视频中与所述时间戳对应的关键帧;通过所述编码器将提取的所述关键帧输出为YUV帧格式的数据,并将所述YUV帧格式的数据转换为图片。
可选的,上述处理器101还可以执行如下步骤的程序代码:获取所述关键帧的存储地址和所述关键帧在所述目标视频中播放时间信息;根据所述播放时间信息从相应的所述存储地址读取所述关键帧;展示读取的所述关键帧。
可选的,上述处理器101还可以执行如下步骤的程序代码:获取显示区域显示的关键帧的最大显示数量和所述显示区域的宽度;根据所述最大显示数量和所述显示区域的宽度生成每个关键帧的缩略图,其中,每个所述缩略图的宽度用于像素的数量表示,每个像素表示预设时长;展示所述关键帧的缩略图。
可选的,上述处理器101还可以执行如下步骤的程序代码:检测所述选择指令所选择的第一缩略图和第二缩略图;获取所述第一缩略图相对于第一参考时间点的像素偏移,以及所述第二缩略图相对于第二参考时间点的像素偏移;根据所述像素偏移、每个像素表示的所述预设时长、第一参考时间点和所述第二参考时间点确定所述第一缩略图所对应的起始关键帧以及所述第二缩略图所对应的结束关键帧。
可选的,上述处理器101还可以执行如下步骤的程序代码:显示用于选择所述第一缩略图的第一标识和用于选择所述第二缩略图的第二标识,其中,所述第一标识和所述第二标识处于可移动状态;检测用于指示移动所述第一标识的第一指令和用于指示移动所述第二标识的第二指令;将所述第一指令指示所述第一标识停留的缩略图作为所述第一缩略图,将所述第二指令指示所述第二标识停留的缩略图作为所述第二缩略图。
可选的,上述处理器101还可以执行如下步骤的程序代码:在所述目标视频的时长小于或者等于所述最大处理时长时,所述第一数量小于或者等于所述最大显示数量,则在所述显示区域静态显示所述第一数量的所述缩略图;在所述目标视频的时长大于所述最大处理时长时,所述第一数量大于所述最大显示数量,则在所述显示区域滚动显示所述第一数量的所述缩略图。
本领域普通技术人员可以理解,图10所示的结构仅为示意,电子装置也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,电子装置10还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
可选地,在本实施例中,上述存储介质可以位于网络中的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:展示目标视频的关键帧;根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧;根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。
可选地,存储介质还被设置为存储用于执行上述实施例的方法中所包括的步骤的程序代码,本实施例中对此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (15)
1.一种视频的处理方法,其特征在于,包括:
展示目标视频的关键帧;
根据接收到的选择指令选择所述关键帧中任意长度的一段连续的关键帧;
根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪。
2.根据权利要求1所述的方法,其特征在于,展示目标视频的关键帧包括:
获取处理所述目标视频时所允许的最大处理时长和所述最大处理时长内允许提取关键帧的最大提取数量;
根据所述最大处理时长和所述最大提取数量确定预设关键帧提取间隔;
按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到第一数量的关键帧;
对所述第一数量的关键帧进行展示。
3.根据权利要求2所述的方法,其特征在于,按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到第一数量的关键帧包括:
利用至少一个线程按照所述预设关键帧提取间隔从所述目标视频中提取关键帧,得到所述第一数量的关键帧。
4.根据权利要求1所述的方法,其特征在于,展示目标视频的关键帧包括:
依据关键帧的时间戳提取目标视频关键帧进行展示。
5.根据权利要求4所述的方法,其特征在于,依据关键帧的时间戳提取目标视频关键帧进行展示包括:
按照预设关键帧提取间隔从目标视频中提取关键帧的索引位置;
提取所述索引位置所指示的关键帧的时间戳信息,得到时间戳列表;
按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧。
6.根据权利要求5所述的方法,其特征在于,展示目标视频的关键帧包括:
在所述目标视频中提取出的所有关键帧的个数小于所述第一数量的情况下,提取所述目标视频中的所有关键帧,得到第二数量的关键帧;
重复展示所述第二数量的关键帧的缩略图,以使展示的所述缩略图的数量为所述第一数量。
7.根据权利要求5所述的方法,其特征在于,
按照所述时间戳列表从目标视频中提取所述时间戳列表中的时间戳对应的关键帧,得到第一数量的关键帧包括:将所述时间戳列表中的时间戳输入到编码器来提取所述目标视频中与所述时间戳对应的关键帧;
通过所述编码器将提取的所述关键帧输出为YUV帧格式的数据,并将所述YUV帧格式的数据转换为图片。
8.根据权利要求2至7中任一项所述的方法,其特征在于,展示目标视频的关键帧还包括:
获取所述关键帧的存储地址和所述关键帧在所述目标视频中播放时间信息;
根据所述播放时间信息从相应的所述存储地址读取所述关键帧;
展示读取的所述关键帧。
9.根据权利要求2至7中任一项所述的方法,其特征在于,展示目标视频的关键帧包括:
获取显示区域显示的关键帧的最大显示数量和所述显示区域的宽度;
根据所述最大显示数量和所述显示区域的宽度生成每个关键帧的缩略图,其中,每个所述缩略图的宽度用于像素的数量表示,每个像素表示预设时长;
展示所述关键帧的缩略图。
10.根据权利要求9所述的方法,其特征在于,根据连续关键帧中的起始关键帧及结束关键帧对所述目标视频中与起始关键帧至结束关键帧对应的一段视频进行裁剪包括:
检测所述选择指令所选择的第一缩略图和第二缩略图;
获取所述第一缩略图相对于第一参考时间点的像素偏移,以及所述第二缩略图相对于第二参考时间点的像素偏移;
根据所述像素偏移、每个像素表示的所述预设时长、第一参考时间点和所述第二参考时间点确定所述第一缩略图所对应的起始关键帧以及所述第二缩略图所对应的结束关键帧。
11.根据权利要求10述的方法,其特征在于,检测所述选择指令所选择的第一缩略图和第二缩略图包括:
显示用于选择所述第一缩略图的第一标识和用于选择所述第二缩略图的第二标识,其中,所述第一标识和所述第二标识处于可移动状态;
检测用于指示移动所述第一标识的第一指令和用于指示移动所述第二标识的第二指令;
将所述第一指令指示所述第一标识停留的缩略图作为所述第一缩略图,将所述第二指令指示所述第二标识停留的缩略图作为所述第二缩略图。
12.根据权利要求9所述的方法,其特征在于,展示所述第一数量的所述关键帧的所述缩略图包括:
在所述目标视频的时长小于或者等于所述最大处理时长时,所述第一数量小于或者等于所述最大显示数量,则在所述显示区域静态显示所述第一数量的所述缩略图;
在所述目标视频的时长大于所述最大处理时长时,所述第一数量大于所述最大显示数量,则在所述显示区域滚动显示所述第一数量的所述缩略图。
13.一种视频的发布方法,其特征在于,包括:
接收对目标视频进行处理的第一指令,所述第一指令用于指示从所述目标视频中截取任意时长的一段视频;
在接收到所述第一指令之后,按照权利要求1至12中任一项所述的处理方法截取所述一段视频;
发布根据所述第一指令截取得到的所述一段视频,其中,所述一段视频的长度为所述选择指令所指示的从起始关键帧至结束关键帧之间的时长。
14.根据权利要求13所述的方法,其特征在于,所述接收对目标视频进行处理的第一指令包括:
将检测到的用于指示打开客户端的点击操作作为所述第一指令,以使所述客户端对所述目标视频进行截取操作;或者
将检测到的对客户端中一个功能标识的点击操作作为所述第一指令,以利用所述客户端的一个功能对所述目标视频进行截取操作。
15.根据权利要求13或14所述的方法,其特征在于,发布根据所述第一指令截取得到的所述一段视频包括:
在客户端中发布所述一段视频,或者,在所述客户端中将所述一段视频转发到其他客户端中进行发布。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711360317.6A CN109936763B (zh) | 2017-12-15 | 2017-12-15 | 视频的处理及发布方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711360317.6A CN109936763B (zh) | 2017-12-15 | 2017-12-15 | 视频的处理及发布方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109936763A true CN109936763A (zh) | 2019-06-25 |
CN109936763B CN109936763B (zh) | 2022-07-01 |
Family
ID=66982100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711360317.6A Active CN109936763B (zh) | 2017-12-15 | 2017-12-15 | 视频的处理及发布方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109936763B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110381365A (zh) * | 2019-07-02 | 2019-10-25 | 北京字节跳动网络技术有限公司 | 视频抽帧方法、装置及电子设备 |
CN110572722A (zh) * | 2019-09-26 | 2019-12-13 | 腾讯科技(深圳)有限公司 | 视频剪辑方法、装置、设备及可读存储介质 |
CN110708574A (zh) * | 2019-10-23 | 2020-01-17 | 上海连尚网络科技有限公司 | 用于发布信息的方法和设备 |
CN110719440A (zh) * | 2019-09-26 | 2020-01-21 | 恒大智慧科技有限公司 | 一种视频回放方法、装置及存储介质 |
CN110855645A (zh) * | 2019-11-01 | 2020-02-28 | 腾讯科技(深圳)有限公司 | 流媒体数据播放方法、装置 |
CN111225122A (zh) * | 2020-01-19 | 2020-06-02 | 深圳英飞拓科技股份有限公司 | 基于ptp协议的校时机制在多摄像机视频同步中的实现方法 |
CN111770386A (zh) * | 2020-05-29 | 2020-10-13 | 维沃移动通信有限公司 | 视频处理方法、视频处理装置及电子设备 |
CN111918128A (zh) * | 2020-07-23 | 2020-11-10 | 上海网达软件股份有限公司 | 一种云剪辑方法、装置、设备及存储介质 |
CN112004136A (zh) * | 2020-08-25 | 2020-11-27 | 广州市百果园信息技术有限公司 | 一种视频剪辑的方法、装置、设备和存储介质 |
CN113507571A (zh) * | 2021-06-30 | 2021-10-15 | 深圳市路卓科技有限公司 | 视频防剪辑方法、装置、设备、可读存储介质及程序产品 |
WO2021218921A1 (en) * | 2020-04-27 | 2021-11-04 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | System and method for extraction of a video thumbnail from a video file |
WO2022095752A1 (zh) * | 2020-11-09 | 2022-05-12 | 华为技术有限公司 | 帧解复用方法、电子设备及存储介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6597375B1 (en) * | 2000-03-10 | 2003-07-22 | Adobe Systems Incorporated | User interface for video editing |
CN1902935A (zh) * | 2004-01-15 | 2007-01-24 | 三星电子株式会社 | 用于搜索视频剪辑的设备和方法 |
CN101510313A (zh) * | 2009-03-13 | 2009-08-19 | 腾讯科技(深圳)有限公司 | 一种gif生成方法、系统及媒体播放器 |
CN102932679A (zh) * | 2012-11-21 | 2013-02-13 | 合一网络技术(北京)有限公司 | 一种网络视频预览系统和方法 |
CN103634605A (zh) * | 2013-12-04 | 2014-03-12 | 百度在线网络技术(北京)有限公司 | 视频画面的处理方法及装置 |
CN104185077A (zh) * | 2014-09-12 | 2014-12-03 | 飞狐信息技术(天津)有限公司 | 一种视频剪辑方法及装置 |
US20140376887A1 (en) * | 2013-06-24 | 2014-12-25 | Adobe Systems Incorporated | Mobile device video selection and edit |
CN104813399A (zh) * | 2012-11-05 | 2015-07-29 | 奈斯瑞明株式会社 | 视频编辑方法及其终端以及记录介质 |
US20150301708A1 (en) * | 2014-04-21 | 2015-10-22 | VMIX Media, Inc. | Video Editing Graphical User Interface |
CN105657537A (zh) * | 2015-12-23 | 2016-06-08 | 小米科技有限责任公司 | 视频剪辑方法及装置 |
CN106358076A (zh) * | 2016-09-05 | 2017-01-25 | 北京金山安全软件有限公司 | 视频裁剪方法、装置及电子设备 |
CN106412702A (zh) * | 2015-07-27 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种视频片段的截取方法和装置 |
CN106804002A (zh) * | 2017-02-14 | 2017-06-06 | 北京时间股份有限公司 | 一种视频处理系统及方法 |
-
2017
- 2017-12-15 CN CN201711360317.6A patent/CN109936763B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6597375B1 (en) * | 2000-03-10 | 2003-07-22 | Adobe Systems Incorporated | User interface for video editing |
CN1902935A (zh) * | 2004-01-15 | 2007-01-24 | 三星电子株式会社 | 用于搜索视频剪辑的设备和方法 |
CN101510313A (zh) * | 2009-03-13 | 2009-08-19 | 腾讯科技(深圳)有限公司 | 一种gif生成方法、系统及媒体播放器 |
CN104813399A (zh) * | 2012-11-05 | 2015-07-29 | 奈斯瑞明株式会社 | 视频编辑方法及其终端以及记录介质 |
CN102932679A (zh) * | 2012-11-21 | 2013-02-13 | 合一网络技术(北京)有限公司 | 一种网络视频预览系统和方法 |
US20140376887A1 (en) * | 2013-06-24 | 2014-12-25 | Adobe Systems Incorporated | Mobile device video selection and edit |
CN103634605A (zh) * | 2013-12-04 | 2014-03-12 | 百度在线网络技术(北京)有限公司 | 视频画面的处理方法及装置 |
US20150301708A1 (en) * | 2014-04-21 | 2015-10-22 | VMIX Media, Inc. | Video Editing Graphical User Interface |
CN104185077A (zh) * | 2014-09-12 | 2014-12-03 | 飞狐信息技术(天津)有限公司 | 一种视频剪辑方法及装置 |
CN106412702A (zh) * | 2015-07-27 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种视频片段的截取方法和装置 |
CN105657537A (zh) * | 2015-12-23 | 2016-06-08 | 小米科技有限责任公司 | 视频剪辑方法及装置 |
CN106358076A (zh) * | 2016-09-05 | 2017-01-25 | 北京金山安全软件有限公司 | 视频裁剪方法、装置及电子设备 |
CN106804002A (zh) * | 2017-02-14 | 2017-06-06 | 北京时间股份有限公司 | 一种视频处理系统及方法 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110381365A (zh) * | 2019-07-02 | 2019-10-25 | 北京字节跳动网络技术有限公司 | 视频抽帧方法、装置及电子设备 |
CN110719440B (zh) * | 2019-09-26 | 2021-08-06 | 恒大智慧科技有限公司 | 一种视频回放方法、装置及存储介质 |
CN110719440A (zh) * | 2019-09-26 | 2020-01-21 | 恒大智慧科技有限公司 | 一种视频回放方法、装置及存储介质 |
CN110572722A (zh) * | 2019-09-26 | 2019-12-13 | 腾讯科技(深圳)有限公司 | 视频剪辑方法、装置、设备及可读存储介质 |
CN110708574A (zh) * | 2019-10-23 | 2020-01-17 | 上海连尚网络科技有限公司 | 用于发布信息的方法和设备 |
CN110855645A (zh) * | 2019-11-01 | 2020-02-28 | 腾讯科技(深圳)有限公司 | 流媒体数据播放方法、装置 |
CN111225122A (zh) * | 2020-01-19 | 2020-06-02 | 深圳英飞拓科技股份有限公司 | 基于ptp协议的校时机制在多摄像机视频同步中的实现方法 |
WO2021218921A1 (en) * | 2020-04-27 | 2021-11-04 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | System and method for extraction of a video thumbnail from a video file |
CN111770386A (zh) * | 2020-05-29 | 2020-10-13 | 维沃移动通信有限公司 | 视频处理方法、视频处理装置及电子设备 |
CN111918128A (zh) * | 2020-07-23 | 2020-11-10 | 上海网达软件股份有限公司 | 一种云剪辑方法、装置、设备及存储介质 |
CN112004136A (zh) * | 2020-08-25 | 2020-11-27 | 广州市百果园信息技术有限公司 | 一种视频剪辑的方法、装置、设备和存储介质 |
WO2022095752A1 (zh) * | 2020-11-09 | 2022-05-12 | 华为技术有限公司 | 帧解复用方法、电子设备及存储介质 |
CN113507571A (zh) * | 2021-06-30 | 2021-10-15 | 深圳市路卓科技有限公司 | 视频防剪辑方法、装置、设备、可读存储介质及程序产品 |
CN113507571B (zh) * | 2021-06-30 | 2023-10-24 | 深圳市路卓科技有限公司 | 视频防剪辑方法、装置、设备、可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109936763B (zh) | 2022-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109936763A (zh) | 视频的处理及发布方法 | |
CN112291627B (zh) | 一种视频编辑方法、装置、移动终端和存储介质 | |
JP5499331B2 (ja) | ストリーミングメディアのトリックプレー | |
EP3047644B1 (en) | Method and apparatus for generating a text color for a group of images | |
CN111935504B (zh) | 视频制作方法、装置、设备及存储介质 | |
US7561160B2 (en) | Data editing program, data editing method, data editing apparatus and storage medium | |
JP2017503394A (ja) | 映像処理方法、映像処理装置および表示装置 | |
KR20070090751A (ko) | 화상 표시방법 및 동영상 재생장치 | |
CN101663709A (zh) | 连续媒体流的规则采样和呈现 | |
JPWO2005050986A1 (ja) | 映像内容の提示方法及び装置 | |
CA2682877A1 (en) | Distributed synchronized video viewing and editing | |
GB2372658A (en) | A method of creating moving video data from a static image | |
JP5853458B2 (ja) | マーク情報記録装置及びマーク情報提示装置 | |
CN112218154B (zh) | 视频的获取方法和装置、存储介质及电子装置 | |
US20130251341A1 (en) | Motion picture playing method, motion picture playing apparatus and recording medium | |
CN104615738B (zh) | 一种基于远程同步的移动终端照片分享方法 | |
US20120251081A1 (en) | Image editing device, image editing method, and program | |
EP1351501A3 (en) | Method and system for accessing video data | |
KR100860510B1 (ko) | 모바일 장치에서 시각 효과가 삽입된 슬라이드 쇼의 생성방법 | |
JP2005348371A (ja) | 電子アルバム表示システム、電子アルバム表示方法、及び電子アルバム表示プログラム | |
JP2008166895A (ja) | 映像表示装置及びその制御方法、プログラム、記録媒体 | |
JPH10200814A (ja) | 画像編集方法及び画像編集装置並びにコンピュータに画像編集処理動作を実行させるためのプログラムを記録した媒体 | |
CN105550198B (zh) | 一种浏览照片时添加3d渲染效果的方法 | |
KR102078479B1 (ko) | 영상 편집 방법 및 영상 편집 장치 | |
WO2016184193A1 (zh) | 媒体文件生成方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |