AVI文件格式简介与WAV文件分析

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文件信息块
名称字节数说明
格式块标识4字节小写字符串“fmt ”
格式块长度4字节格式块长度取决于编码形式(参见编码形式表
编码格式代码2字节常见的 WAV 文件使用 PCM 脉冲编码调制格式,该数值通常为 1。(参见编码形式表
声道个数2字节单声道为 1,立体声或双声道为 2
采样频率4字节每个声道单位时间采样次数。常用的采样频率有 11025, 22050 和 44100 Hz。
数据传输速率4字节声道数×采样频率×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。
数据块对其单位2字节采样帧大小。该数值为:声道数×位数/8。播放软件需要一次处理多个该值大小的字节数据,用该数值调整缓冲区。
采样位数2字节存储每个采样值所用的二进制数位数。常见的位数有 4、8、12、16、24、32

请添加图片描述

蓝:标识符”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数据块
名称字节数说明
格式块标识4字节标识data块
格式块长度4字节表明数据块的长度
数据N字节表示音频数据

多声道文件样本在数据中交替出现,本例中,每个采样值所用二进制位数为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;
 };

参考文献

  1. wav文件分析 https://zhuanlan.zhihu.com/p/45518641
  2. avi文件详解 https://blog.csdn.net/intel1985/article/details/114284756
  3. wav文件格式分析 https://www.cnblogs.com/ranson7zop/p/7657874.html

## 参考文献

1. wav文件分析 https://zhuanlan.zhihu.com/p/45518641
2. avi文件详解 https://blog.csdn.net/intel1985/article/details/114284756
3. wav文件格式分析 https://www.cnblogs.com/ranson7zop/p/7657874.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值