目录
Q2:一个视频帧大约占据多少字节?一个音频数据块大约占用多少字节?
一、WAV格式简介
Waveform Audio File Format(WAVE,又或者是因为WAV后缀而被大众所知的),它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。其文件扩展名为WAV,是WaveForm的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。
本文将以下列音频为例进行分析:
该WAV文件的大小是2309966字节,时长为13秒。
二、WAV格式结构
WAV文件以chunk为最小存储单位。一般由三个区块组成:
- RIFF chunk
- Format chunk
- Data chunk
此外,文件中还可能包含一些可选的区块,如Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等。
1.RIFF chunk
名称 | 字节数(bytes) | 说明 |
标识符(ChunkID) | 4 | 大写字符串"RIFF",标明该文件为有效的 RIFF 格式文档。 |
数据长度(Chunksize) | 4 | 从下一个字段首地址开始到文件末尾的总字节数。该字段的数值加 8 为当前文件的实际长度。 |
格式类型(Format) | 4 | 所有 WAV 格式的文件此处为字符串"WAVE",标明该文件是 WAV 格式文件。 |
实例分析:
- “52 49 46 46”:是Ascii字符“RIFF”,这部分是固定格式,表明这是一个WAVE文件头。
- “46 3F 23 00”:是这个WAV文件的数据大小,这个大小包括除了前面4个字节的所有字节,也就等于文件总字节数减去8。16进制的“46 3F 23 00”对应是十进制的“2309958”。(注意:读取的方式应是低位在前高位在后,也就是要计算“00 23 3F 46”对应的十进制值。)
- “57 41 56 45”:是Ascii字符“WAVE”,是固定格式。
2.Format chunk
名称 | 字节数 | 端序 | 说明 |
格式块标识 | 4 | 大 | 小写字符串,"fmt " |
格式块长度 | 4 | 小 | 其数值不确定,取决于编码格式。可以是 16、 18 、20、40 等 |
编码格式代码 | 2 | 小 | 常见的 WAV 文件使用 PCM 脉冲编码调制格式,该数值通常为 1 |
声道个数 | 2 | 小 | 单声道为 1,立体声或双声道为 2 |
采样频率 | 4 | 小 | 每个声道单位时间采样次数。常用的采样频率有 11025, 22050 和 44100 kHz |
数据传输速率 | 4 | 小 | 该数值为:声道数×采样频率×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小 |
数据块对齐单位 | 2 | 小 | 采样帧大小。该数值为:声道数×位数/8。播放软件需要一次处理多个该值大小的字节数据,用该数值调整缓冲区 |
采样位数 | 2 | 小 | 存储每个采样值所用的二进制数位数。常见的位数有 4、8、12、16、24、32 |
实例分析:
- “66 6D 74 20”:表示标识符“fmt”。
- “10 00 00 00”:对应数字“16”,表示后面有一段的数据长度是16个字节,即偏移量从14H~23H。
- “01 00”:对应数字“1”,表示该数据以PCM方式进行编码。
- “02 00”:对应数字“2”,表示该文件是双声道文件。
- “44 AC 00 00”:对应数字“44100”,表示采样频率为44100Hz,采样率(每秒样本数),表示每个通道的播放速度。
- “10 B1 02 00”:对应数字“176400”,表示波形音频数据传输速率为176400(=2*44100*16/8)。
- “04 00”:对应数字“4”,表示块对其单位,说明该播放软件一次需要处理多个4字节大小的数据(=2*16/8)。
- “10 00”:对应数字“16”,表示采样大小为16Bits,是每样本的数据位数。若有多个声道,则每个声道样本大小都一样, 高八位表示左声道,低八位表示右声道。
3.Data chunk
名称 | 字节数 | 端序 | 说明 |
格式块表示 | 4 | 大 | data’ (0x64617461),表示是一个data块 |
格式块长度 | 4 | 小 | 数据块长度 |
数据 | 4 | 小 | 音频数据 |
实例分析:
- “64 61 74 61”:表示Ascii字符“data”,标示头结束,开始数据区域。
- “00 3F 23 00”:对应数字“2309888”,表示数据长度为2309888个字节。
- N = ByteRate * seconds
- 音频文件播放时间为:2309888/176400≈13s
三、AVI文件格式分析
Q1:音频和视频的数据是如何放置的?交织放置or连续放置?
观察AVI文件:
“00dc”表示压缩后的视频数据,“01wb”表示一个wave块即音频数据。由此可见,音频和视频的数据是交织放置的。
Q2:一个视频帧大约占据多少字节?一个音频数据块大约占用多少字节?
avi的二进制文件是按小端原则存放的,即数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
视频
“BE 91 00 00”→37310字节
“73 05 00 00”→1395字节
“4C 01 00 00”→332字节
视频数据块大小不一样。
音频
“67 01 00 00”→359字节
音频数据块大多数是359字节。