AVI文件格式简介与WAV文件分析
AVI文件格式(回答问题)
所有AVI文件至少包含2个必须的LIST Chunk和一个索引Chunk
Chunk:
LIST Chunk:
小端:数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
打开一个本地的avi文件如下:
元数据:
实际数据:
问题一
第一个hdrl list描述视频,故音频用01wb表示,视频用00dc或00db
01wb代表一个音频数据块wave:
一个视频数据块00dc(压缩后的)
又一个音频数据块:
由上可见avi文件中音频和视频数据是交织放置的。
问题二
一个视频数据块:
大小为00 01 D4 C0,即120000个字节
又一个视频数据块:
大小为0,即0字节
又一个视频数据块:
大小为00 03 AB 21,即240471个字节
由上可知,AVI文件的视频数据块大小各不相同
一个音频数据块:
大小为00 00 19 04
又一个音频数据块:
大小为00 00 19 04
查找后发现音频数据块均为此大小
参考本文使用avi文件解析器的结果:
发现avi文件的确视频帧大小不同,音频数据块大小相同
WAV文件分析
概述
WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几! WAV打开工具是WINDOWS的媒体播放器。
不对原有文件压缩,在音质方面无失真情况,但是文件的体积较大。
文件结构
WAV文件是属于RIFF结构形式的文件,这种结构是一种树状结构,其最基本的组成单元是chunk(块),而每一个chunk则由辨识码,数据大小,以及数据本身组成(各4字节),其中辨识码就是RIFF四个字母的ASCII码,用十六进制表示就是52 49 46 46;辨识码之后的四个字节,表示除去文件辨识码和它自己之后剩余文件的大小,最后就是文件的数据本身了。
而WAV格式的文件除了前面的文件头之后,还包含两个子块,如下所示:
其中fmt子块主要用于描述该wav文件的信息,例如,采样率,数据量,编码格式,声道数等,其结构也如RIFF,最开始4个字节表示标识符“fmt”,接着四个字符表示该块大小,后面的18个字节则表示文件的信息,同样,也是fmt子块的“数据”;
这里的fact子块并不是必须的,在标准的WAV文件中没有该子块,只有一些软件转化而来的才会增加该子块,其主要存储关于该文件内容的重要信息;data块则主要就是WAV文件真正能播放的声音数据部分了。
RIFF Chunk标识块
52 49 46 46,即RIFF标识,其后4个字节为46 C0 06 00,说明WAV大小为442438字节(最小端存储)。
57 41 56 45,即WAVE对应的ASCII码
结构体表示为:
struct RIFF_HEADER{char szRiffID[4]; // 'R','I','F','F'DWORD dwRiffSize;char szRiffFormat[4]; // 'W','A','V','E'};
fmt文件信息块
蓝:标识符”fmt“,66 6D 74 20是fmt对应的ASII码
粉:fmt数据块长度
黄:fmt数据块内容
00 01表示该数据以PCM方式编码
00 02表示该文件为双声道文件
00 00 BB 80表示采样频率为48000Hz
00 02 EE 00表示数据传输速率为192000bps
00 04表示采样帧大小为一次处理一帧4字节
00 10表示每个采样值所用二进制位数为16,高八位左声道,低八位右声道
49 4C表示附加信息
结构体为:
struct WAVE_FORMAT{WORD wFormatTag;WORD wChannels;DWORD dwSamplesPerSec;DWORD dwAvgBytesPerSec;WORD wBlockAlign;WORD wBitsPerSample;};struct FMT_BLOCK{TCHAR szFmtID[4]; //'f','m','t',' ' please note the// space character at the fourth location.DWORD dwFmtSize;WAVE_FORMAT wavFormat;};
data数据块
多声道文件样本在数据中交替出现,本例中,每个采样值所用二进制位数为16,高八位左声道,低八位右声道
粉:64 64 74 61为data标识符,标识data的ASCII码
绿:data数据块长度00 06 C0 00,即442368字节
结构体为:
struct DATA_BLOCK{char szDataID[4]; // 'd','a','t','a'DWORD dwDataSize;};
参考文献
wav文件分析 /p/45518641avi文件详解 /intel1985/article/details/114284756wav文件格式分析 /ranson7zop/p/7657874.html## 参考文献1. wav文件分析 /p/455186412. avi文件详解 /intel1985/article/details/1142847563. wav文件格式分析 /ranson7zop/p/7657874.html