第三次作业:AVI和WAV格式文件分析

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

 计算与结果吻合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值