一、AVI文件分析
(一)、AVI文件音频和视频的数据是如何放置的?交织放置or连续放置?
打开一个AVI格式文件,如下图:
在00000630行文件出现第一个“01wb”代表第一个音频数据,而在00020D1C行出现第一个“00dc”代表第一个视频数据,在0001F410行文件出现第二个“01wb”代表第二个音频数据,在0003FAF0行出现第二个“00dc”代表第二个视频数据,由此可见,在AVI文件中音频和视频的数据属于交织放置。
(二)一个视频帧大约占用多少字节?一个音频数据块大约占用多少字节?
第一个视频数据帧占用的字节数为00 01 D4 C0,即120000个字节
第二个视频数据帧占用的字节数为00 01 D4 C0,也是120000个字节
第一个音频数据帧占用的字节数为00 01 19 04,即71940个字节
第二个音频数据帧占用的字节数为00 01 19 04,也是71940个字节
由此可见,视频数据帧大约占用120000个字节,音频数据帧大约占用71940个字节,但是这个数据不是固定不变的,而是会根据不同的文件而出现不同的字节大小。
二、WAV文件分析
(一)、WAV文件简介
WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大(每分钟的音乐大约需要12兆磁盘空间)。它符合资源互换文件格式(RIFF)规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持。Wave格式支持MSADPCM、CCITT A律、CCITT μ律和其他压缩算法,支持多种音频位数、采样频率和声道,是PC机上最为流行的声音文件格式;但其文件尺寸较大,多用于存储简短的声音片段。
(二)WAV文件的特性
1.简单的编/解码(几乎直接存储来自模/数转换器的信号)
2.普遍的认同或支持无损耗存储
3.WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数
4.对存储空间需求太大不便于交流和传播
(三)、WAV文件结构
WAV文件采用的是RIFF格式结构。至少是由3个区块构成,分别是文件标识块RIFF chunk、文件属性块Format chunk、文件数据块Data chunk,另外,文件中还可能包含一些可选的区块,如:Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等。
1、文件标识块RIFF chunk
该区块作为WAV文件的标识区块以'RIFF'作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID和Size所占用的字节数。然后是Type字段,为'WAVE',表示是wav文件。
名称 | 字节数 | 端序 | 说明 |
ID | 4字节 | 大端 | 以'RIFF' 为标识 |
Size | 4字节 | 小端 | Size是整个文件的长度减去ID 和Size的长度 |
Type | 4字节 | 大端 | Type是WAVE表示后面需要两个子块:Format区块和Data 区块 |
其中,大端表示数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中。而小端表示数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
2、文件属性块Format chunk
该区块描述了波形文件的属性,例如每个样本的声道数、采样频率、采样位数等等。以'fmt '作为标示,一般情况下Size为16,表示最后没有附加信息,如果Size为18则最后多了2个字节的附加信息。
名称 | 字节数 | 端序 | 说明 |
ID | 4字节 | 大端 | 以'fmt '为标识 |
Size | 4字节 | 小端 | 该区块的长度(减去ID 和Size的长度) |
AudioFormat | 2字节 | 小端 | Data区块存储的音频数据的格式,PCM音频数据的值为1 |
NumChannels | 2字节 | 小端 | 音频数据的声道数,1为单声道,2为双声道 |
SampleRate | 4字节 | 小端 | 音频数据的采样率 |
ByteRate | 4字节 | 小端 | 每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8 |
BlockAlign | 2字节 | 小端 | 每个采样所需的字节数 = NumChannels * BitsPerSample / 8 |
BitsPerSample | 2字节 | 小端 | 每个采样存储的bit数,8:8bit,16:16bit,32:32bit |
3.文件数据块Data chunk
该区块是真正保存wav数据的地方,以'data'作为该Chunk的标示。
名称 | 字节数 | 端序 | 说明 |
ID | 4字节 | 大端 | 以'data'为标识 |
Size | 4字节 | 小端 | 表示音频数据的长度 |
Data | 可变 | 小端 | 音频数据 |
(四)实例分析
1、RIFF chunk
值 | 含义 | 说明 |
52 49 46 46 | 资源交换文件标志ID | ’RIFF’标识为52 49 46 46 |
7E 26 3A 00 | 文件长度Size | 长度为116772 |
57 41 56 45 | 文件格式Type | ’WAVE’标识为57 41 56 45 |
2.Format chunk
值 | 含义 | 说明 |
66 6D 74 20 | ID | ’fmt’标识为66 6D 74 20 |
00 00 00 12 | Format 块长度Size | 长度为18 |
00 01 | 音频格式AudioFormat | 线性PCM编码 |
00 02 | 声道数NumChannels | 2为双声道 |
00 00 AC 44 | 采样率SampleRate | 采样频率为44100Hz |
00 02 B1 10 | 比特率ByteRate | 每秒数据字节数为176400 |
00 04 | BlockAlign | 1×16/8=2 |
00 10 | 采样位数BitsPerSample | 16位 |
3.Data chunk
值 | 含义 | 说明 |
64 61 74 61 | ID | ’data’标识位64 61 74 61 |
00 3A 26 00 | Data块长度Size | 长度为3810816 |
Data | 音频数据 |