首页
/ 利用Perl修复MP4文件的终极解决方案:WET Ultimate Solution

利用Perl修复MP4文件的终极解决方案:WET Ultimate Solution

2024-05-20 16:38:14作者:田桥桑Industrious

是什么?

WET Ultimate Solution是一个开源工具,专为恢复损坏、删除或未完成的h264视频的MP4、MOV、3GP等文件而设计。理论上,它也可用于AVI、MKV、M4V等其他容器,但声音恢复可能更为复杂。

如果你经常用相机、手机、运动相机、屏幕录制或无人机拍摄视频,这个工具可能会派上大用场。即使是高速撞击树干后的无人机残骸中,试图提取最后半秒的视频,也有机会借助此工具。

需要什么?

修复文件,你需要:

  1. 损坏的文件或卡/闪存盘/硬盘的镜像。
  2. 一个独立的新磁盘,有足够的空间存放修复结果。
  3. 运行着Linux或Windows系统的机器,安装了Perl和ffmpeg/ffprobe/ffplay。
  4. 如需恢复AAC音轨,还需要faad2(libfaad-dev包)以及gcc(编译aacfixer工具)。
  5. 一个良好记录的样本文件,与待修复文件在同设备、同设置下录制。

如何使用?

  1. 如果是已删除、未完成或紧急关机的情况,首先使用WinHex或其他类似工具获取图像或尝试恢复文件。
  2. 拍摄一个新的视频,确保其录制条件与需要恢复的文件完全相同(包括到屏幕抖动的程度)。
  3. 运行命令:
    perl fixer.pl <good_file.mp4> <bad_file.mp4> <output_prefix>
    

工作原理?

工具会创建中间文件:

  • -headers.aac: 之后用于恢复声音的文件
  • -headers.h264: 视频文件,用于创建头信息
  • -nals.txt: 临时文件,记录参考视频包的信息(Windows 7 下可能生成时间较长)
  • -nals-stat.txt: 我们“学习”的内容。如果出现问题,请提供此文件。
  • -stat.mp4: 实际上是一个无声且剪裁至20秒的样本文件副本。

最终将生成:

  • -out-video.h264: 恢复的视频
  • -out-audio.raw: 恢复的音频(实际上只是视频之间的部分)

所有文件将在运行脚本的当前目录下创建。

你可以用任何播放器如ffplay来播放-out-video.h264,但添加声音会稍复杂一些。

声音恢复:

不同的视频摄像机可能以不同方式记录声音:

  1. 如果声音是mp3格式,只需将-out-audio.raw重命名为file.mp3,然后用任何播放器打开。
  2. 对于PCM格式(例如ULAW),如某些Sony视频摄像机所采用的,可以轻松保存,通过以下命令转换为WAV:
    ffmpeg -f s16le -ar 48000 -ac 2 -i somefile-out-audio.raw -c copy output.wav
    
    请确保选择适合你的设备的参数。
  3. 如果音频为AAC格式,最常见的一种,我们将编译附加的aacfixer工具:
    gcc aac.c -L. -lfaad -lm -o aacfixer
    
    前提是你已经编译了faad2库并将libfaad.a和neaacdec.h文件放在当前目录下。

然后运行:

./aacfixer somefile-headers.aac somefile-out-audio.raw

这可能需要一段时间,因为暴力恢复方法被用于解码声音。

出问题怎么办?

记住,代码是为了作者内部需求快速编写,并不保证适用于所有情况。除了写作的三天时间,作者又花了一周来撰写说明。如果不起作用,请创建一个问题报告,提供以下信息:

  1. 上传一个10到20秒的参考文件,使用GoogleDrive或Dropbox等服务。
  2. 上传损坏文件样本,大小不超过50MB。
  3. 描述录制设备型号或该文件创建后使用过的程序。是否进行了恢复还是直接从设备复制。
  4. 发生了什么(无人机撞树、空间不足、意外关机等)。
  5. 在哪个系统上运行了此工具,哪里出错了。

代码旨在跨多个平台工作,不依赖二进制文件,尽可能简单,因此效率不是首要目标。作者仅用了3天时间编写代码。

赞助支持:

如果你出于某种原因想要赞助,可以通过比特币或以太坊地址:

  • 比特币: 1bU17VMyvxYfCN257AiHrPPca1bszuLna
  • 以太坊: 0x39b64f347b7702ddb1f8B06A25575598d624b783

请注意,作者目前失业,非常需要资金。如果转账,他可以用数据恢复技能帮你解决问题,但帮助的程度取决于金额。

最新的GoPro、Xiao / Xiaomi Yi 4k和部分无人机用户:

这些基于Ambarella芯片的视频摄像机几乎都有相同的硬件配置。例如,作者的Xiaomi Yi4k搭载了Ambarella A9SE芯片,与GoPro一样,会同时写入主流的额外预览,供移动应用使用。固件中还有视频编辑器的遗留物,虽然用户看不见,但在未来版本中可能会用到。这导致两个文件在同一张卡上混合,如果作为单一文件恢复,会出现很多断裂片段。不要使用常规的数据恢复软件如R-Studio尝试恢复,它们会破坏文件!

幸运的是,作为这类视频相机的拥有者,作者可以进行大量实验,针对各种录像模式。作者还是一位文件系统专家,计划发布用于低级别操作闪存卡的实用工具。将来,它可以准确地恢复文件。但现在还不是时候。缺乏完成该项目的动力,所以暂时只有小预览。

Direct Disk View (ClusterView)

其他工具:

为了寻找竞争对手,作者还编写了一个简单的脚本,读取文件的随机片断并合并在一起。当然,这样做出来的文件不可用,但能否恢复呢?

令人惊讶的是,许多商业工具对此束手无策,甚至无法解释失败的原因。开源工具如untrunc需要一些努力才能编译,但仍然无法正常工作。不过,也有一些工具能给出一定结果:

  1. mp4repair.org - 数据恢复服务。能在浏览器中无需参考文件即显示损坏文件的预览,但价格较高。不幸的是,他们告诉作者,恢复测试文件将会很昂贵,这让他感到失望。与技术支持的沟通也未能取得进展,因此无法推荐。
  2. http://slydiman.me/eng/mmedia/recover_mp4.htm - 结果接近作者的方法,但以mp4容器存储,理论上应更好地恢复音频和视频的同步。作者无法在VLC中播放结果,但ffplay显示了类似的画面。然而,作者似乎决定对项目进行商业化,并未发布新版本,也不是开放源代码。这是作者创建自己项目的原因之一。

如您所见,选择并不多。随着这个项目的发布,选择范围变得更宽!

联系作者

如果你想直接联系作者,可发送邮件至iformp4review@airmail.cc。 这不是作者的主要邮箱,回复可能不会很快。创建带有“检查邮件”文本的问题也是一种方式。

如果你有关于视频制作的一般性问题,建议在Video Stack Exchange提问,这是一个小型但非常棒的视频制作社区。

致谢:

特别感谢StackOverflow上的szatmary、Mulvya、VC.One的参与者。 感谢Slydiman,因为他没有实现我的功能请求并且没有公开源代码。 还要感谢我们的会议中遭受SJCAM折磨的同事,他们激发了我创作这个工具的热情!

许可证:

本程序是自由软件:你可以重新分发和/或修改
它根据Free Software Foundation发布的GNU General Public License第三版条款,
或者根据你的选择,任何后续版本的条款。

开始你的修复之旅吧!

登录后查看全文
热门项目推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
143
1.91 K
kernelkernel
deepin linux kernel
C
22
6
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
273
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
927
551
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
421
392
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
189
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
75
64
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
344
1.3 K
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
36
8