首頁 > 關于效率源 > 新聞和事件 > 技術視界
【技術視界】最新:視頻文件數據修復方法
2019年09月10日

你了解視頻文件嗎?

視頻(Video)泛指
將一系列靜態影像以電信號的方式
加以捕捉、記錄、處理、
儲存、傳送與重現的各種技術。

連續的圖像變化每秒
超過24幀(frame)畫面以上時,
根據視覺暫留原理,
人眼無法辨識單幅的靜態畫面;
平滑連續的視覺效果,
連續的畫面叫做視頻。

1.gif

視頻技術最早是
為了電視系統而發展,
但現在已經發展為
各種不同的格式
以利消費者將視頻記錄下來。

1568082088518044684.jpg

網絡技術的發達
也促使視頻的記錄片段
以串流媒體的形式
存在于Internet之上
并可被電腦接收與播放。

1568082127768072345.jpg

為了使視頻更方便儲存、傳遞等,
視頻需要進行編解碼、解壓縮過程。
因為未經壓縮的數字視頻的數據量巨大,
這樣會造成存儲困難、傳輸困難。

1568082156800059033.jpg

通過編碼壓縮可去除冗余信息,
減少視頻的數據量,使視頻文件變小,
更方便文件的儲存和傳輸。
視頻播放時,
再按照相應的解碼方式對視頻進行解壓,
使視頻數據能夠正常播放。
具體的過程可如圖1所示。

1568082199941079224.jpg

圖1 視頻數據編解碼過程

從未經壓縮的數字視頻數據
到可進行信道傳輸的碼流,
這一過程稱為視頻編碼。

視頻編碼擁有一定的視頻編碼標準,
而視頻編碼標準使不同廠家生產的
編碼器壓縮的碼流能夠
被不同廠家的解碼器解碼。

1568082234629073576.jpg

目前市面上常見的視頻文件格式多種多樣,
而這些文件格式指的是視頻封裝格式,
即將已經編碼壓縮好的視頻軌和音頻軌
按照一定的格式放到一個文件中。

1568082267801099608.jpg

這些視頻文件中的視頻數據
都經過了編碼壓縮處理,
我們需要通過視頻文件的
封裝格式包含的數據描述信息,
確定其中視頻數據采用的編碼標準,
從而選擇對應的解碼器
對視頻數據進行解碼解壓處理,
確保視頻能夠正常播放。

下面我們就以
AVI封裝格式的視頻文件為例,
探討一下視頻文件的
結構信息及編碼標準,
并提出有效的
視頻數據恢復方案。

8.gif

AVI視頻文件格式

AVI是Microsoft公司開發的
一種符合RIFF文件規范的
數字音頻與視頻文件格式。

1568082359146084988.jpg

AVI格式允許視頻和音頻
交錯在一起同步播放,
支持256色和RLE壓縮,
但AVI文件并未限定壓縮標準,
因此,
AVI文件格式只是
作為控制界面上的標準,
不具有兼容性,
用不同壓縮算法生成的AVI文件,
必須使用相應的解壓縮算法才能播放出來。

AVI視頻文件采用的RIFF格式是一種樹狀結構,基本組成單元為LIST和CHUNK:

LIST相當于目錄,可以包含多個CHUNK或多個LIST,包含關鍵字“LIST”;
CHUNK是數據保存的基本單元,可用于保存音視頻數據或者一些參數信息。

一個RIFF格式的文件存儲結構

1568082411756014756.jpg

圖2 AVI文件存儲結構

根據圖2中描述的AVI文件存儲結構,
確定各個LIST/CHUNK中
描述的數據信息。

AVI文件的結構分為三大部分,
分別是信息塊、數據塊、索引塊。

信息塊

信息塊包括
文件的通用信息,
定義數據格式,
所用的壓縮算法等參數。

信息塊結構如下

11.jpg

圖3 信息塊結構

ID為“hdrl”的LIST塊
定義AVI文件的數據格式;
在“hdrl”的LIST塊中包含2個子塊:
一個是ID為“avih”的子塊,
一個是ID為“strl”的LIST塊。

ID為“strl”的LIST塊的個數
大于或等于1個;
AVI文件一般包含兩個“strl”的LIST塊,
一個描述視頻數據信息,
一個描述音頻數據信息。

根據“strl”的LIST中的四字節碼
來描述流數據類型,
常見的流數據類型包括以下

1568082547352019649.jpg

流數據類型為vids的CHUNK中
描述了該AVI文件中
視頻數據的壓縮編碼格式。

以圖3中的數據為例,
該AVI文件中描述的
視頻數據編碼格式為“XVID”。

AVI文件中常用的視頻編碼格式還有:DIVX/MJPG/FMP4

XVID/DIVX:DivX 是將影片的音頻由MP3來壓縮、視頻由MPEG-4技術來壓縮,最后再將兩部分合成制作而成的;XviD 是一個開放源碼的 MPEG-4 多媒體解碼器,它是基于 Open DivX 編寫的。
MJPG:由系列jpg圖片組成的視頻數據
FMP4:采用H265視頻壓縮標準

數據塊

數據塊——包含實際數據流,
即圖像和聲音序列數據。

這是文件的主體,
也是決定文件容量的主要部分。

視頻文件的大小=該文件的數據率x該視頻播放的時間長度。

關于數據塊中描述的
音視頻數據流結構如圖4、圖5所示。

13.jpg

圖4 數據塊音頻數據流結構

 

14.jpg

圖5 數據塊視頻幀數據結構

 

ID為“movi”的LIST塊——
存放AIV文件的音視頻數據;
其中存放的音視頻數據由四字節碼開始,
這四字節碼有2字節的流編號
和2字節的類型碼組成,
流編號的值與信息塊中
描述音視頻數據信息的
LIST的順序相關聯。
流編號從0開始進行編號。

2字節類型碼常見的有以下4種定義:
db——非壓縮視頻幀
dc——壓縮視頻幀
pc——改用新的調試板
wb——音縮未壓頻

wc——音頻壓縮

其中在AVI文件中
常用到的存放音視頻數據的
類型碼為dc/wb。
至于前面的2字節流編號,
可根據信息塊中strl LIST中
描述的數據流信息的順序確定。

索引塊

索引塊——包含數據塊列表
和它們在文件中的位置,
以提供文件內數據隨機存取能力。

AVI文件中
音視頻數據的索引結構如圖6、圖7所示。

15.jpg

圖6 音頻數據流索引結構

16.jpg

圖7 視頻數據流索引結構

ID為“idx1”的塊——
存放了數據塊中數據信息的列表
以及它們在文件中的位置信息。

在索引塊中
每個索引項占0x10字節,
其中描述了數據塊內容的索引,
作用是在拖動視頻進度條時,
能讓解碼器迅速定位到要找的視頻幀。

若缺失了索引塊,
不會影響視頻的正常播放,
但是無法拖動進度條
定位到特定的視頻幀位置。

圖8所示是
一個AVI文件結構展示
及文件修復的小工具界面。

1568082830183080050.jpg

圖8 AVI文件修復工具

通過這個工具可以
展示出需要修復的AVI文件
缺失的封裝存儲結構
以及其中的一些關鍵信息的展示,
這樣有利于快速實現AVI文件修復。

AVI視頻文件修復方案
1568082887012006373.jpg

AVI文件修復主要是下列兩種方式:
有同設備生成的參考樣本文件;
無參考樣本文件;

1.有同設備生成的參考樣本文件

若為同設備生成的參考樣本文件,
則文件中的信息塊內容相同,
則只需要取出需要修復文件中的
數據塊內容即可。

然后根據數據塊內音視頻數據流類型、
流數據字節長度等,
構造出文件的索引塊。

因此我們可根據參考樣本文件
獲取文件信息塊,
在將參考樣本文件的信息塊
與需要修復文件中的數據塊
組合生成新的文件,
則新生成的文件就是
修復完成的新文件。

2.無參考樣本文件

【A】
將AVI視頻文件中的音視頻數據提取出來,
并記錄其中音頻幀數目和視頻幀數目;

【B】
給提取出的音視頻數據文件
添加movi LIST頭結構;

【C】
獲取提取出的音視頻數據的總字節數;

【D】
添加LIST四字節碼+音頻數據字節數
+4字節+movi四字節碼

給提取出的音頻數據文件
添加 hdrl LIST數據內容,
關于hdrl LIST的內容,
可根據前面4步驟獲取到的
相關參數和hdrl LIST的固定結構,
構造出新的完整的hdrl LIST的數據。

① 有同設備生成的參考樣本文件

文件“MOVI0001.avi”不能正常播放,
現在有一個同設備生成的
文件“MOVI0000.avi”,
通過同設備生成的
參考樣本文件“MOVI0000.avi”
對文件“MOVI0001.avi”進行提取修復,
使其能夠正常播放。

文件MOVI0001.avi
在有參考樣本文件的情況下
進行文件恢復流程圖

00.png

圖9 文件MOVI0001.avi有參考樣本文件的文件恢復流程圖

運用圖8所述的“AVI文件修復工具”,
對文件MOVI0001.avi
進行修復的具體操作過程如下所示:

20.jpg

圖10 AVI文件修復工具操作界面

針對文件MOVI0001.avi
修復前后的視頻播放效果展示如下:

1568083585552098259.jpg

圖11 修復前的文件MOVI00001.avi

1568083619084040712.jpg

圖12 修復后生成的fixed_MOVI0001.avi

② 無參考樣本文件

同樣是文件“MOVI0001.avi”,
在沒有參考樣本文件的情況下,
對文件內容進行提取修復,
使其能夠正常播放。

文件MOVI0001.avi
在無參考樣本文件的情況下
進行文件恢復流程圖

01.png

圖13 文件MOVI0001.avi的修復流程圖

運用圖8所述的“AVI文件修復工具”,
對文件MOVI0001.avi
進行修復的具體操作過程如下所示:

24.jpg

圖14 AVI文件修復工具操作界面

針對文件MOVI0001.avi
修復前后的視頻播放效果展示如下:

1568083766227065562.jpg

圖15 修復前的文件MOVI00001.avi    

1568083798071053687.jpg

圖16 修復后生成的fixed_MOVI0001.avi

本文詳細介紹了AVI視頻文件數據修復的方法研究,可以為電子數據取證、視頻數據恢復工作帶來更多的思路和線索。

如對文中的操作、描述有任何疑問,或者有任意取證恢復需求,歡迎撥打熱線電話028-85211099或直接在微信公眾號給我們留言,我們會盡快聯系您。

 

本期投稿:何麗萍

本期編輯:源妹