AVI文件格式
AVI英文全称为Audio Video Interleaved,即音频视频交错格式,是微软公司于1992年11月推出、作为其Windows视频软件一部分的一种多媒体容器格式。
AVI文件将音频(语音)和视频(影像)数据包含在一个文件容器中,允许音视频同步回放。类似DVD视频格式,AVI文件支持多个音视频流。AVI信息主要应用在多媒体光盘上,用来保存电视、电影等各种影像信息。
AVI文件类型用一个四字符码‘AVI ’来表示。整个AVI文件的结构为:一个RIFF头 + 两个列表(一个用于描述媒体流格式、一个用于保存媒体流数据) + 一个可选的索引块。AVI文件的展开结构大致如下:avi的二进制文件是按小端原则存放的,即数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
打开一个avi文件:
/* * heres the general layout of an AVI riff file (new format) * * RIFF (3F??????) AVI <- not more than 1 GB in size * LIST (size) hdrl * avih (0038) * LIST (size) strl * strh (0038) * strf (????) * indx (3ff8) <- size may vary,should be sector sized * LIST (size) strl * strh (0038) * strf (????) * indx (3ff8) <- size may vary,should be sector sized * LIST (size) odml * dmlh (????) * JUNK (size) <- fill to align to sector - 12 * LIST (7f??????) movi <- aligned on sector - 12 * 00dc (size) <- sector aligned * 01wb (size) <- sector aligned * ix00 (size) <- sector aligned * idx1 (00??????) <- sector aligned * RIFF (7F??????) AVIX * JUNK (size) <- fill to align to sector -12 * LIST (size) movi * 00dc (size) <- sector aligned * RIFF (7F??????) AVIX <- not more than 2GB in size * JUNK (size) <- fill to align to sector - 12 * LIST (size) movi * 00dc (size) <- sector aligned *
avi的二进制文件是按小端原则存放的,即数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
打开一个avi文件:
以具体文件为例,分析音频和视频的数据是如何放置的?交织放置 or 连续放置?
在第00005b40和0005c7c0行,文件中出现了“01wb”,代表前两个wave块,即音频数据。
在第00030c60和0003af80行,文件中出现了“00dc”,代表压缩后前两个DIBs视频数据。
比较存储数据块的顺序可知,在avi文件中音频和视频数据是交织放置的。
WAV格式
WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大(每分钟的音乐大约需要12兆磁盘空间)。它符合资源互换文件格式(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。Wave格式支持MSADPCM、CCITT A律、CCITT μ律和其他压缩算法,支持多种音频位数、采样频率和声道,是PC机上最为流行的声音文件格式;但其文件尺寸较大,多用于存储简短的声音片段。
WAV文件采用的是RIFF格式结构。至少是由3个块构成,分别是RIFF、fmt 和Data。所有基于压缩编码的WAV文件必须含有fact块。此外所有其它块都是可选的。块mt,Data及fact均为RIFF块的子块。WAV文件的文件格式类型标识符为“WAVE”。基本结构如下表。
下面详细给出各区块的组成结构:
- RIFF块
- FORMAT块
- DATA块
WAV的二进制文件是按小端原则存放的。
- 下面以具体文件为例,分析各个数据块结构和内容。
RIFF块,标识符为52 49 46 46,数据大小是2A 62 01 00,注意存储是小端形式,故实际该文件大小的十六进制表示应该是00 01 62 2A,转换成十进制为90666个字节,与“属性”显示的文件大小差8个字节,即此文件中的标识符和格式辨别码的8个字节。而57 41 56 45对应WAVE的ASCII码。
FMT块,66 6D 74 20分别是fmt和空格所对应的ASCII码;子块数据长度,十六进制表示,00 00 00 10,也就是共有16个字节;00 01表示该数据以PCM方式进行编码;00 01表示该文件是单声道文件;00 00 56 22表示采样频率为22050Hz;00 00 AC 44表示数据传输速率44100;00 02表示块对其单位,说明该播放软件一次需要处理多个2字节大小的数据;00 10表示每个采样值用16位进行表示,若有多个声道,则每个声道样本大小都一样, 高八位表示左声道,低八位表示右声道。
DATA块, 64 61 71 61表示data的ASCII码;子块数据长度,十六进制表示,00 01 62 60,即为90720个字节.
-
文件播放时间为音频数据字节数/数据传输速率=90720/44100≈2s
计算与结果吻合。