Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182640
  • 博文数量: 26
  • 博客积分: 1898
  • 博客等级: 上尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-22 23:41
文章分类

全部博文(26)

文章存档

2011年(15)

2010年(4)

2009年(7)

分类: 嵌入式

2009-09-19 19:58:28

MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 2
 
上接:
MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 1

的帧头格式详解

的帧头类型

VBR MP3帧头主要有两种,XINGVBRI

关于它们的具体格式和含义,下面会详细解释。

另外常常会提到的是,关于V1V2两个版本的ID3 头信息,这个主要是用于记录音频文件的一些描述信息,比如歌手,专辑,曲风等,和对音频文件解码,没有直接关系。属于存储音频文件附属信息的头。

ID3V1V2,不会同时存在。如果存在ID3的话,一般ID3 V1会放在音频文件的最后,大小128个字节,其中前三个字节是字符“TAG”ID3 V2放在音频文件的开头处,前三个字节是字符“ID3”

关于ID3的具体格式,请参考附录中的引用文献。

由于此处介绍的内容,目的是尽快,尽可能精确地去估算MP3文件的(持续)播放时间。所以,此处不涉及,关于如何去编解码实际的音频数据。

音频帧格式及其含义介绍

MPEG音频文件,由一个个的帧(Frame)组成。每一帧都有个帧头(Frame Header),位于该帧的最开始处,接下来的是音频数据。音频数据多数都是包含了 固定数目 音频采样(Sample)。正是基于这个特性,才有后面的VBR的播放时间计算公式。

前面介绍过了,目前,存在的三种LayerMPEG音频,尽管他们的压缩方法各不相同,但是帧头格式都一样。

这些帧,由一个个的Slot(槽)组成。

Layer I中,一个Slot4个字节,在Layer IILayer III中,一个Slot是一个字节。

MPEG帧头的格式及含义

 

位置

长度

含义

示例

0

11

用于同步帧,找到此帧头(所有位均置1

1111 1111 111

11

2

音频版本ID (参见 3.2)

00 - 版本是MPEG 2.5 (MPED-2的非官方扩展版本)
01 –
保留
10 –
版本是MPEG 2 (ISO/IEC 13818-3)
11 –
版本是MPEG 1 (ISO/IEC 11172-3)

11

13

2

Layer 的索引

00 – 保留
01 - Layer III
10 - Layer II
11 - Layer I

01

15

1

保护位

0 – 16位的CRC保护下面的帧头
1 –
CRC

1

16

4

比特率索引 (参见 2.1.3)

1001

20

2

采样率索引 (参见表2.1.2)

11

22

1

填充位

如果设置了,就会对每帧数据填充一个slot (对于帧大小的计算很重要)

0

23

1

私有位 (仅用于标示性的)

1

24

2

声道的模式

00 – 立体声
01 –
混合立体声
10 –
双声道 (两个单声道)
11 –
一个声道 (单声道)

: 双声道文件由两个独立的单声道所组成。大多数解码器把双声道输出成立体声,但是实际上,不是所有的双声道都是立体声的。

01

26

2

模式扩展 (仅用于联合立体声) (参见 2.1.6)

00

1  MPEG音频帧头的格式

MPEG标准中,描述了一种自由格式(free format),这种自由格式意思为用一个固定比特率对文件进行编码,而此固定的比特率不是我们表中预定义好的。一般的解码器都无法解码这类音频文件。


下面是比特率索引表,(单位:Kbit/sec)。

比特率

索引

MPEG 1

MPEG 2, 2.5 (LSF)

Layer I

Layer II

Layer III

Layer I

Layer II & III

0000

空闲

0001

32

32

32

32

8

0010

64

48

40

48

16

0011

96

56

48

56

24

0100

128

64

56

64

32

0101

160

80

64

80

40

0110

192

96

80

96

48

0111

224

112

96

112

56

1000

256

128

112

128

64

1001

288

160

128

144

80

1010

320

192

160

160

96

1011

352

224

192

176

112

1100

384

256

224

192

128

1101

416

320

256

224

144

1110

448

384

320

256

160

1111

保留

2  比特率

为了计算帧大小,我们需要知道,每一帧里面包含多少个采样,即采样数/帧(sample per frame)。

 

MPEG 1

MPEG 2 (LSF)

MPEG 2.5 (LSF)

Layer I

384

384

384

Layer II

1152

1152

1152

Layer III

1152

576

576

3  每帧的采样数

根据MPEG帧头里面的索引,对应的,不同版本的MPEG的采样率也是不同的:

采样率索引

MPEG 1

MPEG 2 (LSF)

MPEG 2.5 (LSF)

00

44100 Hz

22050 Hz

11025 Hz

01

48000 Hz

24000 Hz

12000 Hz

10

32000 Hz

16000 Hz

8000 Hz

11

保留

4  MPEG不同版本对应的采样率

 

 

的播放时间的计算公式及XINGVBRI头介绍

MP3的播放时间(duration)计算公式

因此,帧大小可以用如下公式计算:

Frame Size = ( (Samples Per Frame / 8 * Bitrate) / Sampling Rate) + Padding Size

帧大小 = ((每帧的采样数 ÷ 8 × 比特率) ÷ 采样率)+ 填充大小   【公式1

 

由于舍入误差,官方的计算帧大小的方法和此稍有不同。根据ISO标准,应该以slot为单位进行计算,然后对结果取整,再乘于slot的大小。

用如下公式可以计算MP3的播放时间,以秒为单位:

CBR Duration = File Size / Bitrate * 8

播放时间 = 文件大小 ÷ 比特率 × 8                                 【公式2

对于CBR的文件,可以用上面的公式,通过第一帧,算出整个文件的播放时间。

对于VBR,要用另外的公式。下面将会详细介绍。

MP3的播放时间(duration)计算公式

想要计算VBRMP3的播放时间,我们必须要知道整个文件的平均比特率(average bitrate)。此平均比特率,一般来说,往往和第一帧的比特率相差很大。因为MP3音乐的开头部分,很多是用于现实标题的一些几乎无声的数据。也就意味着,如果解码器对于VBR文件,按照CBR文件来解码,而去通过第一帧去计算整个文件的播放时间,那么往往结果和实际相差很大。这也就是后面引用中一个帖子里面遇到的情况,即,Media Player Classic播放VBRMP3时的时间问题

为了得到平均比特率,你必须遍历整个文件的所有帧,然后再才能计算出来,即算出一共有多少帧,将每一帧的比特率加起来得到个总和,用总和去除于帧数,就是平均比特率了。

由于这个做法效率太低,所以就有了VBR的头这个东西,其放在第一帧帧头的后面的。

其包含了此VBR一共有多少帧,有了总的帧数,你就可以用下面的公式去计算播放时间了:

VBR Duration = Number of Frames * Samples Per Frame / Sampling Rate

VBR文件播放总时间 总的帧数 × 每一帧的采样个数÷ 比特率          【公式3

此外,VBR的头中,往往还包含了一个用于定位的TOCtable of content)目录表。即用于在快进或快退的时候,通过表中的信息,可以方便地定位到对应的位置。如果没有此TOC表,需要单独去计算出对应的位置,比较麻烦。

 

 

相关链接及下载:
 
文件: 如何计算VBR MP3的播放时间持续时间.pdf 【全】
大小: 251KB
下载: 下载
阅读(3103) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~