最近项目中遇到设备异常断电,导致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格式

同样通过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结构中信息将视频文件重新修复。

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

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

  1. php怎么修复,PDF文件损坏了怎么修复

    修复损坏的PDF文件的方法:可以使用Recovery Toolbox for PDF软件来进行修复.首先打开Recovery Toolbox for PDF软件:然后分析损坏的软件:最后进行修复即可. ...

  2. 如何修复excel文件损坏

    Excel是一款比较常用的办公软件,被广泛应用于各个领域.但是,由于各种原因,我们的Excel文件有时会出现故障或损坏,这可能会导致我们数据的丢失和无法访问的情况.幸运的是,对于这种问题,还是有不少解 ...

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

    最近使用bandicom录制视频文件的时候中途不小心断电了,留下了一个mp4文件,播放器无法恢复,使用010editor打开这个mp4文件,发现仅有两个头的box, 和正常的mp4文件比对,缺少了mo ...

  4. 索尼DV摄像机AX700断电MP4文件损坏修复技术参考

    摄像机摔倒导致视频损坏 某家庭成员生日聚会使用了索尼DV摄像机AX700来记录美好的生活回忆,由于是使用三角架固定拍摄,无人值守,在聚会上不小碰倒了摄像机,导致电池脱落,拍摄中的MP4视频因此也损坏了 ...

  5. Grub 修复(文件损坏)有备份

    文件在/boot/grub2/grub.cfg 备份 cp /boot/grub2/grub.cfg /tmp 删除  rm -rf /boot/grub2/grub.cfg 重启  reboot 将 ...

  6. mp4视频文件损坏的修复方法

    视频打包方案中目前使用最为广泛的就是苹果的QT结构,像MP4.MOV.3GP等文件就是使用QT结构进行封装.市场上此类视频修复软件鱼龙混杂,很多修复软件只是用FFMPEG进行了后台转码导致修复后的素材 ...

  7. 如何恢复损坏的mp4文件:找不到moovatom

    剪辑圈自媒体分享视频处理过程中遇到的问题:看到移动/tmp/audio.mp4到另一个目录 ( /root/audio.mp4) 并没有停止ffmpeg导致.mp4文件损坏: ffmpeg -f al ...

  8. 计算机管理文件破坏怎么办,文件损坏,教您电脑文件损坏怎么修复

    如果是普通文件损坏了倒无所谓,但是如果是我们重要文件损坏了那影响就大了.那么我们要如何恢复损坏的文件呢?程序常常会出现莫名其妙的提示,告诉你文件已经受损.无法打开.修复损坏的方法有多种,下面,小编给大 ...

  9. mp4文件播放不了怎么办?

    MP4 是最常见和最常用的数字多媒体格式,几乎与所有设备兼容,不管是台式机.笔记本电脑还是手机,无论是Windows或者Mac系统.如果无法播放视频,则说明文件格式已损坏.下面将从以下几个方面来给大家 ...

最新文章

  1. 制造业人工智能8大应用场景
  2. 使用eclipse生成html格式注释文档 [ javadoc ]
  3. 【火爆】9张图让你知道大佬们的互联网思维
  4. NYOJ 100 1的个数
  5. AGC030D - Inversion Sum
  6. html解析のBeautifulSoup
  7. window设置快捷键左右方向键
  8. oracle 存储过程 db,oracle数据库的存储过程是什么?
  9. 架构师,是否需要写代码?
  10. 模板 - 图论 - 最小生成树
  11. BAT大牛这样搞Python,真是绝了
  12. mac合上盖子不锁屏_macbook合上盖子不断网的设置
  13. CentOS7添加阿里云yum源
  14. 用php解二元一次方程程序,编写一个程序,求二元一次方程组,编写一个程序,求二元一次方程组的解...
  15. java程序设计课程简介_《JAVA语言程序设计》课程简介
  16. 华为公司“22个不”
  17. 计算机设备不能正常启动怎么办,电脑没有找到可引导设备怎么办
  18. Bash命令光标移动和编辑
  19. 006 研究生学信网的电子注册备案表在哪里弄
  20. LaTeX 章节 Sections Chapters

热门文章

  1. 关于重装系统后没有以太网和wifi的问题解决
  2. 数据库-Oracle
  3. 520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)
  4. 数据,数据元素,数据项,数据对象
  5. 最简单判断工作日/节假日API
  6. 夏侯王朝 - (王室族谱)
  7. bt设置指定的ip地址
  8. 黑苹果必备:Intel核显platform ID整理
  9. Android ADB原理及常用命令
  10. 基于JAVA的二次元风格论坛