引言
Introduction
最近在使用oCam录屏软件录制一次会议的时候出现了小意外,录制快要结束的时候,oCam死机了。虽然在硬盘上可以找到录制的文件,但是使用各种播放器都无法播放,所以对视频修复做了一点小调查,几乎把网上所有的视频恢复软件都试用了一次,最后利用Untrunc软件成功地恢复了视频。今天就和大家分享一下自己的经验。
修复原理
Principle
每个MP4文件都是由若干个box组成的。每个box都至少包括32位的长度字段和32位的类型字段。在图1所示的文件中,所有红色框标出来的就是box的类型字段。
图1 MP4文件举例
最重要的几个box是:
●ftyp box,在文件的开始位置,描述的文件的版本、兼容协议等;
●moov box,包含本文件中所有媒体数据的宏观描述信息,moov box下有mvhd和trak box。
a) mvhd中记录了创建时间、修改时间、时间度量标尺、可播放时长等信息。
b) trak中的一系列子box描述了每个媒体轨道的具体信息。
●mdat box,编码后的媒体数据。
录制软件一般都是先写入ftyp box和mdat box以记录媒体数据,在录制完成时再写入moov box,因为moov box中包括的时长数据只有在录制完成才能计算出来。如果录制软件死机,就可能造成录制的媒体数据被写入文件,而视频的moov box信息没有写入文件的情况。
对于播放软件而言,没有moov box就无法知道视频的基本信息,包括所采用的编码格式、视频的尺寸等,就无法播放。
所以,如果媒体数据被写入,而moov box没有来得及写入就可以采用本文介绍的修复软件进行文件恢复。
我还遇到过一次摄像机因为没电而意外关机的情况,虽然生成了很大的数据文件,但是数据文件的内容都是FFH,这是因为关机时在缓存中的视频数据没有来得及写入SD卡。对于这种情况,任何修复软件都是无能为力的。
Untrunc
使用方法
Method
在试用了国内外各种视频修复软件以后,个人以为Untrunc是解决前面所说的视频文件破损的最佳工具。
Untrunc是意大利人Federico Ponchio开发的一个开源软件,在他的个人网站(http://vcg.isti.cnr.it/~ponchio/untrunc.php)上介绍了这个工具的工作原理,其代码公布在Github上(https://github.com/ponchio/untrunc)。不过原始的Untrunc是个命令行工具,而且没有提供Windows上的版本,使用起来略有不便。我建议采用Anthon Lockwood派生的版本(https://github.com/anthwlock/untrunc)。这个版本提供了易用的图形界面和编译好的Windows版本,修复了一些错误并对性能进行了改进。
图2Untrunc的图形用户界面
最后说明一点,Untrunc采用的是GPL协议,这个协议要求对它进行修改的软件也必须公开源代码。
1
END
1
#往期推荐#
# 如何用Wireshark调试SSL/TLS程序
# 2022 笃行不怠,虎啸生风
# 迟到的秋游 | 动物园游记
# RIS——未来通信技术
文稿 || 李海老师
排版 || 赵阳
bitpmcrg
北理工通信课题组
北京理工大学专业移动通信组