CN104065966B - 在h.264视频文件中提取缩略图的方法和设备 - Google Patents
在h.264视频文件中提取缩略图的方法和设备 Download PDFInfo
- Publication number
- CN104065966B CN104065966B CN201310090197.8A CN201310090197A CN104065966B CN 104065966 B CN104065966 B CN 104065966B CN 201310090197 A CN201310090197 A CN 201310090197A CN 104065966 B CN104065966 B CN 104065966B
- Authority
- CN
- China
- Prior art keywords
- frame
- field
- band
- current
- thumbnail
- 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.)
- Active
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
提供了一种在H.264视频文件中提取缩略图的方法和设备,所述方法包括:在H.264视频文件中设置N个采集时间点,其中,N是等于或大于1的整数;从所述N个采集时间点中的每个采集时间点搜索可独立解码帧;通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图。所述方法能够在H.264视频文件中有效地提取缩略图,尤其是在一些H.264视频文件中缺乏IDR帧的情况下,可对这些H.264视频文件进行有效的缩略图提取操作。
Description
技术领域
本发明涉及一种对视频文件提取缩略图的方法和设备,更具体地说,涉及一种在H.264视频文件中提取缩略图的方法和设备。
背景技术
目前,多媒体播放器在对视频文件提取缩略图时,通常使用该视频文件的第一个随机访问点或者随机抽取该视频文件中的多个随机访问点,并进行解码、缩放,从而得到视频缩略图。
此外,近年来出现了一些本身支持缩略图显示特性的多媒体文件标准,这些多媒体文件中除了原始视频流之外,还另外存在一组由质量稍低的对原始视频文件的所有内容按一定的时间间隔提取得到的一系列I帧组成的视频流,该视频流可以用于步进播放,也可以用于缩略图显示。
此外,对于网络视频,网络服务提供商通常会对所要播放的视频文件进行预处理,预先提取出该视频每隔N秒的画面,并制作成一个缩略图列表。当用户将鼠标放在进度条上时,服务器将把与该进度条上的时间点对应的缩略图传送过来,显示给用户。
在现有技术中,在对基于H.264标准的视频文件提取缩略图时,在多媒体播放器不支持缩略图显示特性的情况下,可将IDR帧(Instantaneous Decoding Refresh,瞬时解码更新帧)作为提取缩略图的待选帧,其中,IDR帧为帧内预测帧,并且可完全截断预测链,作为随机访问点的关键帧。
现有的多媒体播放器在进行H.264视频文件缩略图制作时,首先会根据给定的提取时间跳转到H.264码流中对应的位置,然后搜索离该位置最近的IDR帧,找到IDR帧之后,对其进行解码缩放,最后产生缩略图。
上述方法对于某些IDR帧比较少的文件有一定的局限性,例如播放时间较短的文件、由摄像机等设备录制的文件以及用于低码率、低延时传输的H.264视频文件。通常,在这些文件中会使用较少的IDR帧,以节省文件码率。因此,这些H.264视频文件的IDR帧很少,甚至整个视频文件中只有一个IDR帧,在对这种文件制作缩略图的时候就会比较困难,而且这些IDR帧中可能存在没有意义的IDR帧,如黑屏,白屏等,将这样的帧作为视频缩略图会影响用户观看兴趣。
因此,需要一种在H.264视频文件中有效地提取缩略图的方法和设备。
发明内容
本发明在于至少解决上述问题,并提供下述优点,本发明的一方面在于提供一种在H.264视频文件中提取缩略图的方法和设备,所述方法和设备搜索H.264视频文件中的可独立解码帧,并基于搜索到的可独立解码帧产生缩略图。
本发明的另一方面在于提供一种在H.264视频文件中提取缩略图的方法和设备,所述方法和设备基于缩略图信息熵最大的原则筛选并提取缩略图,并通过建立查找表来计算缩略图的信息熵。
根据本发明的一方面,提供了一种在H.264视频文件中提取缩略图的方法,所述方法包括:在H.264视频文件中设置N个采集时间点,其中,N是等于或大于1的整数;从所述N个采集时间点中的每个采集时间点搜索可独立解码帧;通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图。
设置N个采集时间点的步骤可包括:获得H.264视频文件的总播放时间;通过将所述总播放时间划分为N+1等份,获得包括H.264视频文件的开始时间点和结束时间点的N+2个时间点;将H.264视频文件的开始时间点到结束时间点之间的N个时间点作为所述N个采集时间点。
可通过在所述N个采集时间点中的每个采集时间点执行以下操作来搜索可独立解码帧:跳转到在H.264视频文件中与当前采集时间点相应的码流位置;从所述码流位置开始解析视频帧;存储对视频帧进行解析后获得的关于视频帧的信息;基于所述关于视频帧的信息,确定视频帧是否可独立解码,直到获得一个可独立解码帧,或者直到当前采集时间点到下一个采集时间点之间的帧已解析并确定完毕还未获得可独立解码帧。
解析视频帧的步骤可包括:解析当前视频帧数据中的所有网络提取层NAL单元,并从所有NAL单元中的每个条带的头信息以及每个条带所参考的序列参数集SPS中提取所述关于视频帧的信息,所述关于视频帧的信息包括以下信息中的至少一个:条带类型slice_type、帧号frame_num、帧标志frame_mbs_only_flag、场标志field_pic_flag、底场标志bottom_field_flag、最大参考帧数量max_num_ref_frames。
确定视频帧是否可独立解码的步骤可包括:判断当前视频帧的所有条带是否均为I条带;当当前视频帧的所有条带均为I条带时,确定当前视频帧是可独立解码帧。
判断当前视频帧的所有条带是否均为I条带的步骤可包括:判断当前视频帧中的所有条带的slice_type是否均表示当前条带为I条带;如果当前视频帧中的所有条带的slice_type均表示当前条带为I条带,则判断当前视频帧的所有条带均为I条带。
确定视频帧是否可独立解码的步骤可包括:判断当前视频帧是否满足以下两个条件:(1)当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,(2)当前视频帧的最大参考帧数量小于或等于1;当当前视频帧满足所述两个条件时,确定当前视频帧是可独立解码帧。
判断当前视频帧是否满足所述两个条件的步骤可包括:设置并保存变量first_field,并且将first_field的初始值设置为0,其中,first_field为1表示当前条带属于场编码模式,并且属于解码顺序上的第一场;如果当前条带是当前图像的第一个条带,则更新并保存first_field,其中,当前图像为场编码模式下的场图像或者帧编码模式下的帧图像;当first_field被更新为1时,判断当前图像中的所有条带的slice_type是否均表示当前条带为I条带;如果当前图像中的所有条带的slice_type均表示当前条带为I条带,则判断当前视频帧的max_num_ref_frames是否均等于或小于1;如果当前视频帧的max_num_ref_frames均等于或小于1,则判断当前视频帧满足所述两个条件,其中,更新first_field的步骤包括:判断当前条带是否属于场编码模式;如果当前条带不属于场编码模式,则将first_field更新为0,否则判断未更新时的first_field是否为1;如果未更新时的first_field不为1,则将first_field更新为1,否则判断当前条带与上一个条带的场极性是否相同;如果当前条带与上一个条带的场极性相同,则将first_field更新为1,否则判断当前条带与上一个条带的frame_num是否相同;如果当前条带与上一个条带的frame_num不相同,则将first_field更新为1,否则将first_field更新为0。
判断当前条带是否属于场编码模式的步骤可包括:判断当前条带的frame_mbs_only_flag是否为1;如果当前条带的frame_mbs_only_flag为1,则判断当前条带为帧编码模式,否则判断当前条带的field_pic_flag是否为0;如果当前条带的field_pic_flag为0,则判断当前条带为帧编码模式,否则判断当前条带为场编码模式。
判断当前条带与上一个条带的场极性是否相同的步骤可包括:判断当前条带的bottom_field_flag与上一个条带的bottom_field_flag是否为相同的值;如果当前条带的bottom_field_flag和上一个条带的bottom_field_flag相同,则判断当前条带和上一条带的场极性相同,否则判断当前条带和上一个条带的场极性不相同,其中,bottom_field_flag为1表示当前条带属于底场,bottom_field_flag为0表示当前条带属于顶场。
所述方法还可包括:在产生缩略图之后,基于缩略图信息熵最大的原则,从产生的缩略图中提取M个缩略图作为H.264视频文件的最终的缩略图,其中,M为等于或大于1的整数。
基于缩略图信息熵最大的原则,从产生的缩略图中提取多个缩略图的步骤可包括:将产生的缩略图按时间顺序平均分为M个组,其中,前M一1个组中的缩略图数量为通过对(产生的缩略图数量/M)向下取整而得到的数量,第M组中包括剩余的缩略图;分别针对所述M个组的每个组中的缩略图计算信息熵;提取所述M个组的每个组中信息熵最大的缩略图,作为该组的最终的缩略图;输出提取到的M个缩略图,作为H.264视频文件的最终的缩略图。
分别针对所述M个组的每个组中的缩略图计算信息熵的步骤可包括:设置大小为W×H+1的查找表table[W×H+1],其中,W和H分别表示缩略图的宽和高;基于i从0到W×H,依次计算(i/(W×H))×log(i/(W×H))的值,并将计算的值存入table[i];设置一个数组pixelnum[256],并将pixelnum[256]初始化为0,其中,pixelnum[256]表示256个亮度值中的每个亮度值在缩略图的像素中出现的个数;从0到W×H,依次读取缩略图中的像素的亮度值并将pixelnum[该亮度值]的值更新为pixelnum[该亮度值]+1;基于j从0到256,依次查找并累加table[pixelnum[j]]的值;将累加的值作为缩略图的信息熵。
根据本发明的另一方面,提供了一种在H.264视频文件中提取缩略图的设备,所述设备包括:采集时间点设置单元,在H.264视频文件中设置N个采集时间点,其中,N是等于或大于1的整数;搜索单元,从所述N个采集时间点中的每个采集时间点搜索可独立解码帧;缩略图产生单元,通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图。
采集时间点设置单元可通过获得H.264视频文件的总播放时间,通过将所述总播放时间划分为N+1等份,获得包括H.264视频文件的开始时间点和结束时间点的N+2个时间点,将H.264视频文件的开始时间点到结束时间点之间的N个时间点作为所述N个采集时间点,来设置N个采集时间点。
搜索单元可包括:跳转单元,跳转到在H.264视频文件中与所述N个采集时间点中的当前采集时间点相应的码流位置;解析单元,从所述码流位置开始解析视频帧;存储单元,存储解析单元对视频帧进行解析后获得的关于视频帧的信息;可独立解码帧确定单元,基于所述关于视频帧的信息,确定视频帧是否可独立解码,直到获得一个可独立解码帧,或者直到当前采集时间点到下一个采集时间点之间的帧已解析并确定完毕还未获得可独立解码帧。
解析单元可通过解析当前视频帧数据中的所有网络提取层NAL单元,并从所有NAL单元中的每个条带的头信息以及每个条带所参考的序列参数集SPS中提取所述关于视频帧的信息来解析视频帧,所述关于视频帧的信息可包括以下信息中的至少一个:条带类型slice_type、帧号frame_num、帧标志frame_mbs_only_flag、场标志field_pic_flag、底场标志bottom_field_flag、最大参考帧数量max_num_ref_frames。
可独立解码帧确定单元可通过判断当前视频帧的所有条带是否均为I条带来确定当前视频帧是否是可独立解码帧,当当前视频帧的所有条带均为I条带时,可独立解码帧确定单元确定可当前视频帧是可独立解码帧。
可独立解码帧确定单元可通过判断当前视频帧中的所有条带的slice_type就否均表示当前条带为I条带来判断当前视频帧中的所有条带是否均为I条带,如果当前视频帧中的所有条带的slice_type均表示当前条带为I条带,则可独立解码帧确定单元可判断当前视频帧的所有条带均为I条带。
可独立解码帧确定单元可判断当前视频帧是否满足以下两个条件来确定当前视频帧是否是可独立解码帧:(1)当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,(2)当前视频帧最大参考帧数量小于或等于1,当当前视频帧满足所述两个条件时,可独立解码帧确定单元可确定当前帧是可独立解码帧。
可独立解码帧确定单元还可包括设置单元,设置单元可设置变量first_field,并且将first_field的初始值设置为0,并将first_field存储在存储单元,其中,first_field为1表示当前条带属于场编码模式,并且属于解码顺序上的第一场,如果当前条带是当前图像的第一个条带,则设置单元更新first_field,并将更新的first_field存储在存储单元,其中,当前图像为场编码模式下的场图像或者帧编码模式下的帧图像,当first_field被更新为1时,可独立解码帧确定单元可判断当前图像中的所有条带的slice_type是否均表示当前条带为I条带,如果当前图像中的所有条带的slice_type均表示当前条带为I条带,则可独立解码帧确定单元可判断当前图像中的所有条带的max_num_ref_frames是否均等于或小于1,如果当前图像中的所有条带的max_num_ref_frames均等于或小于1,则可独立解码帧确定单元可判断当前视频帧满足所述两个条件,其中,当设置单元更新first_field时,设置单元可判断当前条带是否属于场编码模式;如果当前条带不属于场编码模式,则设置单元可将first_field更新为0,否则设置单元可判断未更新时的first_field是否为1;如果未更新时的first_field不为1,则设置单元可将first_field更新为1,否则设置单元可判断当前条带与上一个条带的场极性是否相同;如果当前条带与上一个条带的场极性相同,则设置单元可将first_field更新为1,否则设置单元可判断当前条带与上一个条带的frame_num是否相同;如果当前条带与上一个条带的frame_num不相同,则设置单元可将first_field更新为1,否则设置单元可将first_field更新为0。
当设置单元判断当前条带是否属于场编码模式时,可判断当前条带的frame_mbs_only_flag是否为1;如果当前条带的frame_mbs_only_flag为1,则设置单元可判断当前条带为帧编码模式,否则设置单元可判断当前条带的field_pic_flag是否为0;如果当前条带的field_pic_flag为0,则设置单元可判断当前条带为帧编码模式,否则设置单元可判断当前条带为场编码模式。
当设置单元判断当前条带与上一个条带的场极性是否相同时,可判断当前条带的bottom_field_flag与上一个条带的bottom_field_flag是否为相同的值;如果当前条带的bottom_field_flag和上一个条带的bottom_field_flag相同,则设置单元可判断当前条带和上一条带的场极性相同,否则设置单元可判断当前条带和上一个条带的场极性不相同,其中,bottom_field_flag为1可表示当前条带属于底场,bottom_field_flag为0可表示当前条带属于顶场。
所述设备还可包括:缩略图提取单元,在产生缩略图之后,基于缩略图信息熵最大的原则,从产生的缩略图中提取M个缩略图作为H.264视频文件的最终的缩略图,其中,M为等于或大于1的整数。
缩略图提取单元可包括:分组单元,将产生的缩略图按时间顺序平均分为M个组,其中,前M-1个组中的缩略图数量为通过对(产生的缩略图数量/M)向下取整而得到的数量,第M组中包括剩余的缩略图;信息熵计算单元,分别针对所述M个组的每个组中的缩略图计算信息熵;提取单元,提取所述M个组的每个组中信息熵最大的缩略图,作为该组的最终的缩略图;输出单元,输出提取到的M个缩略图,作为H.264视频文件的最终的缩略图。
信息熵计算单元可通过设置大小为W×H+1的查找表table[W×H+1],其中,W和H分别表示缩略图的宽和高;基于i从0到W×H,依次计算(i/(W×H))×log(i/(W×H))的值,并将计算的值存入table[i];设置一个数组pixelnum[256],并将pixelnum[256]初始化为0,其中,pixelnum[256]表示256个亮度值中的每个亮度值在缩略图的像素中出现的个数;从0到W×H,依次读取缩略图中的像素的亮度值并将pixelnum[该亮度值]的值更新为pixelnum[该亮度值]+1;基于j从0到256,依次查找并累加table[pixelnum[j]]的值;将累加的值作为缩略图的信息熵,来计算缩略图的信息熵。
所述方法和设备可在H.264视频文件中有效地提取缩略图,尤其是在一些H.264视频文件中缺乏IDR帧的情况下,可对这些H.264视频文件进行有效的缩略图提取操作。此外,所述方法和设备还提供了通过建立查找表来计算缩略图的信息熵以提取缩略图,从而降低了计算信息熵的复杂度,提高了计算效率。
附图说明
通过结合附图,从实施例的下面描述中,本发明这些和/或其它方面及优点将会变得清楚,并且更易于理解,其中:
图1是根据本发明的实施例的在H.264视频文件中提取缩略图的设备的框图;
图2是根据本发明的实施例的设置采集时间点的示意图;
图3是根据本发明的实施例的在H.264视频文件中提取缩略图的方法的流程图;
图4是根据本发明的实施例的确定当前视频帧是否为可独立解码帧的操作的流程图;
图5是根据本发明的实施例的更新变量first_field的操作的流程图;
图6是根据本发明的实施例的提取缩略图的操作的流程图;
图7是根据本发明的实施例的计算缩略图信息熵的操作的流程图。
具体实施方式
提供参照附图的以下描述以帮助对由权利要求及其等同物限定的本发明的实施例的全面理解。包括各种特定细节以帮助理解,但这些细节仅被视为是示例性的。因此,本领域的普通技术人员将认识到在不脱离本发明的范围和精神的情况下,可对描述于此的实施例进行各种改变和修改。此外,为了清楚和简洁,省略对公知的功能和结构的描述。
根据本发明的提取缩略图的设备在提取视频缩略图时,仅需要对选定的某个视频帧进行解码和缩放,而不需要对该视频帧之后的视频帧数据进行解码,因此,仅需要提取离指定采集时间点最近的可独立解码帧。所述可独立解码帧可以是I帧或SEI(辅助增强信息)指明的恢复点,而并需要是IDR帧。
图1是根据本发明的实施例的在H.264视频文件中提取缩略图的设备100的框图。
参照图1,设备100可包括:采集时间点设置单元101、搜索单元102和缩略图产生单元103。下面,将参照图1详细介绍设备100的各个部件。
当接收到H.264视频文件时,采集时间点设置单元101可在接收到的H.264视频文件中设置N个采集时间点,其中,N为等于或大于1的整数。所述采集时间点是指在该时间点及该时间点附近可采集视频帧以提取缩略图。本领域的技术人员可知,采集时间点的数量N可以是默认设置的也可以是用户根据需要设置的。
具体地,采集时间点设置单元101可从关于接收到的H.264视频文件的文件信息中获得该文件的总播放时间T,并通过将所述总播放时间T划分为N+1等份,获得包括该文件的开始时间点t0和结束时间点tT的N+2个时间点t0、t1、t2、…、tN、tT(如图2所示)。考虑到视频文件的片头和片尾通常是序幕、演员表等,这些视频内容通常不是用户所关心的内容,不适合用作视频缩略图,因此,采集时间点设置单元101可将该文件的开始时间点t0到结束时间点tT之间的N个时间点t1、t2、…、tN作为所述N个采集时间点。本领域的技术人员可知,本发明不限于此,本发明的其它实施例也可将开始时间点t0和结束时间点tT作为采集时间点。
当采集时间点设置单元设置了N个采集时间点时,搜索单元102可从所述N个采集时间点中的每个采集时间点开始搜索可独立解码帧。
具体地,搜索单元102可包括跳转单元105、解析单元106、存储单元107和可独立解码帧确定单元108。搜索单元102的跳转单元105、解析单元106、存储单元107和可独立解码帧确定单元108可在所述N个采集时间点中的每个采集时间点执行下面的操作:跳转单元105在H.264视频文件中跳转到与当前采集时间点相应的码流位置;解析单元106从所述码流位置开始解析视频帧;存储单元107存储解析单元106对视频帧进行解析后获得的关于视频帧的信息、可独立解码帧确定单元108基于所述关于视频帧的信息,确定视频帧是否可独立解码,直到获得一个可独立解码帧,或者直到当前采集时间点到下一个采集时间点之间的帧已解析并确定完毕还未获得可独立解码帧。
也就是说,当在当前采集时间点到下一个采集时间点之间的视频帧中没有获得可独立解码帧时,可独立解码帧确定单元108可确定在当前采集时间点没有可独立解码帧,从而跳转单元105可跳转到与下一个采集时间点相应的码流位置,解析单元106、存储单元107和可独立解码帧确定单元108可在与下一个采集时间点相应的码流位置进行相应操作。
当当前视频帧满足以下两个条件之一时,可独立解码帧确定单元108可确定当前视频帧为可独立解码帧:(1)当前视频帧的所述条带(slice)均为I条带,(2)当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,并且当前视频帧的最大参考帧数量小于或等于1。下面将详细描述可独立解码帧确定单元108的操作。
解析单元106可对当前视频帧数据中的所有NAL(Network Abstraction Layer,网络提取层)单元进行解析。NAL单元可包括具有序列参数集SPS的NAL单元、具有条带和条带头的NAL单元等。NAL单元中的条带的部分参数可参考SPS来获得。因此,解析单元106可从NAL单元的每个条带的头信息以及每个条带参考的SPS中提取以下关于视频帧的信息中的至少一个:条带类型(slice_type)、帧号(frame_num)、帧标志(frame_mbs_only_flag)、场标志(field_pic_flag)、底场标志(bottom_field_flag)、最大参考帧数量(max_num_ref_frames),并将提取的关于视频帧的信息存储在存储单元107中。
具体地,条带类型(slice_type)可从每个条带头中被提取,表示当前条带是I条带、P条带还是B条带。帧号(frame_num)可从每个条带头中被提取,表示当前条带属于第几个视频帧。帧标志(frame_mbs_only_flag)可参考SPS来获得,frame_mbs_only_flag为1表示参考该SPS的所有条带为帧编码模式。场标志(field_pic_flag)可从每个条带头中被提取,表示当前条带是否为场编码模式,其中,field_pic_flag为1表示当前条带为场编码模式,field_pic_flag为0表示当前条带为帧编码模式。底场标志(bottom_field_flag)可从每个条带头中被提取,表示当前条带属于顶场还是底场,其中,bottom_field_flag为1表示当前条带属于底场,bottom_field_flag为0表示当前条带属于顶场。最大参考帧数量(max_num_ref_frames)可参考SPS来获得,表示当前视频帧可参考的帧或场的最大数量,其中,属于同一个视频帧的所有条带对应于SPS中的同一个max_num_ref_frames信息。
下面,将详细描述可独立解码帧确定单元108判断当前视频帧是否满足条件(1)的过程。
可独立解码帧确定单元108可以以条带为单位,依次判断当前视频帧中的所有条带的slice_type是否均表示当前条带为I条带。
如果当前视频帧中的所有条带的slice_type均表示当前条带为I条带,则可独立解码帧确定单元108可判断当前视频帧的所有条带均为I条带,从而可确定当前视频帧为可独立解码帧。
此外,下面,将详细描述可独立解码帧确定单元108判断当前视频帧是否满足条件(2)的过程。
可独立解码帧确定单元108可包括设置单元109。设置单元109可设置变量first_field,并且将first_field的初始值设置为0,并将first_field存储在存储单元107中,其中,first_field为1表示当前条带属于场编码模式,并且属于解码顺序上的第一场。并且,当解析单元106对当前视频帧进行解码时,设置单元109可实时更新first_field。
当可独立解码帧确定单元108以条带为单位对当前视频帧的条带进行判断时,如果该条带是当前图像的第一个条带,则设置单元109可对变量first_field进行更新,并将更新的first_field存储在存储单元107中。
这里,本领域的技术人员可知,当前视频帧可以是帧编码模式或者场编码模式,当当前视频帧在帧编码模式下被编码时,其可以由一个帧图像构成。当当前视频帧在场编码模式下被编码时,其可以由两个场(即,顶场和底场)图像构成。因此,所述当前图像是指当前访问的单元,可以是场编码模式下的场图像或者帧编码模式下的帧图像。
当设置单元109更新first_field时,设置单元109判断当前条带是否属于场编码模式。如果当前条带不属于场编码模式,则设置单元将first_field更新为0。
如果当前条带属于场编码模式,则设置单元109判断未更新时的first_field是否为1。如果未更新时的first_field不为1,则设置单元109将first_field更新为1。
这是因为,first_field为0时只有两种情况,第一种情况是上一个图像是帧编码模式,第二种情况是上一个图像是两个场编码图像中的解码顺序在后的场图像。如果未更新时的first_field为0,也就是说上一个图像是帧编码模式或者是两个场图像中的解码顺序在后的场图像,则在当前图像为场图像的前提下,当上一个图像是帧编码模式时,当前图像必然是另一个视频帧的场编码模式下的第一场图像(即,编码顺序在前的场图像);当上一个图像是两个场编码图像中的解码顺序在后的场图像时,当前图像必然是另一个视频帧的场编码模式下的第一场图像(即,编码顺序在前的场图像)。
如果未更新时的first_field为1,则设置单元109判断当前条带与上一个条带的场极性是否相同(即,是否都属于顶场或都属于底场);如果当前条带与上一个条带的场极性相同,则设置单元109将first_field更新为1。
这是因为,如果当前条带与上一个条带的场极性相同,则可推导出当前条带与上一个条带必然不属于同一个视频帧,当前条带属于一个新的视频帧,并且在当前图像为场图像的前提下,当前条带必然属于两个场图像中的编码顺序在前的场图像。判断当前条带与上一个条带的场极性主要是考虑到视频码流中存在视频帧为场编码模式,但只有一场的情况。
如果当前条带与上一个条带的场极性不相同,则设置单元109判断当前条带与上一个条带的frame_num是否相同;如果当前条带与上一个条带的frame_num不相同,则设置单元109将first_field更新为1,否则设置单元109将first_field更新为0。
这是因为,如果当前条带与上一个条带的frame_num不相同,则表示当前条带与上一个条带不属于同一个视频帧,当前条带属于一个新的视频帧,并且在当前图像为场图像的前提下,当前条带必然属于两个场图像中的编码顺序在前的场图像。
此外,当设置单元109判断当前条带是否属于场编码模式时,可判断当前条带的frame_mbs_only_flag是否为1。如果当前条带的frame_mbs_only_flag为1,则设置单元109可判断当前条带为帧编码模式,否则设置单元109可判断当前条带的field_pic_flag是否为0。如果当前条带的field_pic_flag为0,则设置单元109可判断当前条带为帧编码模式,否则设置单元判断当前条带为场编码模式。
此外,当设置单元109判断当前条带与上一个条带的场极性是否相同时,可判断当前条带的bottom_field_flag与上一个条带的bottom_field_flag是否为相同的值。如果当前条带的bottom_field_flag和上一个条带的bottom_field_flag相同,则设置单元109可判断当前条带和上一条带的场极性相同,否则设置单元109可判断当前条带和上一个条带的场极性不相同。其中,bottom_field_flag为1可表示当前条带属于底场,bottom_field_flag为0可表示当前条带属于顶场。
如果first_field被更新为1,则可独立解码帧确定单元108可判断当前图像中的所有条带的slice_type是否均表示当前条带为I条带。如果first_field被更新为0,则可独立解码帧确定单元108可当前图像的下一个图像进行上述操作。
如果当前图像中的所有条带的slice_type均表示当前条带为I条带,则可独立解码帧确定单元108可判断当前视频帧的max_num_ref_frames是否均等于或小于1。如果当前图像中的所有条带的slice_type不是均表示当前条带为I条带,则可独立解码帧确定单元108可确定当前视频帧不是可独立解码帧。
如果当前视频帧的max_num_ref_frames均等于或小于1,则可独立解码帧确定单元108可确定当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,并且最大参考帧数量小于或等于1,从而确定当前视频帧是可独立解码帧。如果当前视频帧的max_num_ref_frames不是均等于或小于1,则在操作410,可独立解码帧确定单元108可确定当前视频帧不是可独立解码帧。
当搜索单元102对所述N个采集时间点的所有采集时间点都搜索完毕时,缩略图产生单元103可通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图。
此外,设备100还可包括缩略图提取单元104。缩略图提取单元104可在产生缩略图之后,基于缩略图信息熵最大的原则,从产生的缩略图中提取M个缩略图作为H.264视频文件的最终的缩略图。其中,M为等于或大于1的整数。
具体地,缩略图提取单元104可包括分组单元110,将产生的缩略图按时间顺序平均分为M个组,其中,前M-1个组中的缩略图数量为对(产生的缩略图数量/M)向下取整(即,产生的缩略图数量/M」),第M组中包括剩余的缩略图;信息熵计算单元111,分别针对所述M个组的每个组中的缩略图计算信息熵;提取单元112,提取所述M个组的每个组中信息熵最大的缩略图,作为该组的最终的缩略图;输出单元113,输出提取到的M个缩略图,作为H.264视频文件的最终的缩略图。
其中,传统的信息熵计算方法如下:
其中,pi为0至255中的每个灰度值在图像所有像素值中所占的比例。从等式(1)中可以看出,计算信息熵的过程中存在大量的乘法和对数运算,因此,直接使用等式(1)进行信息熵求值时的计算复杂度很高,严重影响计算效率。
本发明提出了通过建立查找表来计算缩略图的信息熵的方法,使得在计算缩略图信息熵的过程中仅需要进行查表和加法的操作,简化了计算复杂度,提高了计算效率。下面,将具体详细根据本发明的信息熵计算单元111的操作。
信息熵计算单元111可设置大小为W×H+1的查找表table[W×H+1],其中,W和H分别表示缩略图的宽和高。例如,信息熵计算单元111可在内存(未示出)中申请一段内存空间float table[W×H+1],示例性的指令如表1所示。
表1
double*table=(double*)malloc(w*h*sizeof(double)+1); |
随后,信息熵计算单元111可基于i从0到W×H,依次计算(i/(W×H))×log(i/(W×H))的值,并将计算的值存入table[i]。示例性的指令如表2所示。
表2
随后,信息熵计算单元111可设置一个数组pixelnum[256],并将pixelnum[256]初始化为0,其中,pixelnum[256]表示256个亮度值中的每个亮度值在缩略图的像素中出现的个数。例如,信息熵计算单元11l可在内存(未示出)中申请一段内存空间int pixelnum[256]。
随后,信息熵计算单元111可基于i从0到W×H,依次读取缩略图中的像素Pi的亮度值picture[i](其中,picture[i]=0,1,…256),并将pixelnum[picture[i]]的值更新为pixelnum[picture[i]]+1。例如,信息熵计算单元111可对数组int pixelnum[256]进行的示例性操作如表3所示。
表3
随后,信息熵计算单元111可基于j从0到256,依次查找并累加table[pixelnum[j]]的值,并将累加的值作为缩略图的信息熵。例如,信息熵计算单元111可在内存中设置一个变量sum来表示作为缩略图的信息熵的累加值,其示例性操作如表4所示。
表4
本领域的技术人员可知,在多核处理器的情况下,可以根据CPU的数量开启多个线程来同时进行信息熵的计算,这样更加能够提高计算效率。
图3是根据本发明的实施例的在H.264视频文件中提取缩略图的方法的流程图。
参照图3,在操作301,采集时间点设置单元101可在接收到的H.264视频文件中设置N个采集时间点,其中,N为等于或大于1的整数。
具体地,采集时间点设置单元101可从关于接收到的H.264视频文件的文件信息中获得该文件的总播放时间T,并通过将所述总播放时间T划分为N+1等份,获得包括该文件的开始时间点t0和结束时间点tT的N+2个时间点t0、t1、t2、…、tN、tT(如图2所示),并且可将该文件的开始时间点t0到结束时间点tT之间的N个时间点t1、t2、…、tN作为所述N个采集时间点。
在操作302,搜索单元102可从所述N个采集时间点中的每个采集时间点搜索可独立解码帧。
具体地,搜索单元102的跳转单元105、解析单元106、存储单元107和可独立解码帧确定单元108可在所述N个采集时间点中的每个采集时间点执行下面的操作:跳转单元105在H.264视频文件中跳转到与当前采集时间点相应的码流位置;解析单元106从所述码流位置开始解析视频帧;存储单元107存储解析单元106对视频帧进行解析后获得的关于视频帧的信息、可独立解码帧确定单元108基于所述关于视频帧的信息,确定视频帧是否可独立解码,直到获得一个可独立解码帧,或者直到当前采集时间点到下一个采集时间点之间的帧已解析并确定完毕还未获得可独立解码帧。
解析单元106可对当前视频帧数据中的所有NAL单元进行解析,并从所有NAL单元的每个条带的头信息以及每个条带所参考的序列参数集SPS中提取以下关于视频帧的信息中的至少一个:条带类型(slice_type)、帧号(frame_num)、帧标志(frame_mbs_only_flag)、场标志(field_pic_flag)、底场标志(bottom_field_flag)、最大参考帧数量(max_num_ref_frames),并将提取的关于视频帧的信息存储在存储单元107中。
当当前视频帧满足以下两个条件之一时,可独立解码帧确定单元108可确定当前视频帧为可独立解码帧:(1)当前视频帧的所述条带(slice)均为I条带,(2)当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,并且当前视频帧的最大参考帧数量小于或等于1。稍后,将参照图4详细描述确定当前视频帧是否为可独立解码帧的操作。
在操作303,缩略图产生单元103可通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图。
此外,根据本发明的所述方法还可包括操作304。在操作304,缩略图提取单元104可基于缩略图信息熵最大的原则,从产生的缩略图中提取M个缩略图作为H.264视频文件的最终的缩略图。其中,M为等于或大于1的整数。稍后,将参照图6详细描述缩略图提取单元104基于缩略图信息熵最大的原则提取缩略图的方法。
图4是根据本发明的实施例的确定当前视频帧是否为可独立解码帧的操作的流程图。
在操作401,设置单元109设置变量first_field,并且将first_field的初始值设置为0,并将first_field存储在存储单元107中,其中,first_field为1表示当前条带属于场编码模式,并且属于解码顺序上的第一场。
在操作402,可独立解码帧确定单元108可从存储单元107接收当前视频帧中的所有条带的以下关于视频帧的信息中的至少一个:条带类型slice_type、帧号frame_num、帧标志frame_mbs_only_flag、场标志field_pic_flag、底场标志bottom_field_flag、最大参考帧数量max_num_ref_frames。
在操作403,可独立解码帧确定单元108判断当前条带是否是当前图像的第一个条带。这里,本领域的技术人员可知,当前视频帧可以是帧编码模式或者场编码模式,当当前视频帧在帧编码模式下被编码时,其可以由一个帧图像构成。当当前视频帧在场编码模式下被编码时,其可以由两个场(即,顶场和底场)图像构成。因此,当前图像是指当前访问的单元,可以是场编码模式下的场图像或者帧编码模式下的帧图像。
如果当前条带是当前图像的第一个条带(操作403的是),则在操作404,设置单元109可对变量first_field进行更新,并将更新的first_field存储在存储单元107中。稍后,将参照图5详细描述设置单元109更新first_field的操作。
如果当前条带不是当前图像的第一个条带(操作403的否),设置单元109不对变量first_field进行更新。
在操作405,可独立解码帧确定单元108依次判断当前视频帧中的所有条带的slice_type是否均表示当前条带为I条带。
如果当前视频帧中的所有条带的slice_type均表示当前条带为I条带(操作405的是),则可独立解码帧确定单元108可判断当前视频帧的所有条带均为I条带,从而在操作406,可独立解码帧确定单元108可确定当前视频帧为可独立解码帧。
如果当前视频帧中的所有条带的slice_type不是均表示当前条带为I条带(操作406的否),则在操作407,可独立解码帧确定单元108判断first_field是否为1。
如果first_field为1(操作407的是),则在操作408,可独立解码帧确定单元108可判断当前图像中的所有条带的slice_type是否均表示当前条带为I条带。
如果first_field为0(操作407的否),则可独立解码帧确定单元108可确定对当前图像的下一个图像进行上述操作。
如果当前图像中的所有条带的slice_type均表示当前条带为I条带(操作408的是),则在操作409,可独立解码帧确定单元108可判断当前视频帧的max_num_ref_frames是否等于或小于1。
如果当前图像中的所有条带的slice_type不是均表示当前条带为I条带(操作408的否),则在操作410,可独立解码帧确定单元108可确定当前视频帧不是可独立解码帧。
如果当前视频帧的max_num_ref_frames等于或小于1(操作409的是),则在操作406,可独立解码帧确定单元108可确定当前视频帧是可独立解码帧。
如果当前视频帧的max_num_ref_frames不是等于或小于1(操作409的否),则在操作410,可独立解码帧确定单元108可确定当前视频帧不是可独立解码帧。
图5是根据本发明的实施例的更新变量first_field的操作的流程图。
参照图5,在操作501,设置单元109判断当前条带是否属于场编码模式。
具体地,设置单元109可判断当前条带的frame_mbs_only_flag是否为1。如果当前条带的frame_mbs_only_flag为1,则设置单元109可判断当前条带为帧编码模式,否则设置单元109可判断当前条带的field_pic_flag是否为0。如果当前条带的field_pic_flag为0,则设置单元109可判断当前条带为帧编码模式,否则设置单元判断当前条带为场编码模式。
如果当前条带不属于场编码模式(操作501的否),则在操作502,设置单元109可将first_field更新为0。
如果当前条带属于场编码模式(操作501的是),则在操作503,设置单元109判断未更新时的first_field是否为1。
如果未更新时的first_field不为1(操作503的否),则在操作504,设置单元109将first_field更新为1。
如果未更新时的first_field为1(操作503的是),则在操作505,设置单元109可判断当前条带与上一个条带的场极性是否相同(即,是否都属于顶场或都属于底场)。
具体地,设置单元109可判断当前条带的bottom_field_flag与上一个条带的bottom_field_flag是否为相同的值。如果当前条带的bottom_field_flag和上一个条带的bottom_field_flag相同,则设置单元109可判断当前条带和上一条带的场极性相同,否则设置单元109可判断当前条带和上一个条带的场极性不相同。其中,bottom_field_flag为1可表示当前条带属于底场,bottom_field_flag为0可表示当前条带属于顶场。
如果当前条带与上一个条带的场极性相同(操作505的是),则在操作504,设置单元109将first_field更新为1。
如果当前条带与上一个条带的场极性不相同(操作505的否),则在操作506,设置单元109判断当前条带与上一个条带的frame_num是否相同。
如果当前条带与上一个条带的frame_num不相同(操作505的否),则在操作504,设置单元109将first_field更新为1,否则在操作502,设置单元109将first_field更新为0。
图6是根据本发明的实施例的提取缩略图的操作的流程图。
参照图6,在操作601,分组单元110可将产生的缩略图按时间顺序平均分为M个组,其中,前M-1个组中的缩略图数量为通过对(产生的缩略图数量/M)向下取整而得到的数量(即,产生的缩略图数量/M」),第M组中包括剩余的缩略图。
在操作602,信息熵计算单元111分别针对所述M个组的每个组中的缩略图计算信息熵。稍后,将参照图7详细描述根据本发明的实施例的计算缩略图信息熵的方法。
在操作603,提取单元112提取所述M个组的每个组中信息熵最大的缩略图,作为该组的最终的缩略图。
在操作604,输出单元113输出提取到的M个缩略图,作为H.264视频文件的最终的缩略图。
图7是根据本发明的实施例的计算缩略图信息熵的操作的流程图。
参照图7,在操作701,信息熵计算单元111可设置大小为W×H+1的查找表table[W×H+1],其中,W和H分别表示缩略图的宽和高。
在操作702,信息熵计算单元111可基于i从0到W×H,依次计算(i/(W×H))×log(i/(W×H))的值,并将计算的值存入table[i]。
在操作703,信息熵计算单元111可设置一个数组pixelnum[256],并将pixelnum[256]初始化为0,其中,pixelnum[256]表示256个亮度值中的每个亮度值在缩略图的像素中出现的个数。
在操作704,信息熵计算单元111可基于i从0到W×H,依次读取缩略图中的像素Pi的亮度值picture[i](其中,picture[i]=0,1,…256),并将pixelnum[picture[i]]的值更新为pixelnum[picture[i]]+1。
在操作705,信息熵计算单元111可基于j从0到256,依次查找并累加table[pixelnum[j]]的值,并将累加的值作为缩略图的信息熵。
根据本发明的计算缩略图信息熵的方法与传统的信息熵计算方法相比,降低了计算复杂度,提高了计算效率。此外,本领域的技术人员可知,在多核处理器的情况下,可以根据CPU的数量开启多个线程来同时进行信息熵的计算,这样更加能够提高计算效率。
本发明提供了一种在H.264视频文件中提取缩略图的方法和设备,所述方法和设备搜索H.264视频文件中的可独立解码帧,并基于搜索到的可独立解码帧产生缩略图。所述方法和设备可在H.264视频文件中有效地提取缩略图,尤其是在一些H.264视频文件中缺乏IDR帧的情况下,可对这些H.264视频文件进行有效的缩略图提取操作。此外,所述方法和设备还提供了一种基于缩略图信息熵最大的原则筛选并提取缩略图的方法,并通过建立查找表来计算缩略图的信息熵,从而降低了计算信息熵的复杂度,提高了计算效率。
可根据计算机程序指令来执行根据本发明的上述方法。由于这些程序指令可被包括在计算机、专用处理器或可编程或专用硬件中,因此在其中执行的指令可有利于上述的功能的执行。如本领域的技术人员所理解的,计算机、处理器或可编程硬件包括可存储或接收软件或计算机代码的存储器件,所述软件或计算机代码在被计算机、处理器或硬件访问和执行时实现在本发明中描述的方法。
虽然本发明是参照其示例性的实施例被显示和描述的,但是本领域的技术人员应该理解,在不脱离由权利要求及其等同物限定的本发明的精神和范围的情况下,可以对其形式和细节进行各种改变。
Claims (26)
1.一种在H.264视频文件中提取缩略图的方法,所述方法包括:
在H.264视频文件中设置N个采集时间点,其中,N是等于或大于1的整数;
从所述N个采集时间点中的每个采集时间点搜索可独立解码帧;
通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图,
其中,可独立解码帧满足以下两个条件之一:当前视频帧的所有条带均为I条带;当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,并且当前视频帧的最大参考帧数量小于或等于1。
2.如权利要求1所述的方法,其中,设置N个采集时间点的步骤包括:
获得H.264视频文件的总播放时间;
通过将所述总播放时间划分为N+1等份,获得包括H.264视频文件的开始时间点和结束时间点的N+2个时间点;
将H.264视频文件的开始时间点到结束时间点之间的N个时间点作为所述N个采集时间点。
3.如权利要求1所述的方法,其中,通过在所述N个采集时间点中的每个采集时间点执行以下操作来搜索可独立解码帧:
跳转到在H.264视频文件中与当前采集时间点相应的码流位置;
从所述码流位置开始解析视频帧;
存储对视频帧进行解析后获得的关于视频帧的信息;
基于所述关于视频帧的信息,确定视频帧是否可独立解码,直到获得一个可独立解码帧,或者直到当前采集时间点到下一个采集时间点之间的帧已解析并确定完毕还未获得可独立解码帧。
4.如权利要求3所述的方法,其中,解析视频帧的步骤包括:解析当前视频帧数据中的所有网络提取层NAL单元,并从所有NAL单元中的每个条带的头信息以及每个条带所参考的序列参数集SPS中提取所述关于视频帧的信息,
所述关于视频帧的信息包括以下信息中的至少一个:条带类型slice_type、帧号frame_num、帧标志frame_mbs_only_flag、场标志field_pic_flag、底场标志bottom_field_flag、最大参考帧数量max_num_ref_frames。
5.如权利要求4所述的方法,其中,确定视频帧是否可独立解码的步骤包括:
判断当前视频帧的所有条带是否均为I条带;
当当前视频帧的所有条带均为I条带时,确定当前视频帧是可独立解码帧。
6.如权利要求5所述的方法,其中,判断当前视频帧的所有条带是否均为I条带的步骤包括:
判断当前视频帧中的所有条带的slice_type是否均表示当前条带为I条带;
如果当前视频帧中的所有条带的slice_type均表示当前条带为I条带,则判断当前视频帧的所有条带均为I条带。
7.如权利要求4所述的方法,其中,确定视频帧是否可独立解码的步骤包括:
判断当前视频帧是否满足以下两个条件:(1)当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,(2)当前视频帧的最大参考帧数量小于或等于1;
当当前视频帧满足所述两个条件时,确定当前视频帧是可独立解码帧。
8.如权利要求7所述的方法,其中,判断当前视频帧是否满足所述两个条件的步骤包括:
设置并保存变量first_field,并且将first_field的初始值设置为0,其中,first_field为1表示当前条带属于场编码模式,并且属于解码顺序上的第一场;
如果当前条带是当前图像的第一个条带,则更新并保存first_field,其中,当前图像为场编码模式下的场图像或者帧编码模式下的帧图像;
当first_field被更新为1时,判断当前图像中的所有条带的slice_type是否均表示当前条带为I条带;
如果当前图像中的所有条带的slice_type均表示当前条带为I条带,则判断当前视频帧的max_num_ref_frames是否均等于或小于1;
如果当前视频帧的max_num_ref_frames均等于或小于1,则判断当前视频帧满足所述两个条件,
其中,更新first_field的步骤包括:
判断当前条带是否属于场编码模式;
如果当前条带不属于场编码模式,则将first_field更新为0,否则判断未更新时的first_field是否为1;
如果未更新时的first_field不为1,则将first_field更新为1,否则判断当前条带与上一个条带的场极性是否相同;
如果当前条带与上一个条带的场极性相同,则将first_field更新为1,否则判断当前条带与上一个条带的frame_num是否相同;
如果当前条带与上一个条带的frame_num不相同,则将first_field更新为1,否则将first_field更新为0。
9.如权利要求8所述的方法,其中,判断当前条带是否属于场编码模式的步骤包括:
判断当前条带的frame_mbs_only_flag是否为1;
如果当前条带的frame_mbs_only_flag为1,则判断当前条带为帧编码模式,否则判断当前条带的field_pic_flag是否为0;
如果当前条带的field_pic_flag为0,则判断当前条带为帧编码模式,否则判断当前条带为场编码模式。
10.如权利要求8所述的方法,其中,判断当前条带与上一个条带的场极性是否相同的步骤包括:
判断当前条带的bottom_field_flag与上一个条带的bottom_field_flag是否为相同的值;
如果当前条带的bottom_field_flag和上一个条带的bottom_field_flag相同,则判断当前条带和上一条带的场极性相同,否则判断当前条带和上一个条带的场极性不相同,
其中,bottom_field_flag为1表示当前条带属于底场,bottom_field_flag为0表示当前条带属于顶场。
11.如权利要求1所述的方法,还包括:
在产生缩略图之后,基于缩略图信息熵最大的原则,从产生的缩略图中提取M个缩略图作为H.264视频文件的最终的缩略图,其中,M为等于或大于1的整数。
12.如权利要求11所述的方法,其中,基于缩略图信息熵最大的原则,从产生的缩略图中提取多个缩略图的步骤包括:
将产生的缩略图按时间顺序平均分为M个组,其中,前M-1个组中的缩略图数量为通过对(产生的缩略图数量/M)向下取整而得到的数量,第M组中包括剩余的缩略图;
分别针对所述M个组的每个组中的缩略图计算信息熵;
提取所述M个组的每个组中信息熵最大的缩略图,作为该组的最终的缩略图;
输出提取到的M个缩略图,作为H.264视频文件的最终的缩略图。
13.如权利要求12所述的方法,其中,分别针对所述M个组的每个组中的缩略图计算信息熵的步骤包括:
设置大小为W×H+1的查找表table[W×H+1],其中,W和H分别表示缩略图的宽和高;
基于i从0到W×H,依次计算(i/(W×H))×log(i/(W×H))的值,并将计算的值存入table[i];
设置一个数组pixelnum[256],并将pixelnum[256]初始化为0,其中,pixelnum[256]表示256个亮度值中的每个亮度值在缩略图的像素中出现的个数;
从0到W×H,依次读取缩略图中的像素的亮度值并将pixelnum[该亮度值]的值更新为pixelnum[该亮度值]+1;
基于j从0到256,依次查找并累加table[pixelnum[j]]的值;
将累加的值作为缩略图的信息熵。
14.一种在H.264视频文件中提取缩略图的设备,所述设备包括:
采集时间点设置单元,在H.264视频文件中设置N个采集时间点,其中,N是等于或大于1的整数;
搜索单元,从所述N个采集时间点中的每个采集时间点搜索可独立解码帧;
缩略图产生单元,通过对搜索到的可独立解码帧进行解码和缩放,产生缩略图,
其中,可独立解码帧满足以下两个条件之一:当前视频帧的所有条带均为I条带;当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,并且当前视频帧的最大参考帧数量小于或等于1。
15.如权利要求14所述的设备,其中,采集时间点设置单元通过获得H.264视频文件的总播放时间,通过将所述总播放时间划分为N+1等份,获得包括H.264视频文件的开始时间点和结束时间点的N+2个时间点,将H.264视频文件的开始时间点到结束时间点之间的N个时间点作为所述N个采集时间点,来设置N个采集时间点。
16.如权利要求14所述的设备,其中,搜索单元包括:
跳转单元,跳转到在H.264视频文件中与所述N个采集时间点中的当前采集时间点相应的码流位置;
解析单元,从所述码流位置开始解析视频帧;
存储单元,存储解析单元对视频帧进行解析后获得的关于视频帧的信息;
可独立解码帧确定单元,基于所述关于视频帧的信息,确定视频帧是否可独立解码,直到获得一个可独立解码帧,或者直到当前采集时间点到下一个采集时间点之间的帧已解析并确定完毕还未获得可独立解码帧。
17.如权利要求16所述的设备,其中,解析单元通过解析当前视频帧数据中的所有网络提取层NAL单元,并从所有NAL单元中的每个条带的头信息以及每个条带所参考的序列参数集SPS中提取所述关于视频帧的信息来解析视频帧,
所述关于视频帧的信息包括以下信息中的至少一个:条带类型slice_type、帧号frame_num、帧标志frame_mbs_only_flag、场标志field_pic_flag、底场标志bottom_field_flag、最大参考帧数量max_num_ref_frames。
18.如权利要求17所述的设备,其中,可独立解码帧确定单元通过判断当前视频帧的所有条带是否均为I条带来确定当前视频帧是否是可独立解码帧,当当前视频帧的所有条带均为I条带时,可独立解码帧确定单元确定当前视频帧是可独立解码帧。
19.如权利要求18所述的设备,其中,可独立解码帧确定单元通过判断当前视频帧中的所有条带的slice_type就否均表示当前条带为I条带来判断当前视频帧中的所有条带是否均为I条带,如果当前视频帧中的所有条带的slice_type均表示当前条带为I条带,则可独立解码帧确定单元判断当前视频帧的所有条带均为I条带。
20.如权利要求17所述的设备,其中,可独立解码帧确定单元判断当前视频帧是否满足以下两个条件来确定当前视频帧是否是可独立解码帧:(1)当前视频帧为场编码模式,并在解码顺序上靠前的一场中所有条带均为I条带,(2)当前视频帧最大参考帧数量小于或等于1,当当前视频帧满足所述两个条件时,可独立解码帧确定单元确定当前帧是可独立解码帧。
21.如权利要求20所述的设备,其中,可独立解码帧确定单元还包括设置单元,设置单元设置变量first_field,并且将first_field的初始值设置为0,并将first_field存储在存储单元,其中,first_field为1表示当前条带属于场编码模式,并且属于解码顺序上的第一场,
如果当前条带是当前图像的第一个条带,则设置单元更新first_field,并将更新的first_field存储在存储单元,其中,当前图像为场编码模式下的场图像或者帧编码模式下的帧图像,
当first_field被更新为1时,可独立解码帧确定单元判断当前图像中的所有条带的slice_type是否均表示当前条带为I条带,
如果当前图像中的所有条带的slice_type均表示当前条带为I条带,则可独立解码帧确定单元判断当前图像中的所有条带的max_num_ref_frames是否均等于或小于1,
如果当前图像中的所有条带的max_num_ref_frames均等于或小于1,则可独立解码帧确定单元判断当前视频帧满足所述两个条件,
其中,当设置单元更新first_field时,设置单元判断当前条带是否属于场编码模式;如果当前条带不属于场编码模式,则设置单元将first_field更新为0,否则设置单元判断未更新时的first_field是否为1;如果未更新时的first_field不为1,则设置单元将first_field更新为1,否则设置单元判断当前条带与上一个条带的场极性是否相同;如果当前条带与上一个条带的场极性相同,则设置单元将first_field更新为1,否则设置单元判断当前条带与上一个条带的frame_num是否相同;如果当前条带与上一个条带的frame_num不相同,则设置单元将first_field更新为1,否则设置单元将first_field更新为0。
22.如权利要求21所述的设备,其中,当设置单元判断当前条带是否属于场编码模式时,判断当前条带的frame_mbs_only_flag是否为1;如果当前条带的frame_mbs_only_flag为1,则设置单元判断当前条带为帧编码模式,否则设置单元判断当前条带的field_pic_flag是否为0;如果当前条带的field_pic_flag为0,则设置单元判断当前条带为帧编码模式,否则设置单元判断当前条带为场编码模式。
23.如权利要求21所述的设备,其中,当设置单元判断当前条带与上一个条带的场极性是否相同时,判断当前条带的bottom_field_flag与上一个条带的bottom_field_flag是否为相同的值;如果当前条带的bottom_field_flag和上一个条带的bottom_field_flag相同,则设置单元判断当前条带和上一条带的场极性相同,否则设置单元判断当前条带和上一个条带的场极性不相同,
其中,bottom_field_flag为1表示当前条带属于底场,bottom_field_flag为0表示当前条带属于顶场。
24.如权利要求14所述的设备,还包括:
缩略图提取单元,在产生缩略图之后,基于缩略图信息熵最大的原则,从产生的缩略图中提取M个缩略图作为H.264视频文件的最终的缩略图,其中,M为等于或大于1的整数。
25.如权利要求24所述的设备,其中,缩略图提取单元包括:
分组单元,将产生的缩略图按时间顺序平均分为M个组,其中,前M-1个组中的缩略图数量为通过对(产生的缩略图数量/M)向下取整而得到的数量,第M组中包括剩余的缩略图;
信息熵计算单元,分别针对所述M个组的每个组中的缩略图计算信息熵;
提取单元,提取所述M个组的每个组中信息熵最大的缩略图,作为该组的最终的缩略图;
输出单元,输出提取到的M个缩略图,作为H.264视频文件的最终的缩略图。
26.如权利要求25所述的设备,其中,信息熵计算单元通过设置大小为W×H+1的查找表table[W×H+1],其中,W和H分别表示缩略图的宽和高;基于i从0到W×H,依次计算(i/(W×H))×log(i/(W×H))的值,并将计算的值存入table[i];设置一个数组pixelnum[256],并将pixelnum[256]初始化为0,其中,pixelnum[256]表示256个亮度值中的每个亮度值在缩略图的像素中出现的个数;从0到W×H,依次读取缩略图中的像素的亮度值并将pixelnum[该亮度值]的值更新为pixelnum[该亮度值]+1;基于j从0到256,依次查找并累加table[pixelnum[j]]的值;将累加的值作为缩略图的信息熵,来计算缩略图的信息熵。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310090197.8A CN104065966B (zh) | 2013-03-20 | 2013-03-20 | 在h.264视频文件中提取缩略图的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310090197.8A CN104065966B (zh) | 2013-03-20 | 2013-03-20 | 在h.264视频文件中提取缩略图的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104065966A CN104065966A (zh) | 2014-09-24 |
CN104065966B true CN104065966B (zh) | 2017-09-29 |
Family
ID=51553464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310090197.8A Active CN104065966B (zh) | 2013-03-20 | 2013-03-20 | 在h.264视频文件中提取缩略图的方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104065966B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107465954B (zh) * | 2014-12-04 | 2019-09-06 | Oppo广东移动通信有限公司 | 动态缩略图的生成方法及相关产品 |
KR102282463B1 (ko) * | 2015-09-08 | 2021-07-27 | 한화테크윈 주식회사 | 이벤트를 보존하는 비디오 축약 방법 및 이를 위한 장치 |
CN107566784B (zh) * | 2017-07-18 | 2020-02-18 | 西安电子科技大学 | 图像处理方法 |
CN107566772B (zh) * | 2017-07-18 | 2019-10-11 | 西安电子科技大学 | 自适应分辨率的图像处理方法及装置 |
CN109348251B (zh) * | 2018-10-08 | 2021-05-11 | 腾讯科技(深圳)有限公司 | 用于视频播放的方法、装置、计算机可读介质及电子设备 |
CN111147954A (zh) * | 2019-12-30 | 2020-05-12 | 北京奇艺世纪科技有限公司 | 一种缩略图抽取方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540861A (zh) * | 2009-01-14 | 2009-09-23 | 宇龙计算机通信科技(深圳)有限公司 | 一种视频文件的播放方法、系统和移动终端 |
CN101552898A (zh) * | 2008-03-31 | 2009-10-07 | Lg电子株式会社 | 用于再现图像的方法和装置 |
CN102075756A (zh) * | 2011-01-27 | 2011-05-25 | 北京视博云科技有限公司 | 视频多帧预测编解码方法和装置 |
CN102497554A (zh) * | 2011-12-16 | 2012-06-13 | 杭州士兰微电子股份有限公司 | 章节到帧的划分方法 |
CN102932679A (zh) * | 2012-11-21 | 2013-02-13 | 合一网络技术(北京)有限公司 | 一种网络视频预览系统和方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8397258B2 (en) * | 2009-08-19 | 2013-03-12 | Lg Electronics Inc. | Image display apparatus and method for operating an image display apparatus |
US9363579B2 (en) * | 2010-12-22 | 2016-06-07 | Google Inc. | Video player with assisted seek |
-
2013
- 2013-03-20 CN CN201310090197.8A patent/CN104065966B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101552898A (zh) * | 2008-03-31 | 2009-10-07 | Lg电子株式会社 | 用于再现图像的方法和装置 |
CN101540861A (zh) * | 2009-01-14 | 2009-09-23 | 宇龙计算机通信科技(深圳)有限公司 | 一种视频文件的播放方法、系统和移动终端 |
CN102075756A (zh) * | 2011-01-27 | 2011-05-25 | 北京视博云科技有限公司 | 视频多帧预测编解码方法和装置 |
CN102497554A (zh) * | 2011-12-16 | 2012-06-13 | 杭州士兰微电子股份有限公司 | 章节到帧的划分方法 |
CN102932679A (zh) * | 2012-11-21 | 2013-02-13 | 合一网络技术(北京)有限公司 | 一种网络视频预览系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104065966A (zh) | 2014-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104065966B (zh) | 在h.264视频文件中提取缩略图的方法和设备 | |
US10448031B2 (en) | Method of generating media file and storage medium storing media file generation program | |
CN107644085B (zh) | 体育赛事新闻的生成方法和装置 | |
CN107707931B (zh) | 根据视频数据生成解释数据、数据合成方法及装置、电子设备 | |
US11475666B2 (en) | Method of obtaining mask frame data, computing device, and readable storage medium | |
CN104811703B (zh) | 视频的编码方法和装置及视频的解码方法和装置 | |
CN107222795B (zh) | 一种多特征融合的视频摘要生成方法 | |
CN109862391A (zh) | 视频分类方法、介质、装置和计算设备 | |
CN107959863B (zh) | 一种视频审核方法及系统 | |
CN103067702B (zh) | 一种用于具有静止画面视频的视频浓缩方法 | |
US11871086B2 (en) | Method of displaying comment information, computing device, and readable storage medium | |
TW201733355A (zh) | 視訊串流中興趣場景節段及區域之處理技術 | |
CN111954060B (zh) | 弹幕蒙版的渲染方法、计算机设备及可读存储介质 | |
CN107483980A (zh) | 对视频进行编码和解码的方法以及计算机可读存储介质 | |
EP2319223A1 (en) | Scalable video providing and reproducing system and methods thereof | |
CN113038222A (zh) | 视频处理方法、装置、电子设备及存储介质 | |
CN105635715A (zh) | 视频格式识别方法及装置 | |
CN104168482B (zh) | 一种视频编解码方法及装置 | |
CN111968031A (zh) | 一种图像拼接方法、装置、存储介质及电子装置 | |
Sun et al. | Enhancing Blind Video Quality Assessment with Rich Quality-aware Features | |
CN111954082B (zh) | 蒙版文件结构、蒙版文件的读取方法、计算机设备及可读存储介质 | |
CN111954081B (zh) | 获取蒙版数据的方法、计算机设备及可读存储介质 | |
CN107613303B (zh) | 视频隐写分析方法、装置、设备及计算机可读存储介质 | |
CN115396697B (zh) | 一种视频数据传输方法、系统及存储设备 | |
CN115209079B (zh) | 一种适用于高速摄像机长时间存储数据的方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |