Contents ...
udn網路城邦
如何搶救毀損的影片檔
2008/03/15 12:23
瀏覽44,595
迴響13
推薦41
引用0

公告

由於本文點閱次數持續攀高,不時有朋友請託協助,特此聲明。此文是多年前因工作需要,所做研究的總結,然而現在,並不是我的職業,請別再留言求救。給有需要的朋友一點提示:本文上下週邊,不時會有現役資料救援專家的訊息,敬請多加參考利用。

 

生人迴避!

警告在先:本文是這個部落格成立以來所僅見、冷冰冰硬梆梆、無趣得可怕的技術題材,除了特定領域的科技狂人以外,通常都會在一分鐘內睡著。莫謂言之不預也。

在這裡發表是因為目前的工作用不上,擺久了餿掉可惜。如果有人看了有所啟發,深入鑽研甚至產品化,也算是造福社會罷。

事情源自兩三年前。有同事到國外參展,在同業攤位當「死敗」偷拍重要情資,自己卻不小心刪除。所幸這人還算精乖,拍了幾張照片後察覺不對,趕緊把記憶卡抽掉,想辦法搶救。結果檔案雖然救了回來,影片內容卻無法播放。不死心抓了幾個影片修復軟體,都豎白旗投降。由於敝人先前有和影音軟體打交道的經驗,這位老兄就把毀損的影片檔拿來,問我有沒有辦法救。

一看之下,原來影片檔的「七寸」被掐碎了。檔案頭尾的重要資訊毀損大半,難怪影片修復軟體都寧願放棄。好在影音資料區還有七八成沒壞,於是寫了兩三支小程式,硬是把堪用的部份還原給他,功德圓滿。可惜公司不做這方面,產品化也有實質困難,只好把過程記下,孤芳自賞一番啦。

(對技術細節無興趣者,可直接跳到末段)



這篇重點是談技術,不是介紹軟體;討論的是方法,而不是產品,目的在解決一個特定問題。

影片檔毀損的原因,包括檔案傳輸複製過程的錯誤疏失,和儲存媒介(如硬碟、光碟、記憶卡)的毀損或錯亂。毀損的位置和範圍通常無可預測,加以資料量龐大,需要以程式檢測修復。

修復各種影片檔的軟體很多,網路上不難找;有些是自由軟體,多數要付點費用。然而無論收費與否,大部份軟體遇上這個問題的反應是一致的,也就是兩手一攤,宣告不治。

什麼問題呢?就是萬一影片檔的檔頭毀損,還能不能救?

這個問題的答案要看影片檔的格式。來自VCDDVDMPEG檔案,由於編解碼器(CODEC)及其參數固定或變化有限,問題較小,救回的機率較大。相對而言,屬於container格式的AVIRM檔案,CODEC資訊放在檔頭,一旦損毀就無法解碼。本篇的重點就放在這兩種格式。

檔頭

影音資料

索引

圖一,影片檔的基本結構

上圖只是示意,並不符合實際比例。檔頭部份通常只有幾百上千個byte,相對動輒以MB甚至GB計算的資料區來說,比例小之又小,遭到毀損的風險也低。然而檔頭包含解碼所需的重要資訊,一旦損失,靠盲目猜測救回的機會卻又不高。難怪各種修復軟體寧可放棄。

靠人工有沒有機會呢?答案是有,但仍然需要許多程式幫忙。在討論如何搶救之前,先瞭解有關影片檔結構的基本知識,會比較有幫助。

觀念

AVI和RM是所謂container格式,意思是說,抽象觀念上它們只是一連串記錄(record)的組合,至於如何詮釋記錄,則是播放程式的工作。

Record 1

Record 2

Record 3

……

Record N

圖二,影片檔由連續的記錄組成

每個記錄的開頭,通常至少包括一個表明記錄型態的標籤(Tag),以及記錄的長度(Length)。記錄本身可以是另一個container,包含其他記錄。一如前述,如何詮釋記錄,是播放程式的工作。修復程式的工作,就是將檔案恢復到播放程式能夠判讀的程度。

Tag Length Data

圖三,單一記錄的結構

為了簡化,這裡只討論AVI和RM格式的基本型,衍生加強的型態暫不考慮。詳細的格式資料請看參考文件,此地也不深入討論。

如圖一所示,基本型包括三大塊記錄,即檔頭、資料和索引。資料區是骨幹,包含若干個影音流(stream),通常會有一個視訊流(video stream)和兩聲道的音訊流(audio stream)。影音流資料量大,一般會切割成小塊以便處理。視訊以畫面為單位,音訊則視CODEC而定。

視訊資料幾乎沒有不壓縮的,絕大多數現代的壓縮法,都採用立體壓縮,亦即前後畫面交互參照,消除相同部份,以求最大程度的壓縮比。這種方法會每隔若干畫面設立一個主畫面。理論上說,當場景變化(scene change),就是設立主畫面的好時機,因為畫面變化大;實際得看CODEC如何施作。這部份屬於視訊壓縮的範疇,在此略過不提。音訊資料壓縮與否都有可能,通常切割成小塊和視訊流交錯排列,為的是避免播放程式讀取大檔案時來回移動浪費時間。

索引存在的目的,是當使用者任意選擇播放點的時候,程式可以迅速移動,找到指定的影音資料位置。如果有主畫面的設置,索引中存放的可能是主畫面的位置;也可能按固定間隔,比方說,一百筆記錄,安排一個索引。理論上說,索引並非不可或缺,然而很多播放程式發現索引不正常就哇哇叫甚至當掉。

播放時重要的是影音必須同步,否則對不上嘴事小,音響效果慢了半拍,味道就差多了。檔頭存放資料區的影音流起點、記錄總數、時間長度、CODEC及其附帶參數等資料。AVI和RM都假設影片是連續資料流,每筆記錄並沒有個別的時間戳,播放的時機和同步,都靠個別記錄和起點的相對距離來決定。當資料區遭受破壞時,這是不容易解決的問題。

破壞的型態和坊間修復程式的作為

索引遭到破壞,是最容易解決的問題,修復程式最擅長的也是這個。只需要讀取檔頭中各資料流的起點,整個檔案掃瞄一遍,索引就可以重建。甚至有些耐操的播放程式,如VLC,根本不加以理會,自行在記憶體中重建。

資料區的破壞,當索引仍然完整的時候,可以利用索引所記錄的位置,試圖評估損害,決定那些區域可以修復,同步的問題也比較容易掌握。如果索引不存在,當資料區被破壞時,重建也沒有意義,唯一的辦法是掃瞄資料區。由於影音流都是連續的,裝載資料的每筆記錄都有特定的標籤,和下一筆記錄的位置。先找尋特定標籤,再根據下一筆記錄的位置察看是否正確,反覆執行可以得到若干資料流片段。只不過影音流破壞的程度不一致,又缺乏索引做參考,同步問題極可能發生,甚至可能很嚴重。有些修復程式會試圖復原找到的第一塊資料流,而將其後全數捨棄,免得結果看起來令人不悅。

檔頭被破壞時,會產生幾個重要問題。首先各資料流的起點和總數會成為一個謎。這時候如果索引保持完好,可以提供參考。但由於檔頭通常很小,破壞則至少以幾個KB為單位,開頭的若干損失在所難免。萬一沒有索引可參考,靠掃瞄資料區也有機會找出答案,不過同步仍然是個問題。比較致命的是CODEC及相關參數,相信這是大多數修復程式束手無策之處。自古至今,CODEC的種類沒有一百也有八十。在沒有任何參考的情況下,可能的排列組合太多,放棄還比較輕鬆一點。

對策

這次工作的重點有二。第一是當檔頭損毀時設法重建,第二是儘可能恢復所有可用的影音資料,換句話說,萬一資料區被斷成好幾截,試圖將之儘量復原。

前面說過,一般修復程式在沒有任何參考的情況下,只好選擇放棄。如果我們有同一來源的其他檔案可參考,比方說出自同一台數位相機或製片軟體,將檔頭拷貝過來,可以解決CODEC參數的問題,至少縮小嘗試的範圍。當然資料流起點長度等資料,需要寫一個程式去掃瞄,這支程式同時分析出可用片段和主畫面的位置等。

萬一沒有可供參考的檔案,得要猜測,我們把視訊和音訊個別處理。利用前一支程式分析出、尚可使用的資料片段,以另一支程式調整各項參數試圖解碼。錯誤的CODEC可以經由這個程序過濾掉。找出正確的CODEC之後,再微調各項參數到輸出正確為止。其實時至今日,CODEC百家爭鳴的時代已經過去,除非檔案來源十分古老,否則應該不需要猜測到十次以上。

倘若運氣好,所有片段都能找出來,並且正確解碼,接下來要處理的,就是同步問題。若太過殘缺,又沒有原始索引供參考,恐怕就只能靠人工。用一支程式把原始檔的影音分離,各片段獨立建檔,再利用製片軟體重新接合,或許是比較可行的方式。當然如果資料大體完整,或同步與否沒那麼重要,那麼直接連綴再重建索引,也就可以了。


單以這次任務來說,由於數位相機還在,CODEC部份用不著猜測,解碼不費吹灰之力。然而資料斷成好幾截,同步就很困難了。好在同事只要得到視訊部份就很高興,音訊直接捨棄。是故文末兩段提到的方法只是構思而未實作,那也是產品化的困難所在。講得明白些,這種成功率沒法兒掛保證的事,充其量只能是「殺必死」;就像你把摔破的NB送到維修站,能活命就偷笑了,缺胳膊斷腿也只能摸摸鼻子認賬。

抱歉沒有附圖。手邊書籍當然有,不過都有著作權,不便翻貼。在Wikipedia也沒看到,而且,最重要的,自己作圖好累。還請看倌多多包涵。

有誰推薦more
迴響(13) :
13樓. Ironman
2011/12/19 15:13
我想請教:
多年前SD卡上有一個mp4檔案250mb,被刪除後,被加入1.3mb的檔案,
結果我用檔案recovery software就回mp4檔案,但是沒有辦法撥放。

我知道應該是Mp4檔案的資料被打斷,所以沒有辦法撥放,請問在台北市可以找哪家公司或是高手幫我回復。只要修到可以撥放就好。不需要有音檔

在我多年的研究,我發現好像是音檔的問題比較大
。感謝


抱歉幫不上忙。

我自己幾乎從未遇上這類狀況,所以近年來很少注意這方面的事。基本上記憶卡準備充足,一有機會就備份,不到萬不得已不刪除。這樣如果還出問題,只能怪自己買到爛卡或爛相機了。預防重於治療,實際上即使救回,也多半殘缺不全,徒留遺憾。

Jeff & Jill2011/12/19 21:27回覆
12樓. 伊妮莎
2011/02/25 18:46
我的是爛相機拍的

拍時又是燈光暗或是晚上, 解析度只有320x240~~~粒子很粗, 這跟檔案毀損不一樣吧


哈,檔案毀損是根本沒辦法播;粒子很粗畫面太暗,是內容的毀損。母片如此,要變成高清畫質不可能,只是想看得稍微清楚的話,倒也不是沒有機會。用坊間的視訊編輯軟體,調整亮度對比、銳利度之類,說不定有救。不過如果是我,還是換一台相機吧

Jeff & Jill2011/02/26 10:38回覆
11樓. Kevin
2010/06/24 14:03
可以請您提供協助嗎?
您好,無意間看到你的搶救毀損影片檔的文章,冒昧請問您是否可以提供協助,您協助的費用我們可以談,我是用Sony DSC-TX5相機(使用Sony的SD卡8G)拍攝三段影片,格式應該是MP4,但是無意間刪除,刪除檔案後有再用相機拍照,之後我用FinalData救援軟體有把三段影片的檔案救回來,但是因為檔案有覆寫過(因為刪除後有再拍照),所以用了很多播放軟體都不能播放,我後來有請二間檔案救援公司嘗試救援檔案,但是他們檢測後都說救不回來影片檔,因此冒昧想請你協助,若您願意協助的話,我們可以談費用,我很想救援回來這三段有紀念價值的影片,感激.

一口回絕可能太殘酷了些,但很抱歉,我大概幫不上忙。

或許你沒注意,這篇文章發表兩年多,事情發生則早得多,距今約五年;使用的技術,是比當時更早兩三年開發的。後來離開那個領域,沒再繼續鑽研,所以新格式如MP4,就不甚了然。回頭搞這些,已經沒有精力和意願,只能抱歉啦。

找專業資料救援是對的。事實上,拿原始記憶卡進行救援,機會應該更大。因為或許有用的資料遺失在閒置區域,而不在救回的檔案上。這種狀況專業資料救援有機會處理。倘若光拷貝救回的檔案,那麼裡面的資料錯就錯了,只會少不會多。

祝你幸運!

Jeff & Jill2010/06/25 00:58回覆
10樓. Tina
2010/05/25 16:20
help me please

你好~

我想請問一下,我有個avi檔的影片,在之前影片輸出後都可以看,但放在電腦一陣子之後,再去開它就不能看了,我嘗試修復它,但還是失敗,用GOM player開,他說少了解碼器,但上網找卻又沒有。現在這個影片檔在電腦上就只顯示檔案類型和大小,有沒有什麼辦法可以解決呢,拜託幫幫我,這個影片很重要,謝謝~

倘若只是少了解碼器,重新安裝播放軟體,或下載、安裝解碼器包(搜尋”codec pack”)就可以解決。

不靈的話,請下載VirtualDub,以之開啟你的AVI檔。如果是能夠掌握的問題,VirtualDub會試圖修復。結果要是可以接受,就另存一個AVI檔。

若依然是解碼器問題,選VirtualDub的File - File Information,看Decompressor項目,把解碼器名稱抄下來,上網去找。找到的話,下載安裝就行了。

若找不到,或名稱不知所云,就很可能正如本文所述,檔頭遭到毀損,要救相當困難。尤其在硬碟裡擺久了,破壞程度難以估計。萬一到此地步,恐怕得找有沒有電腦維修站願意收,死馬當活馬醫。

為避免遺憾,勤加備份是唯一王道。亡羊補牢,特別事隔多日,成功機會不大。只能說記取教訓了。

Jeff & Jill2010/05/25 19:09回覆
9樓. 小雲仔
2010/01/25 14:40
MP4

感謝版大這麼快就回應

小弟曾經使用All Media Fixer軟體進行修復

可惜修復完後檔案仍無法開啟

請教一下,坊間有公司行號可以處理這方面的業務嗎?

就算花錢也沒關係

可以請版大指點一二嗎?例如該至哪裡尋找有能力處理的廠商。謝謝

好說。也沒幫上什麼忙。

具體那些店家有這方面服務,我倒不清楚。聽說有些販售相機、設有維修站的商家會幫人處理,可以問看看。拿台北來說,在漢口街、博愛路一帶找找看。最好把原始記憶卡帶去,復原的機會大些。

Jeff & Jill2010/01/26 00:43回覆
8樓. 小雲仔
2010/01/23 13:47
請教手機錄影的mp4檔有機會救回嗎

前幾天小弟使用手機的錄影功能

快存檔時突然當機,但檔案仍在

copy至電腦中其他的錄影檔都能開啟,唯獨當機時錄影的檔案無法開啟

想請教版大,這種在存檔時造成的錯誤是否有機會救回呢?

需要什麼樣的方式才有機會救回呢?另外是否可以直接與您聯絡請教呢?

謝謝~

抱歉,離開那個領域有一段時間了,MP4算是新格式,沒研究過,然而原理應該相近。

如果救回的檔案大小,和正常值差不多(長度╱時間),可能只是索引部份損壞,救回來應該不難。以fix mp4為關鍵字搜尋,找到現成工具和相關討論,可以參考一下。

敝人不在巷仔內已久,只能打高空談理論技術,實際操作則不太可能。九成以上問題可以用自由軟體或付一點小錢解決,不妨先試試。

Jeff & Jill2010/01/24 09:14回覆
7樓. David
2009/09/17 11:06
感謝你的回應

Dear Jeff

謝謝你百忙之中抽空的回覆

我現在的SD卡是呈現"未格式化狀態"(完全無法讀取),也可用你推薦USB Image Tool利用讀卡機創造備份,供修護用嗎??

謝謝

David 

抱歉,沒試過。如果經創見工程師檢查,沒有實體損壞,可以跑一遍試試看。也可以試試這個救援工具:

Recuva

有中文介面,操作也很簡單。記得救回的檔案不要直接存回記憶卡,先存入其他磁碟,免得造成進一步破壞。

如果仍舊不行,再去找創見幫忙吧。

Jeff & Jill2009/09/17 19:03回覆
6樓. David
2009/09/15 17:57
拜託 救救我~~非常重要的AVI檔

Dear Jeff & Jill

不好意思   懇請協助

我是一個於2009.7.27喜獲女兒的爸爸(心情非常雀躍),我平常會利用數位相機記錄小朋友的成長點滴,本次2女兒的出生也不例外,
我陪伴老婆進入產房全程記錄2女兒的出生過程,未料於當天我誤刪了其中一個生產過程的影音檔,我非常自責不已~~~~~~

為能及時救回誤刪的檔,我隔天即將SD卡送至內湖一家資料救援公司(X威)救援,我一直跟該公司強調"尚有其他相片及影音檔未輸出至電腦",
結果該公司保證沒問題,不會動到其他資料,結果該公司人員未依照"正常作業程序",應將可讀取的資料先行備份出來,未料SD卡目前呈現
"未格式化"狀態,救出來的資料,完全無法開啟,我的記憶完全沒了(而且該公司完全不理會我的痛苦)

我後來尋求各種可能資料救援的途徑,感謝上天保佑,我的SD卡製造商創見,在完全不收費的情況下,幫我把資料救出,九成的資料堪用,
然其中生產過程的主要3個AVI檔,因損毀而無法開啟,可否借助你幫同事修復AVI檔的經驗,指導我一下 拜託~~~~~~~~

一個想要保留小朋友成長記錄的爸爸(David)   敬上

很遺憾,最近實在太忙,連更新部落格的時間都沒有,大概也不會有空來處理你的問題。

不過你還是有機會自救。首先,找創見處理記憶卡是對的,至少可以排除實體損壞。你提到的另一家公司是否造成更大損失,我不敢說。但下列小工具,可以幫你把整張記憶卡的資料完整備份。進行任何處理之前,應該先做至少一次備份。

USB Image Tool

假設沒有實體損壞,事實上可以用備份下來的影像檔進行修復,不過這件事暫不討論。備份的用途,是萬一修復程式出了什麼差錯,還能有機會還原。

AVI fix repair為關鍵字搜尋,可以找到好些AVI檔修復軟體。大部份的損害,都可以用這些軟體救回,至少將殘餘部份補綴成能夠播放的程度。當然,其中多數要收取一些費用。免費的也有,請參考下列程式:

DivFix++

先試試。上述軟體的操作說明在網站都找得到,操作也很簡單,應該沒什麼問題。運氣好的話,說不定靠這個就搞定了。

得提醒一點:受損的影音檔,能救回多少,都要當做上帝的恩賜。個別軟體使用的方法雖然大同小異,但用力的方向不同,得出的結果或許有差。某個軟體這次表現突出,並不表示每次都能成功。假設你用免費軟體救回了七八成,可別認為收費軟體應該救得更多,或者寫這篇文章的我也許實力更強。沒那回事。救得回來就該偷笑了。

其實我充分瞭解你的心情。我自己把蜜月旅行的錄影帶弄丟一半的時候也很懊惱。然而把心情放開,莫執著當下。老婆還在,將來二度蜜月舊地重遊又何妨。兒女也是。我家兩小的生活記錄,加起來幾十個小時,跟結婚照一樣供奉在櫃子裡,難得開封。記錄固然珍貴,每天看著活生生的嬌嗔顰笑,才是一大樂事哪。人生缺憾難免,看開罷。

Jeff & Jill2009/09/16 18:21回覆
5樓. 郭子儀
2009/06/23 10:05
請救救我吧

不好意思,我再說得詳細點

我不小心將數位相機的影片(avi)直接從數位相機刪除,當時晴天霹靂,頭腦一陣暈眩,之後又笨笨的拍了一段影片後才想到是不是可以救回來,後來看到網友介紹,利用Digital Image Recovery把檔案救回了,可是卻發現不能播放,也許是檔案有部份損毀吧,我有問過我朋友,但他們都說没救了,因為是我小孩的影片,真的真的很珍貴,所以我仍不放棄繼續上網查詢,感謝終於看到你的這個標題,拜託幫幫我吧

AVI檔的話,可以試試VirtualDub這套軟體。除非檔頭毀損,它的積極復原模式(aggressive mode)能夠找回大多數失落的片段,運氣好可以存成一個可播放的新檔,差一點也有機會分段人工組合。英文還可以的話,他的網站有詳細說明和討論。

過去我寫的程式,唯一強過它的,只是檔頭損毀時,可以試圖重建或移植其他檔案的檔頭。但前提是資料部份損毀不能太大,否則即使還原也是零散破碎,以影片來說,會很難忍受。

依你的敘述,情況應該不太樂觀。刪除之後又拍了影片,極可能已經被蓋掉,救回來的機會不高。Digital Image Recovery還原的檔案多半用處不大,建議拿整張記憶卡找專家處理,試試還有沒有機會。

Jeff & Jill2009/06/23 23:08回覆
4樓. 郭子儀
2009/06/22 23:02
請救救我吧
我有一個救回的AVI檔案無法播放,你可以幫忙救嗎,拜託拜託,那是很有意義的影片
發表迴響

會員登入