关于修复mp4文件损坏的过程小记

news/2025/3/5 9:31:13/

        最近项目中遇到设备异常断电,导致mp4文件损坏的问题,最近花了点时间,深入分析原因,并进行了相关修复尝试工作,最后,虽然文件中的音视频数据大部分可以修复,但因为原始文件中视频的帧率是动态变化的,导致最终修复的视频出现音视频不同步。

       下面的内容会大概对MP4文件格式结构分析和修复策略两方面进行简单记录。

MP4文件格式的分析

       分析MP4格式,首先想到的就是看标准协议,从相关的MP4格式协议入手,那作为程序猿的人,google和维基百科两大利器,相信大部分人都会用到,mp4和mov格式是很相似的,后者的苹果搞出来的标准,具体的相关链接,可以在

https://en.wikipedia.org/wiki/MPEG-4_Part_14

https://wiki.multimedia.cx/index.php?title=QuickTime_container

维基百科页面看到,

通常mp4的格式有如下内容:

mp4格式
mp4格式

同样通过mp4info工具打开录制的mp4文件,发现视频文件包含下面几个atom,ftyp、free、mdat、moov,通常如果异常掉电后,其中moov包含了解析音视频数据的信息,缺少或者损坏了moov中的数据,会导致mp4视频文件打开异常,而mdat结构中则是实际的音视频数据块,它们以chunk的形式进行保存,解析它们的相关指示数据在moov结构中的stco中,stco记录着实际音视频数据的迁移地址,也就是说异常掉电使得moov结构中的数据丢失,进而导致mp4文件打开异常。

 

修复思路

       通过上面的简单描述,修复的思路是:如果存在同样环境下录制的mp4视频文件,这里所说的同样环境是指音频的采样率、通道数,采样点的位宽,视频的帧率、分辨率参数都是一样的情况下。ftyp、free、moov三个结构体中的大部分数据是一样,可以借助这个部分完好的数据,将mdat中区分开的音视频数据重新封装为mp4,注意:这三个结构中数据是重新封装mp4文件会用到。

      下面将如果将mdat块中的音频数据进行区分,通过上面的工具,我们可以观察到mdat数据是在moov前面的,而且mdat的数据是按照chunk块紧密存储的,所以对于损坏的文件,我们可以按照二进制的方式打开文件,逐步将ftyp、free去掉,然后将mda数据块缓存到一个buffer中,后面的工作就是对应这个buffer块中数据进行处理,区分工作这里主要是分区视频数据还是音频数据。而且每个视频的nal单元通常都是0开头,nal单元的第5个单元代表nal的类型,通过这种方式,可以将视频chunk分离出来,并将剩下的非视频chunk标记为音频数据。至此,能够将音视频数据,并通过moov结构中信息将视频文件重新修复。

       目前还存在的问题,由于项目的特殊原因,录制的帧率是动态的,导致修复后音视频不同步,此问题暂时没有解决,待后续考虑。


http://www.ppmy.cn/news/546459.html

相关文章

sdhc卡文件丢失常见原因和两种恢复方法

sdhc卡作为sd卡的继任者,主要有容量/速度等级高、支持文件格式和兼容的机器多等特征,通常被用于存储大量文件的设备中,比如松下照相机。但是sdhc卡跟其他存储设备相似,也会因各种原因导致重要数据丢失,那么sdhc卡文件丢…

解决视频播放器找不到解码器问题

打开视频播放器,我经常使用的qq影音精简版居然什么格式的视频都不能播放了(提示文件无法渲染),这时候我怀疑快播不能播放也是因为系统缺少dll文件了(提示文件格式不正确);设置了好长时间还是不行网上给出的资料大多数是视频文件损坏&#xff…

记一次bandicom录制的mp4文件损坏修复

最近使用bandicom录制视频文件的时候中途不小心断电了,留下了一个mp4文件,播放器无法恢复,使用010editor打开这个mp4文件,发现仅有两个头的box, 和正常的mp4文件比对,缺少了moov数据块 经过查询得知mdat主…

ps安装找不到vcruntime140.dll怎么修复呢?

vcruntime140.dll是Windows系统中非常重要的组件,缺失vcruntime140.dll会导致电脑很多软件无法打开运行,报如下错误。由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。小编今天就把修复教程分享给大家&#x…

U盘修复“系统找不到指定文件”问题记录

很久以前手贱,在Mac上格式化U盘,然后发现U盘插回PC已经用不了。U盘闲置了一段时间后,最近尝试修复,最终还是失败了。明显用不了的的表现是: U盘无法识别,磁盘管理中格式化时提示“系统找不到指定文件” 先说…

SD卡打不开怎么办?sd卡损坏修复,盘点一些实用的教程

SD卡的应用十分广泛,比如,手机、数码相机、摄像机、MP4、航拍器、车载导航等。但是随着SD卡的使用时间的长短,有时会出现常见问题—SD卡打不开。SD卡里面保持着我们很多重要数据,如果它打不开,很可能导致我们里面重要数…

MXF视频文件损坏的修复方法

MXF是SMPTE(美国电影与电视工程师学会)组织定义的一种专业音视频媒体文件格式。MXF主要应用于影视行业媒体制作、编辑、发行和存储等环节,由此可见MXF文件的重要性。 MXF文件在拍摄中意外断电、关机等误操作会导致MXF文件无法播放(或者仅生成RSV文件),此时就需要修…

CEF 最新版本自己编译加上支持播放MP4视频

CEF 编译支持播放MP4视频 写在前面编译过程验证效果最新编译成果列表(持续更新)获取方式 写在前面 由于研究学习需要,使用CEF,发现官网的版本默认不带视频播放功能,根据官方源码,加上支持视频的参数,编译&…