全站搜索
文章正文
两路导播台mov素材硬盘格式化后的恢复方法
作者:管理员    发布于:2025-03-02 14:37:11    文字:【】【】【
摘要:导播台可以方便的对多路视频源选择、切换、组合,是摄制组在拍摄多路视频的好帮手,同时可以选择视频格式,而mov文件是导播台常用的格式,而视频编码则使用苹果ProRes的较多。由于这种高清编码是无损的这也是导致mov文件容量大的原因,这一类素材文件基本上是保存在大容量的硬盘或者是小型NAS设备上,不断的采集新的素材然后再交由后期制作,所以这一类存储的安全性就很重要,但是只要是人就存在出错的可能性,当遇到一些误操作时应该如何确保数据的安全并有效的恢复呢?下边来借这个特殊的恢复案例来聊下具体的恢复方法,之所以说其特殊是因为这个案例是在我们“不可能恢复的数据”名单上的一员,经历了很多艰难困苦甚至一度打算放弃然后到最终数据完美恢复。

故障存储

2TB硬盘品牌不详/文件系统:Exfat/簇大小:128KB

 

故障现象:

此导播台使用一块2TB的硬盘做为存储设备,接入两路视频源,使用apcs视频编码。平时这两路镜头拍摄的是某个综艺节目的室内环节,基本上的流程就是拍摄完成后把存储盘交给下一组去备份然后交给后期制作。某日在完成拍摄后,由于交接工作时出现问题导致2TB硬盘被误格式化,出现问题后此硬盘就进行了封存没有再做过其它操作。

从图1中也可以看到,硬盘被格式化了,除了一些系统级文件和设备生成的文件外,是没有其它文件写入的,所以描述基本上是属实的。

客户所需要的文件是6条视频素材(1路视频各3条),长度已经不记得了,但可以提供文件名等信息,其它的素材之前已经有过备份。另外就是恢复时间上客户也有要求,需要在规定时间内完成,否则虽然面临成本问题但就只能重新补拍了!

另外经过沟通得知此盘的文件系统之前也是Exfat,属于是同一设备相同使用环境的格式化,这一类格式化只要没有手工调节过参数那么格式前后的文件系统基本参数应该是相同。同时基于这些理论判断,可以大致给出一个恢复预测“视频文件应该是可以恢复的

 

ok_0

1:硬盘的剩余空间还有1.9TB

 

OK_1

2:格式化后并没有做过其它操作

ok_3

3apcs视频编码是苹果专为影视级开发的高清视频编码

故障分析:

两路视频,且视频编码为apcs(如图3),其特点就是非压缩所以采集的每一帧数据流长度(同场景下)是比民用的AVC/HVC要大的多的多。由于是两路同时采集视频,所以在写入环节肯定是存在“排队写入”的情况,而使用通用型的Exfat文件系统证明导播台只求稳定,不对底层做更多的干预,毕竟通用型文件系统最大的优点就是“稳定性”。当然只要导播台能做到数据正常存储、视频正常切换就算是达到目的了,产品更多的是关注实用性。

考虑到这些特性,而硬盘容量又较大,初步方案是先定位文件,然后确定客户所需要的数据是否还在,排除覆盖的情况。由于客户能提供文件名,所以计划从此处入手,经过对比发现文件头中有一自定义的单元,此单元储存了文件路径+文件名信息,这个对定位文件名有极大帮助,经过排查发现6条素材视频文件是都还在的。在定位文件头计划继续定位文件的结构体,已得到文件长度等信息,这样就可以判断基本的工作量了,结果发现结构体的碎片数量很多且很小。为了验证通过定位视频帧进行判断,因为没有看到一个完整的帧单元,一个帧单元被切割了很小的碎片,有的碎片似乎只有一个簇的大小,此时感觉恢复难度要比想象中大的多。

由于此导播台还使用过别的硬盘,所以计划查看下存在的数据碎片情况,结果直接惊掉了下巴,之前说过由于MOV文件容量大(影视级高清视频编码)的原因碎片的数量多到让解析程序当机!经过对比其中一个20GB多一点的文件,发现特征如下:

1、碎片小,常见就是2-8个簇,长度是动态可变的,最小的是1个簇。

2、碎片数量多,有时候能达到10W以上。

3、碎片交叉无规律,无论是结构体还是数据区都有此种情况。

多种极端情况的交织让问题变的复杂化,在开始恢复工作之前需要想好大概的恢复思路,实际上这个案例的情况和之前我们处理的“小米智能摄像机”比较相近,而小米的MP4文件由于使用的是“民用级”HVC编码,而且文件时长是控制在1分钟的,所以文件容量较小碎片数量就不会很多;而当前使用apcs“影视级”编码的MOV文件长度至少几十个GB,碎片的数量几何式增加。初步计划还是以“MOOV视频RAW级重组程序”2.0为蓝本,重新设计并修改程序,让其能适应目前的极端情况。除此之外由于单个文件容量较大,所以要尽可能的实现“半自动化”,减少手工干预的次数提升恢复的效率。

故障处理:

在开始这些工作之前还是先把6mov视频文件的结构体进行了定位,由于碎片过小,这个工作基本上通过手工来完成,共耗时大约两天,得出了6mov文件在硬盘上的区间及文件大小如下(隐去了真实文件名以HEX值代替):

文件061DDC700.MOV       67.35GB

文件161DD5300.MOV       71.45GB

文件297725700.MOV        62.63GB

文件39772E000.MOV        71.42GB

文件4CC834F00.MOV       24.02GB

文件5CC831200.MOV       34.57GB

6个文件总体容量331.34GB,区间跨度大约1TB左右,让人望而生畏!目前进行到这一步,获取了6个文件的分布情况、长度、时长等属性,结合碎片的无规律和动态变化,确定了这个案例的具体难度等级为“变态”级!

接下来就要来修改(实际上最后变成了重写)程序了,这一步也是最难的,想法付诸于实践的载体就是“程序”,首先有一点能的确定的就是目前2.0的程序的算法是可以恢复这种情况的,难点在于数量巨大的碎片如何在极少的人工干预下完成重组!所以一开始为了验证,尝试着去做了前几帧数据,结论就是除了速度慢之外没有什么槽点,效果是很好的。在接下来的几天里一直在尝试提高效率,但是基本上没有什么进展,因为能想的办法都想到了,甚至就此问题请教了网红”AI---DeepSeek,结论是“服务器忙……

   这中间又做了一些无用功,最后又回到原点,最终想法是不要再以单个文件为主,而是要从整体上看待所有文件,也就是开启“上帝视角”,从exfat的角度去看文件分配的问题,一个碎片的归属无非是交叉的N个对象,如果是两个文件那就不是属于A就是属于B,只要判断成功了一个碎片,另一个就变的相对简单了,同理多个文件依次类推。简单讲就是有目地的进行“穷举”+全局标识,这个方法虽然一开始慢,但是随着碎片的剥离,恢复的文件越多速度会更快,因为唯一性越来越大!

 

在这种指导思想下,对程序算法进行了全方位升级;另外由于是大容量的硬盘,碎片又多,对扫描结果的随时保存也很重要,之前的是小型的卡类这一块不是很在意,所以也进行了升级;做这些工作又消耗了大约5天时间,然后开始了对第一个文件的测试(图4),速度比之前提升了到少10倍是有的,只是 

速度还是不是很理想,中间不断的进行优化,最终速度达到了极限,是后这个71.42GB的文件在通过大约6天的时间完成了重组,当然这中间还是需要手工介入的,最终的碎片数量是104,203个,超过了10W个!!!