一种用于Matroska格式视频的修复方法和系统技术方案

技术编号:32855031 阅读:13 留言:0更新日期:2022-03-30 19:24
公开了一种用于Matroska格式视频的修复方法和系统,包括获取与损坏文件具有相同音视频参数的参考文件,从参考文件起始位置解析EBML Head获取EBML版本和文档类型信息;从损坏文件获取块集合,块集合包括存在连续有效的简单块和有效块组;遍历块集合,若通过参考文件判断块集合中的块的目标编号不为视频轨道,则提取视频帧存入有效帧集合;若为视频轨道,基于参考文件将有效帧存入有效帧集合;基于参考文件的视频帧率,设置有效帧集合中每一个视频帧的时间戳,依次写入音视频帧数据。本发明专利技术支持Matroska封装的视频格式,只需损坏文件中残留部分视频数据帧即可修复成功。残留部分视频数据帧即可修复成功。残留部分视频数据帧即可修复成功。

【技术实现步骤摘要】
一种用于Matroska格式视频的修复方法和系统


[0001]本专利技术涉及数据处理的
,尤其是一种用于Matroska格式视频的修复方法和系统。

技术介绍

[0002]Matroska是一种开放标准的自由容器和多媒体文件封装格式,能够在一个文件中容纳无限个视频、音频、图片或者字幕轨道。容乃不同的内容具有不同的文件扩展名。包括mkv(包含视频/音频),mka(纯音频),mka(纯字幕),WebM(视频编码为vp8或vp9,音频为Vorbis编码)其中mkv和WebM是最常见的应用。特别是自从谷歌开源了vp8,vp9编码格式后WebM得到广泛应用,各大手机厂商,浏览器,Adobe的Flash player,YouTube等都支持WebM格式播放。日常使用中突然断电、网络传输过程中突然断网、勒索病毒加密文件部分数据、文件删除后继续使用导致文件部分覆盖、磁盘故障等都可能导致文件的损坏。
[0003]mkv/WebM是一种常见视频格式,目前市面上一些厂家宣称支持mkv格式修复软件,经过实际操作验证修复效果极差,或者基本无法修复。

技术实现思路

[0004]为了解决现有技术中mkv格式修复效果极差,或者基本无法修复技术问题,本专利技术提出了一种用于Matroska格式视频的修复方法和系统,以解决上述技术问题。
[0005]根据本专利技术的一个方面,提出了一种用于Matroska格式视频的修复方法,该方法包括:
[0006]S1:获取与损坏文件具有相同音视频参数的参考文件,从参考文件起始位置解析EBML Head获取EBML版本和文档类型信息;
[0007]S2:从损坏文件获取块集合,块集合包括存在连续有效的简单块和有效块组;
[0008]S3:遍历块集合,若通过参考文件判断块集合中的块的目标编号不为视频轨道,则提取视频帧存入有效帧集合;若为视频轨道,基于参考文件将有效帧存入有效帧集合;以及
[0009]S4:基于参考文件的视频帧率,设置有效帧集合中每一个视频帧的时间戳,依次写入音视频帧数据。
[0010]在一些具体的实施例中,步骤S1中还包括解析参考文件的Segment及其所有子元素,获取track数、视频编码格式、视频图像分辨率。
[0011]在一些具体的实施例中,步骤S2中简单块的获取具体包括:
[0012]S21:从损坏文件的偏移地址搜索简单块ID,若简单块ID有效,从偏移地址读取长度;
[0013]S22:判断长度与文件大小的关系,若长度大于文件大小,则简单块ID无效,若否,解析简单块的track号;
[0014]S23:判断track号与参考文件的track数的关系,若track号大于参考文件的track数,则简单块无效,若否,读取flag,解析lacing标志;
[0015]S24:若lancing≠0,则简单块无效,若否,且存在连续3个以上简单块且连续的简单块为有效块,将连续有效的简单块放入块集合中。
[0016]在一些具体的实施例中,步骤S2中有效块组的获取具体包括:
[0017]从损坏文件的偏移地址搜索块组ID,若块组ID有效,从偏移地址读取长度,若长度大于文件大小,则块组ID无效,若否,依次解析块组的所有子元素,若所有子元素的大小之和与块组的大小相等,且获取到ID为0xA1的块的子元素则块组有效,将有效块组放入块集合。
[0018]在一些具体的实施例中,简单块ID和块组ID的无效条件为ID的后一个字节为0。如ID的后一个字节是0则表示Size所占字节数超过8,不可能有这么大的元素,通过该方式可以快速判断ID是否有效。
[0019]在一些具体的实施例中,步骤S3中基于参考文件将有效帧存入有效帧集合具体包括:
[0020]读取视频帧,对于已知视频编码格式的视频帧,根据参考文件的视频编码格式,与视频图像的分辨率判断视频帧是否有效:若参考文件的编码格式是VP8,且当前块标志isKey为1,若视频帧的起始码为0x9d012a且读取该帧的分辨率等于参考文件的分辨率,则该帧存入有效帧集合;如果参考文件编码格式是VP9,且当前块标志isKey为1,若视频帧的起始码为0x498342且读取该帧的分辨率等于参考文件的分辨率,则该帧存入有效帧集合;如果参考文件编码格式是H264/H265,且读取数据帧长度和块中的帧长一致,则该帧存入有效帧集合;如果参考文件编码格式是mpeg4,若视频帧的起始码为0x000001b0或0x000001b3或0x000001b6,则该帧存入有效帧集合。
[0021]根据本专利技术的第二方面,提出了一种计算机可读存储介质,其上存储有一或多个计算机程序,该一或多个计算机程序被计算机处理器执行时实施上述任一项的方法。
[0022]根据本专利技术的第三方面,提出了一种用于Matroska格式视频的修复系统,该系统包括:
[0023]参考文件获取解析单元,配置用于获取与损坏文件具有相同音视频参数的参考文件,从参考文件起始位置解析EBML Head获取EBML版本和文档类型信息;
[0024]块集合获取单元,配置用于从损坏文件获取块集合,块集合包括存在连续有效的简单块和有效块组;
[0025]有效帧集合获取单元:配置用于遍历块集合,若通过参考文件判断块集合中的块的目标编号不为视频轨道,则提取视频帧存入有效帧集合;若为视频轨道,基于参考文件将有效帧存入有效帧集合;
[0026]修复单元:配置用于基于参考文件的视频帧率,设置有效帧集合中每一个视频帧的时间戳,依次写入音视频帧数据。
[0027]在一些具体的实施例中,参考文件获取解析单元还包括解析参考文件的Segment及其所有子元素,获取track数、视频编码格式、视频图像分辨率。
[0028]在一些具体的实施例中,块集合获取单元中简单块的获取具体包括从损坏文件的偏移地址搜索简单块ID,若简单块ID有效,从偏移地址读取长度;判断长度与文件大小的关系,若长度大于文件大小,则简单块ID无效,若否,解析简单块的track号;判断track号与参考文件的track数的关系,track号大于参考文件的track数,则简单块无效,若否,读取
flag,解析lacing标志;若lancing≠0,则简单块无效,若否,且存在连续3个以上简单块且连续的简单块为有效块,将连续有效的简单块放入块集合中。
[0029]在一些具体的实施例中,块集合获取单元中有效块组的获取具体包括从损坏文件的偏移地址搜索块组ID,若块组ID有效,从偏移地址读取长度,若长度大于文件大小,则块组ID无效,若否,依次解析块组的所有子元素,若所有子元素的大小之和与块组的大小相等,且获取到ID为0xA1的块的子元素则块组有效,将有效块组放入块集合。
[0030]在一些具体的实施例中,简单块ID和块组ID的无效条件为ID的后一个字节为0。
[0031]在一些具体的实施例中,有效帧集合获取单元中基于参考文件将有效帧存入有效帧本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于Matroska格式视频的修复方法,其特征在于,包括:S1:获取与损坏文件具有相同音视频参数的参考文件,从所述参考文件起始位置解析EBML Head获取EBML版本和文档类型信息;S2:从所述损坏文件获取块集合,所述块集合包括存在连续有效的简单块和有效块组;S3:遍历所述块集合,若通过所述参考文件判断所述块集合中的块的目标编号不为视频轨道,则提取视频帧存入有效帧集合;若为视频轨道,基于所述参考文件将有效帧存入有效帧集合;以及S4:基于所述参考文件的视频帧率,设置所述有效帧集合中每一个所述视频帧的时间戳,依次写入音视频帧数据。2.根据权利要求1所述的用于Matroska格式视频的修复方法,其特征在于,所述步骤S1中还包括解析所述参考文件的Segment及其所有子元素,获取track数、视频编码格式、视频图像分辨率。3.根据权利要求1所述的用于Matroska格式视频的修复方法,其特征在于,所述步骤S2中简单块的获取具体包括:S21:从损坏文件的偏移地址搜索简单块ID,若所述简单块ID有效,从所述偏移地址读取长度;S22:判断所述长度与文件大小的关系,若所述长度大于文件大小,则所述简单块ID无效,若否,解析所述简单块的track号;S23:判断所述track号与所述参考文件的track数的关系,若所述track号大于所述参考文件的track数,则所述简单块无效,若否,读取flag,解析lacing标志;S24:若lancing≠0,则所述简单块无效,若否,且存在连续3个以上简单块且连续的简单块为有效块,将所述连续有效的简单块放入块集合中。4.根据权利要求3所述的用于Matroska格式视频的修复方法,其特征在于,所述步骤S2中有效块组的获取具体包括:从损坏文件的偏移地址搜索块组ID,若所述块组ID有效,从所述偏移地址读取长度,若所述长度大于文件大小,则所述块组ID无效,若否,依次解析所述块组的所有子元素,若所述所有子元素的大小之和与所述块组的大小相等,且获取到ID为0xA1的块的子元素则所述块组有效,将有效块组放入所述块集合。5.根据权利要求4所述的用于Matroska格式视频的修复方法,其特征在于,所述简单块ID和所述块组ID的无效条件为ID的后一个字节为0。6.根据权利要求1所述的用于Matroska格式视频的修复方法,其特征在于,所述步骤S3中基于所述参考文件将有效帧存入有效帧集合具体包括:读取视频帧,对于已知视频编码格式的视频帧,根据所述参考文件的视频编码格式,与视频图像的分辨率判断所述视频帧是否有效:若所述参考文件的编码格式是VP8,且当前块标志isKey为1,若视频帧的起始码为0x9d012a且读取该帧的分辨率等于所述参考文件的分辨率,则该帧存入有效帧集合;如果参考文件编码格式是VP9,且当前块标志isKey为1,若视频帧的起始码为0x498342且读取该帧的分辨率等于所述参考文件的分辨率,则该帧存入有效帧集合;如果参考文件编码格式是H264/H265,且读取数据帧长度和块中的帧长一致,则该帧存入有效帧集合;如果参考文件编码格式是mpeg4,若视频帧的起始码为0x000001b0或
0x000001b3或0x000001b6,则该帧存入有效帧集合。7.一种计算机可读存储介质,其上存储有一或多个计算机程序,其特征在于,该一或多个计算机程序被计算机处理器执行时实施权利要求...

【专利技术属性】
技术研发人员:梁德荣沈长达黄志炜
申请(专利权)人:厦门市美亚柏科信息股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1