数据压缩作业三:AVI相关问题及WAV文件格式解析

有关AVI的两个问题

AVI:音频视频交错格式

        AVI格式中,音频和视频是交织存放的。其规律是每15段video后接1段audio,而每经过两次这样的循环就需要16段video后才接1段audio。

AVI中的视频和音频数据块

        视频:视频帧头+视频帧长度+视频帧数据

视频头(30 30 64 63)

长度(4B)

数据

       音频:音频头+音频长度+音频数据

音频头(30 31 77 62)

长度(00 10 00 00)

WAV文件格式分析

WAV文件简介

        WAV文件是由微软公司专门为Windows开发的一种数字音频文件,能够记录单声道或立体声的声音信息,并且能够保证声音不失真。WAV符合资源互换文件格式(RIFF)规范,可以看作是RIFF的一种具体实例,支持MSADPCM、CCITT A律、CCITT μ律等压缩算法。但由于其文件尺寸较大,占用磁盘空间过大,所以多用于存储较短的声音片段。

       WAV的存储过程大致为:

       声源发出的声波通过话筒被转换成连续变化的电信号,经过放大、抗混叠滤波后,按固定的频率进行采样,每个样本是在一个采样周期内检测到的电信号幅度值;接下来将其由模拟电信号量化为由二进制数表示的积分值;最后编码并存储为音频流数据。有的应用为了节省存储空间,存储前,还要对采样数据先进行压缩。

格式分析

        WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。一个WAV文件通常有三个chunk以及一个可选chunk,其在文件中的排列方式依次是:RIFF chunk,Format chunk,Fact chunk(附加块,可选),Data chunk。

RIFF区块

名称

偏移地址

字节数

端序

内容

ID

0x00

4B

大端

52 49 46 46 (0x)

Size

0x04

4B

小端

RIFF区块大小

Type

0x08

4B

大端

57 41 56 45 (0x)

Note:

  • Size是整个文件的长度剪去8B(ID+Size共8B)
  • Type为WAVE时,后面需要两个子块:FORMAT、DATA

FORMAT区块

名称

偏移地址

字节数

端序

内容

ID

0x00

4B

大端

66 6D 74 20 (0x)

Size

0x04

4B

小端

16

AudioFormat

0x08

2B

小端

音频格式

NumChannels

0x0A

2B

小端

声道数

SampleRate

0x0C

4B

小端

采样率

ByteRate

0x10

4B

小端

每秒数据字节数

BlockAlign

0x14

2B

小端

数据块对齐

BitsPerSample

0x16

2B

小端

采样位数

Note;

  • Size:区块数据长度(不包括ID和Size)
  • AudioFormat:Data区块存储的音频数据的格式,具体取值如下表

格式代码

格式

对应Format块长度

0x0001

PCM/非压缩格式

16

0x0002

Microsoft ADPCM

18

0x0003

IEEE float

18

0x0006

ITU G.711 a-law

18

0x0007

ITU G.711 μ-law

18

0x0031 (49)

GSM 6.10

20

0x0040 (64)

ITU G.721 ADPCM

 

  • NumChannels:音频数据的声道数,1:单声道,2:双声道
  • SampleRate:音频数据的采样率
  • ByteRate:每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
  • BlockAlign:每个采样所需的字节数 = NumChannels * BitsPerSample / 8
  • BitsPerSample:每个采样存储的bit数,8:8bit,16:16bit,32:32bit

FACT区块

        采用压缩编码的WAV文件必须要有FACT区块。FACT块中只存储每个声道的采样总数。

名称

字节数

内容

ID

4B

66 61 63 74 (0x)

Size

数据长,最小为4B

数据长度

采样总数

可变

每个声道采样总数

DATA区块

        Data块中存放的是音频的采样数据。每个sample按照采样的时间顺序写入,对于使用多个字节的sample,使用小端模式存放(低位字节存放在低地址,高位字节存放在高地址)。对于多声道的sample采用交叉存放的方式。例如:立体双声道的sample存储顺序为:声道1的第一个sample,声道2的第一个sample;声道1的第二个sample,声道2的第二个sample;依次类推....。对于PCM数据,有以下两种的存储方式

  • 单声道,量化比特数为8,使用偏移二进制码
  • 除单声道外,使用补码方式存储

名称

偏移地址

字节数

端序

内容

ID

0x00

4B

大端

64 61 74 61 (0x)

Size

0x04

4B

小端

可变

Data

0x08

可变

小端

音频数据

Note:

  • Size:音频数据长度,等于比特率乘以时长

小端存储

  1. 大端存储模式:数据的地位保存在哪存的高地址中,数据的高位保存在内存的低地址中
  2. 小端存储模式:数据的地位保存在哪存的低地址中,数据的高位保存在内存的高地址中;WAV文件正是以小端模式进行存储的

实例分析

RIFF块

  •  53 49 46 46:ID标识(RIFF)
  • 50 20 04 00:数据长度,小端存储,00 04 20 50,270416bit=33802B≈33.0098KB
  • 57 41 56 45:类型:WAVE

FORMAT块

  •  66 6D 74 20:ID标识(fmt )
  • 10 00 00 00:数据长度
  • 01 00:小端存储(对应大端存储模式为00 01),PCM编码格式
  • 01 00:音频数据的声道数,小端存储,对应单声道
  • 80 BB 00 00:音频采样率,小端存储,采样率为48000
  • 00 77 01 00:每秒字节数,小端存储,164+7*163+7*162=96000 bps
  • 02 00:每个采样所需的字节数,小端存储,2B
  • 10 00:每个采样存储比特数,小端存储,16bit

DATA块

 

  • 64 61 74 61:ID标识(data)
  • 00 20 04 00:数据长度,小端存储,270336bit=33792B=33KB

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值