首页 > 关于效率源 > 新闻和事件 > 技术视界
【技术视界】最新:视频文件数据修复方法
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或直接在微信公众号给我们留言,我们会尽快联系您。

 

本期投稿:何丽萍

本期编辑:源妹