警告在先:本文是這個部落格成立以來所僅見、冷冰冰硬梆梆、無趣得可怕的技術題材,除了特定領域的科技狂人以外,通常都會在一分鐘內睡著。莫謂言之不預也。
在這裡發表是因為目前的工作用不上,擺久了餿掉可惜。如果有人看了有所啟發,深入鑽研甚至產品化,也算是造福社會罷。事情源自兩三年前。有同事到國外參展,在同業攤位當「死敗」偷拍重要情資,自己卻不小心刪除。所幸這人還算精乖,拍了幾張照片後察覺不對,趕緊把記憶卡抽掉,想辦法搶救。結果檔案雖然救了回來,影片內容卻無法播放。不死心抓了幾個影片修復軟體,都豎白旗投降。由於敝人先前有和影音軟體打交道的經驗,這位老兄就把毀損的影片檔拿來,問我有沒有辦法救。
一看之下,原來影片檔的「七寸」被掐碎了。檔案頭尾的重要資訊毀損大半,難怪影片修復軟體都寧願放棄。好在影音資料區還有七八成沒壞,於是寫了兩三支小程式,硬是把堪用的部份還原給他,功德圓滿。可惜公司不做這方面,產品化也有實質困難,只好把過程記下,孤芳自賞一番啦。
(對技術細節無興趣者,可直接跳到末段)
公告
由於本文點閱次數持續攀高,不時有朋友請託協助,特此聲明。此文是多年前因工作需要,所做研究的總結,然而現在,並不是我的職業,請別再留言求救。給有需要的朋友一點提示:本文上下週邊,不時會有現役資料救援專家的訊息,敬請多加參考利用。 |
這篇重點是談技術,不是介紹軟體;討論的是方法,而不是產品,目的在解決一個特定問題。 影片檔毀損的原因,包括檔案傳輸複製過程的錯誤疏失,和儲存媒介(如硬碟、光碟、記憶卡)的毀損或錯亂。毀損的位置和範圍通常無可預測,加以資料量龐大,需要以程式檢測修復。
修復各種影片檔的軟體很多,網路上不難找;有些是自由軟體,多數要付點費用。然而無論收費與否,大部份軟體遇上這個問題的反應是一致的,也就是兩手一攤,宣告不治。
什麼問題呢?就是萬一影片檔的檔頭毀損,還能不能救?
這個問題的答案要看影片檔的格式。來自VCD或DVD的MPEG檔案,由於編解碼器(CODEC)及其參數固定或變化有限,問題較小,救回的機率較大。相對而言,屬於container格式的AVI或RM檔案,CODEC資訊放在檔頭,一旦損毀就無法解碼。本篇的重點就放在這兩種格式。
檔頭 | 影音資料 | 索引 |
觀念
AVI和RM是所謂container格式,意思是說,抽象觀念上它們只是一連串記錄(record)的組合,至於如何詮釋記錄,則是播放程式的工作。
Record 1 | Record 2 | Record 3 | …… | Record N |
Tag | Length | Data |
如圖一所示,基本型包括三大塊記錄,即檔頭、資料和索引。資料區是骨幹,包含若干個影音流(stream),通常會有一個視訊流(video stream)和兩聲道的音訊流(audio stream)。影音流資料量大,一般會切割成小塊以便處理。視訊以畫面為單位,音訊則視CODEC而定。
視訊資料幾乎沒有不壓縮的,絕大多數現代的壓縮法,都採用立體壓縮,亦即前後畫面交互參照,消除相同部份,以求最大程度的壓縮比。這種方法會每隔若干畫面設立一個主畫面。理論上說,當場景變化(scene change),就是設立主畫面的好時機,因為畫面變化大;實際得看CODEC如何施作。這部份屬於視訊壓縮的範疇,在此略過不提。音訊資料壓縮與否都有可能,通常切割成小塊和視訊流交錯排列,為的是避免播放程式讀取大檔案時來回移動浪費時間。
索引存在的目的,是當使用者任意選擇播放點的時候,程式可以迅速移動,找到指定的影音資料位置。如果有主畫面的設置,索引中存放的可能是主畫面的位置;也可能按固定間隔,比方說,一百筆記錄,安排一個索引。理論上說,索引並非不可或缺,然而很多播放程式發現索引不正常就哇哇叫甚至當掉。
播放時重要的是影音必須同步,否則對不上嘴事小,音響效果慢了半拍,味道就差多了。檔頭存放資料區的影音流起點、記錄總數、時間長度、CODEC及其附帶參數等資料。AVI和RM都假設影片是連續資料流,每筆記錄並沒有個別的時間戳,播放的時機和同步,都靠個別記錄和起點的相對距離來決定。當資料區遭受破壞時,這是不容易解決的問題。
破壞的型態和坊間修復程式的作為
索引遭到破壞,是最容易解決的問題,修復程式最擅長的也是這個。只需要讀取檔頭中各資料流的起點,整個檔案掃瞄一遍,索引就可以重建。甚至有些耐操的播放程式,如VLC,根本不加以理會,自行在記憶體中重建。
資料區的破壞,當索引仍然完整的時候,可以利用索引所記錄的位置,試圖評估損害,決定那些區域可以修復,同步的問題也比較容易掌握。如果索引不存在,當資料區被破壞時,重建也沒有意義,唯一的辦法是掃瞄資料區。由於影音流都是連續的,裝載資料的每筆記錄都有特定的標籤,和下一筆記錄的位置。先找尋特定標籤,再根據下一筆記錄的位置察看是否正確,反覆執行可以得到若干資料流片段。只不過影音流破壞的程度不一致,又缺乏索引做參考,同步問題極可能發生,甚至可能很嚴重。有些修復程式會試圖復原找到的第一塊資料流,而將其後全數捨棄,免得結果看起來令人不悅。
檔頭被破壞時,會產生幾個重要問題。首先各資料流的起點和總數會成為一個謎。這時候如果索引保持完好,可以提供參考。但由於檔頭通常很小,破壞則至少以幾個KB為單位,開頭的若干損失在所難免。萬一沒有索引可參考,靠掃瞄資料區也有機會找出答案,不過同步仍然是個問題。比較致命的是CODEC及相關參數,相信這是大多數修復程式束手無策之處。自古至今,CODEC的種類沒有一百也有八十。在沒有任何參考的情況下,可能的排列組合太多,放棄還比較輕鬆一點。
對策
這次工作的重點有二。第一是當檔頭損毀時設法重建,第二是儘可能恢復所有可用的影音資料,換句話說,萬一資料區被斷成好幾截,試圖將之儘量復原。
前面說過,一般修復程式在沒有任何參考的情況下,只好選擇放棄。如果我們有同一來源的其他檔案可參考,比方說出自同一台數位相機或製片軟體,將檔頭拷貝過來,可以解決CODEC參數的問題,至少縮小嘗試的範圍。當然資料流起點長度等資料,需要寫一個程式去掃瞄,這支程式同時分析出可用片段和主畫面的位置等。
萬一沒有可供參考的檔案,得要猜測,我們把視訊和音訊個別處理。利用前一支程式分析出、尚可使用的資料片段,以另一支程式調整各項參數試圖解碼。錯誤的CODEC可以經由這個程序過濾掉。找出正確的CODEC之後,再微調各項參數到輸出正確為止。其實時至今日,CODEC百家爭鳴的時代已經過去,除非檔案來源十分古老,否則應該不需要猜測到十次以上。
倘若運氣好,所有片段都能找出來,並且正確解碼,接下來要處理的,就是同步問題。若太過殘缺,又沒有原始索引供參考,恐怕就只能靠人工。用一支程式把原始檔的影音分離,各片段獨立建檔,再利用製片軟體重新接合,或許是比較可行的方式。當然如果資料大體完整,或同步與否沒那麼重要,那麼直接連綴再重建索引,也就可以了。
單以這次任務來說,由於數位相機還在,CODEC部份用不著猜測,解碼不費吹灰之力。然而資料斷成好幾截,同步就很困難了。好在同事只要得到視訊部份就很高興,音訊直接捨棄。是故文末兩段提到的方法只是構思而未實作,那也是產品化的困難所在。講得明白些,這種成功率沒法兒掛保證的事,充其量只能是「殺必死」;就像你把摔破的NB送到維修站,能活命就偷笑了,缺胳膊斷腿也只能摸摸鼻子認賬。 抱歉沒有附圖。手邊書籍當然有,不過都有著作權,不便翻貼。在Wikipedia也沒看到,而且,最重要的,自己作圖好累。還請看倌多多包涵。
原發表於Jeff & Jill的窩,2008/03/14 18:52:55
01. 筱小姐 2008/03/15 18:35
應該要說
懶人迴避
近來正好誤刪所有影片(外接硬碟中)
還好大部分有備份
只有近期的無
但還是有鬱卒
看到你的標題甚喜
但對我 真的很難懂
如果已經由資源回收筒清除,但沒有對那顆硬碟寫任何東西的話,馬上用所謂檔案復原或檔案救星軟體,或許有機會把影片檔完整地救回來,用不著本篇介紹的技巧。
一次刪除多個檔案,又已經寫資料到硬碟的時候,被刪除的影片即使救得回來,也多半支離破碎。這篇文章介紹的,就是在這種情況下,死馬當活馬醫的技術。若非內行人,看不懂是應該的。
要是有信得過的內行人,看過本文後知道該怎麼處理,或許能幫妳解除一點鬱卒。為什麼說「信得過」呢?經過陳姓藝人事件後,大家對於把私密資料交給不相干的外人,應該會多一份戒心。要救影片,得先從硬碟把檔案儘可能復原才行。這意味著即使我願意幫忙,也得拿到妳的硬碟才能著手。除了空間距離的限制之外,我想妳也未必放心把硬碟交給素不相識的人吧。
因此本文純屬技術交流。若要實際解決問題,可以找內行人和我對話,我很樂意切磋。
02. 筱小姐 2008/03/16 12:16
看來我的狀況屬於後者
因為我一直以為影片不見了
是我重灌xp的原因 是軟體不足而看不到
於是仍不斷儲刪相片等其它資料
直到最後才驚覺 影片檔案根本不見了
你的熱心讓我深深感動
我試著處理(先請老弟試看看)
如不行 就得煩勞請教你了
這件事最大的教訓是 要勤備份
備份確實是避免懊悔的不二法門。
像我,如果不確定一張記憶卡裡的資料到底備份了沒,就寧可不刪不用,或先多做一份拷貝再說。重複只是佔空間,一不小心殺錯就糟了。這是多次犯傻學到的教訓。
就算勉強救回來,支離破碎的影片也夠讓人傷心了。事先預防才是上上策。
03. Meitzu 2009/01/22 16:28
您好。
冒昧請教文中所提分離影音的方式(使用何種軟體?如何判讀?)
我個人遇到的狀況是:從HD傳資料到USB drive時,USB鬆脫了,資料傳到一半「變不見」。隨後網上爬文尋得FinalData救援,但救援下來的MP4檔顯示Continuous、Damage居多,無法開啟。我想既然救援軟體上顯示Continuous,是否資料流還在?請問我該如何把資料流「讀」出來?
已試用AviFixed與DivXRepair,因為格式非avi故無效......
待會兒下班,就要開始放年假了,所以沒辦法詳細答覆你的問題。
沒用過FinalData,猜想Continuous是指資料流仍然連續的部份,Damage就是毀啦。如果連續的部份還算大塊,救回來比較有意義。
建議用"fix repair mp4 file"當關鍵字,去google一下。乍看之下,覺得比較有希望的軟體是
- NewLive All Media Fixer Pro (Shareware)
- MP4Box (multiplexer)
- Yamb (Windows GUI of MP4Box)
- SUPER (Converter)
除了第一個以外,都不是修復專用程式。不過搞Open Source的仁人志士,大都有人溺己溺的精神,只要檔案壞得不是太離譜,有時候他們會想些辦法儘量還原。畢竟在檔案分享的過程中,毀損的可能性還不低。
寫這篇文章的時候,只針對AVI和RM做了些研究。用過的軟體,記得有VirtualDub和RMA。這些軟體當時未能突破的地方,我才自己寫了一兩隻輔助程式。針對性太強,對其他格式可能幫助不大。這方面只好抱歉啦。
04. 郭子儀 2009/06/22 23:02
我有一個救回的AVI檔案無法播放,你可以幫忙救嗎,拜託拜託,那是很有意義的影片
05. 郭子儀 2009/06/23 10:05
不好意思,我再說得詳細點
我不小心將數位相機的影片(avi)直接從數位相機刪除,當時晴天霹靂,頭腦一陣暈眩,之後又笨笨的拍了一段影片後才想到是不是可以救回來,後來看到網友介紹,利用Digital Image Recovery把檔案救回了,可是卻發現不能播放,也許是檔案有部份損毀吧,我有問過我朋友,但他們都說没救了,因為是我小孩的影片,真的真的很珍貴,所以我仍不放棄繼續上網查詢,感謝終於看到你的這個標題,拜託幫幫我吧
AVI檔的話,可以試試VirtualDub這套軟體。除非檔頭毀損,它的積極復原模式(aggressive mode)能夠找回大多數失落的片段,運氣好可以存成一個可播放的新檔,差一點也有機會分段人工組合。英文還可以的話,他的網站有詳細說明和討論。
過去我寫的程式,唯一強過它的,只是檔頭損毀時,可以試圖重建或移植其他檔案的檔頭。但前提是資料部份損毀不能太大,否則即使還原也是零散破碎,以影片來說,會很難忍受。
依你的敘述,情況應該不太樂觀。刪除之後又拍了影片,極可能已經被蓋掉,救回來的機會不高。Digital Image Recovery還原的檔案多半用處不大,建議拿整張記憶卡找專家處理,試試還有沒有機會。
06. David 2009/09/15 17:57
Dear Jeff & Jill
不好意思 懇請協助
我是一個於2009.7.27喜獲女兒的爸爸(心情非常雀躍),我平常會利用數位相機記錄小朋友的成長點滴,本次2女兒的出生也不例外,
我陪伴老婆進入產房全程記錄2女兒的出生過程,未料於當天我誤刪了其中一個生產過程的影音檔,我非常自責不已~~~~~~
為能及時救回誤刪的檔,我隔天即將SD卡送至內湖一家資料救援公司(X威)救援,我一直跟該公司強調"尚有其他相片及影音檔未輸出至電腦",
結果該公司保證沒問題,不會動到其他資料,結果該公司人員未依照"正常作業程序",應將可讀取的資料先行備份出來,未料SD卡目前呈現
"未格式化"狀態,救出來的資料,完全無法開啟,我的記憶完全沒了(而且該公司完全不理會我的痛苦)
我後來尋求各種可能資料救援的途徑,感謝上天保佑,我的SD卡製造商創見,在完全不收費的情況下,幫我把資料救出,九成的資料堪用,
然其中生產過程的主要3個AVI檔,因損毀而無法開啟,可否借助你幫同事修復AVI檔的經驗,指導我一下 拜託~~~~~~~~
一個想要保留小朋友成長記錄的爸爸(David) 敬上
很遺憾,最近實在太忙,連更新部落格的時間都沒有,大概也不會有空來處理你的問題。
不過你還是有機會自救。首先,找創見處理記憶卡是對的,至少可以排除實體損壞。你提到的另一家公司是否造成更大損失,我不敢說。但下列小工具,可以幫你把整張記憶卡的資料完整備份。進行任何處理之前,應該先做至少一次備份。
假設沒有實體損壞,事實上可以用備份下來的影像檔進行修復,不過這件事暫不討論。備份的用途,是萬一修復程式出了什麼差錯,還能有機會還原。
以AVI fix repair為關鍵字搜尋,可以找到好些AVI檔修復軟體。大部份的損害,都可以用這些軟體救回,至少將殘餘部份補綴成能夠播放的程度。當然,其中多數要收取一些費用。免費的也有,請參考下列程式:
先試試。上述軟體的操作說明在網站都找得到,操作也很簡單,應該沒什麼問題。運氣好的話,說不定靠這個就搞定了。
得提醒一點:受損的影音檔,能救回多少,都要當做上帝的恩賜。個別軟體使用的方法雖然大同小異,但用力的方向不同,得出的結果或許有差。某個軟體這次表現突出,並不表示每次都能成功。假設你用免費軟體救回了七八成,可別認為收費軟體應該救得更多,或者寫這篇文章的我也許實力更強。沒那回事。救得回來就該偷笑了。
其實我充分瞭解你的心情。我自己把蜜月旅行的錄影帶弄丟一半的時候也很懊惱。然而把心情放開,莫執著當下。老婆還在,將來二度蜜月舊地重遊又何妨。兒女也是。我家兩小的生活記錄,加起來幾十個小時,跟結婚照一樣供奉在櫃子裡,難得開封。記錄固然珍貴,每天看著活生生的嬌嗔顰笑,才是一大樂事哪。人生缺憾難免,看開罷。
07. David 2009/09/17 11:06
Dear Jeff
謝謝你百忙之中抽空的回覆
我現在的SD卡是呈現"未格式化狀態"(完全無法讀取),也可用你推薦USB Image Tool利用讀卡機創造備份,供修護用嗎??
謝謝
David
抱歉,沒試過。如果經創見工程師檢查,沒有實體損壞,可以跑一遍試試看。也可以試試這個救援工具:
有中文介面,操作也很簡單。記得救回的檔案不要直接存回記憶卡,先存入其他磁碟,免得造成進一步破壞。
如果仍舊不行,再去找創見幫忙吧。
08. 小雲仔 2010/01/23 13:47
前幾天小弟使用手機的錄影功能
快存檔時突然當機,但檔案仍在
copy至電腦中其他的錄影檔都能開啟,唯獨當機時錄影的檔案無法開啟
想請教版大,這種在存檔時造成的錯誤是否有機會救回呢?
需要什麼樣的方式才有機會救回呢?另外是否可以直接與您聯絡請教呢?
謝謝~
抱歉,離開那個領域有一段時間了,MP4算是新格式,沒研究過,然而原理應該相近。
如果救回的檔案大小,和正常值差不多(長度╱時間),可能只是索引部份損壞,救回來應該不難。以fix mp4為關鍵字搜尋,找到現成工具和相關討論,可以參考一下。
敝人不在巷仔內已久,只能打高空談理論技術,實際操作則不太可能。九成以上問題可以用自由軟體或付一點小錢解決,不妨先試試。
09. 小雲仔 2010/01/25 14:40
感謝版大這麼快就回應
小弟曾經使用All Media Fixer軟體進行修復
可惜修復完後檔案仍無法開啟
請教一下,坊間有公司行號可以處理這方面的業務嗎?
就算花錢也沒關係
可以請版大指點一二嗎?例如該至哪裡尋找有能力處理的廠商。謝謝
好說。也沒幫上什麼忙。
具體那些店家有這方面服務,我倒不清楚。聽說有些販售相機、設有維修站的商家會幫人處理,可以問看看。拿台北來說,在漢口街、博愛路一帶找找看。最好把原始記憶卡帶去,復原的機會大些。
10. Tina 2010/05/25 16:20
你好~
我想請問一下,我有個avi檔的影片,在之前影片輸出後都可以看,但放在電腦一陣子之後,再去開它就不能看了,我嘗試修復它,但還是失敗,用GOM player開,他說少了解碼器,但上網找卻又沒有。現在這個影片檔在電腦上就只顯示檔案類型和大小,有沒有什麼辦法可以解決呢,拜託幫幫我,這個影片很重要,謝謝~
倘若只是少了解碼器,重新安裝播放軟體,或下載、安裝解碼器包(搜尋”codec pack”)就可以解決。
不靈的話,請下載VirtualDub,以之開啟你的AVI檔。如果是能夠掌握的問題,VirtualDub會試圖修復。結果要是可以接受,就另存一個AVI檔。
若依然是解碼器問題,選VirtualDub的File - File Information,看Decompressor項目,把解碼器名稱抄下來,上網去找。找到的話,下載安裝就行了。
若找不到,或名稱不知所云,就很可能正如本文所述,檔頭遭到毀損,要救相當困難。尤其在硬碟裡擺久了,破壞程度難以估計。萬一到此地步,恐怕得找有沒有電腦維修站願意收,死馬當活馬醫。
為避免遺憾,勤加備份是唯一王道。亡羊補牢,特別事隔多日,成功機會不大。只能說記取教訓了。
11. Kevin 2010/06/24 14:03
您好,無意間看到你的搶救毀損影片檔的文章,冒昧請問您是否可以提供協助,您協助的費用我們可以談,我是用Sony DSC-TX5相機(使用Sony的SD卡8G)拍攝三段影片,格式應該是MP4,但是無意間刪除,刪除檔案後有再用相機拍照,之後我用FinalData救援軟體有把三段影片的檔案救回來,但是因為檔案有覆寫過(因為刪除後有再拍照),所以用了很多播放軟體都不能播放,我後來有請二間檔案救援公司嘗試救援檔案,但是他們檢測後都說救不回來影片檔,因此冒昧想請你協助,若您願意協助的話,我們可以談費用,我很想救援回來這三段有紀念價值的影片,感激.
一口回絕可能太殘酷了些,但很抱歉,我大概幫不上忙。
或許你沒注意,這篇文章發表兩年多,事情發生則早得多,距今約五年;使用的技術,是比當時更早兩三年開發的。後來離開那個領域,沒再繼續鑽研,所以新格式如MP4,就不甚了然。回頭搞這些,已經沒有精力和意願,只能抱歉啦。
找專業資料救援是對的。事實上,拿原始記憶卡進行救援,機會應該更大。因為或許有用的資料遺失在閒置區域,而不在救回的檔案上。這種狀況專業資料救援有機會處理。倘若光拷貝救回的檔案,那麼裡面的資料錯就錯了,只會少不會多。
祝你幸運!
12. 伊妮莎 2011/02/25 18:46
拍時又是燈光暗或是晚上, 解析度只有320x240~~~粒子很粗, 這跟檔案毀損不一樣吧
哈,檔案毀損是根本沒辦法播;粒子很粗畫面太暗,是內容的毀損。母片如此,要變成高清畫質不可能,只是想看得稍微清楚的話,倒也不是沒有機會。用坊間的視訊編輯軟體,調整亮度對比、銳利度之類,說不定有救。不過如果是我,還是換一台相機吧。
13. Ironman 2011/12/19 15:13
多年前SD卡上有一個mp4檔案250mb,被刪除後,被加入1.3mb的檔案,
結果我用檔案recovery software就回mp4檔案,但是沒有辦法撥放。
我知道應該是Mp4檔案的資料被打斷,所以沒有辦法撥放,請問在台北市可以找哪家公司或是高手幫我回復。只要修到可以撥放就好。不需要有音檔
在我多年的研究,我發現好像是音檔的問題比較大
。感謝
抱歉幫不上忙。
我自己幾乎從未遇上這類狀況,所以近年來很少注意這方面的事。基本上記憶卡準備充足,一有機會就備份,不到萬不得已不刪除。這樣如果還出問題,只能怪自己買到爛卡或爛相機了。預防重於治療,實際上即使救回,也多半殘缺不全,徒留遺憾。
14. Ethan 2016/07/06 16:21
15. 綠荷 2021/03/01 21:43
沒有留言:
張貼留言