MP3的播放时间计算方法
-
主题:
MPEG
简介
+
如何计算
CBR/VBR
MP3
的播放时间
- 1
版本:
20100425
作者:
crifan
邮箱:
green-waste(At)
声明:
1.
本文所写内容,多数整理自自互联网,版权归原作者所有。
2
.
笔者知识有限,文中难免有误,欢迎批评指正。
3.
欢迎盗版,盗版不究。
【此文目的】
1.
< br>了解
MPEG
相关知识
2.
了解
MP3
的常
见术语含义
3.
详解
VBR
MP3
的帧头格式及含义
4.
搞懂如何去计算
CBR
和
VBR
的
MP3
文件的播放时间(
duration
)
1
.
MP
EG
的相关知识
想要了解如何计算<
/p>
VBR
的
MP3
的播放时间之前,要简单了解一些
MP3
相关的一些基本概
p>
念,主要是
MPEG
的相关知识和编解码的一些知识:
1.1
MPEG
是啥
MPEG
全名
Moving
Pictures Experts Group
,动态图像专家组,简单说就是一个专
家组,专门研究一些音
视频规范的,所以才叫专家,不是我们国家的“砖家”哦。这个专
家组是在
ISO/IEC
(
Inter
national
Standards
Organization/International Electrotechnical
Commission,
国际标准化组
织
/
国际电工委员
会)联合指导下成立的。这个组,专门去研究出一个数字音视频的压缩相关的规范,所以最后
研究出适用
于不同应用环境的
N
多规范。
和事物发展的过程类似
,研究出这么多的规范也是,不同时期,不同的版本,针对不同的应用。也是由简
到
p>
繁。并且,命名规则都是,按照阿拉伯数字从小到大的:
MPEG 1
,
MPEG2
,
MPEG4
,
MPEG-7
p>
,最新版本,
好像都有
MPEG-21
p>
了。
1.2
为啥没了
MPEG-3
估计有人纳闷了,为啥中间的
MPEG3
咋没
了呢?
是没
MPEG3
,
当然,
不是被刘谦变魔术变没了,
而是由于当时设计者没有规划好,
导致已经设计好的
MPEG2
,
性能太好了,都能干本来
打算让
MPEG3
干的活了,所以后来干脆就不去再设计
MPEG3
了,原定计划就取消
了,也就没了
MPEG3
。看来这个
MPEG3
p>
,待遇貌似不比胎死腹中好多少。对于很多人误解的,以为
MP3<
/p>
就是
MPEG-3
,也就更错的离谱了。
关于
MP3
的名称来历,下面会再解释。
1.3 MPEG2.5
又是啥
MPEG2.5
,简单说就是出身不正,不是官方推出的规范。
MPEG 2.5
是针对
MPEG2<
/p>
的一个非官方的扩展版本,
支持更低
的采样率。关于其更多解释,网上找到这些:
MPEG
声音标准提供三个独立的压缩层次:
Laye
r I
、
Layer
II
和
Layer
< br>III
。用户具体选哪个
Layer
,可以
根据自己的
要求,在权衡复杂性和声音质量之后,做出自己的选择。
A
.
Layer
I
的编码器最为简单,编码器的
输出数据率为
384
kb/s
,主要用于小型数字盒式磁带
(digital
compact cassette
,
DCC)
。
B
.
Layer
II
的编码器的复杂程度属中
等,编码器的输出数据率为
256
kb/s
~
192 kb/s
,其应用包括数字
广播声音
(digital
broadcast audio
,
DBA)
< br>、数字音乐、
CD-I(compact disc-
interactive)
和
VCD(video
compact disc)
等。
C
.
Layer
III
的编码器最为复杂,
编码
器的输出数据率为
64
kb/s
p>
,
主要应用于
ISDN
上的声音传输。
MPEG-1
Layer III
p>
支持的采样率为
32,44.1,48khz,
比
特率支持
32---
320kbps MPEG-2 Layer III
支持的采样率为
< br>16,22.05,24khz,
比特率支持
8---
160kbps
Fraunhofer
对此又进行扩展,
p>
将原来
MPEG-2
所支持的低采样
率再除以
2
,
p>
得到:
8,
11.025,
和
12
kHz
,
比特率跟
MPEG-2
相同,称
为
。
1.4 MPEG
中不同帧之间的关系
对于
Layer
I
和
Layer II
,不同的帧之间
,是互相独立的。也就意味着,你可以任意截取
MPEG
的音频
文
件,然后找到第一个正确的帧头,然后解码,然后接下来放余下的帧,这样都可以正确
的播放。而
对于
Layer
III
,所有帧不保证都是互相独立的。由于可能用到“字节蓄水池(
byte
reservoir
)”,
即内部的
一个数据缓存,这些帧,都是相关的,最差情况下,要连续缓冲保存
9
个帧,才能对第一帧解码。
1.5 MPEG-1
和
MPEG-2
音频特性
1.5.1
MPEG-1
音频(
ISO/IEC
11172-3
)
其描述了三层
p>
音频编码
,具有如下特性:
A
.一个或两个音频声道
B
.采样率
32KHz
、
44.1KHz
或
48KHz
C
.比特率从
32Kbps
< br>到
448Kbps
D
.每一层都有其自己的其他特点。
1.5.2
MPEG-2
音频(
ISO/IEC
13813-3
)
其包含了对
MPEG-1
的两种扩展。通常称为
MEGP
-2/
低采样率(
LSF
)和
MPEG-2/
多声道(
Multichann
el
)
。
1.5.2.1
MPEG-2/LSF
的特性:
A
.一个或两个音频声道
B
.采样率只有
MPEG-1
的一半
C
.比特率从
8Kpbs
到
256Kbps
1.5.2.2
MPEG-2/
多声道,的特性:
A
.多达
5
个全范围的音频声道和一个<
/p>
LFE
(
Low Frequency
Enhancement
,也叫做
重低音)声道
B
.采样率和
MPEG-1
相同
<
/p>
C
.对于
5.1
声道,最高的比特率可达
1Mpbs
1.6
什么是
ISO/IEC
11172-3
和
ISO/IEC 13818-3
由于
MPEG
只是
IS
O/IEC
下面的一个组织,所以,关于
MPEG
音频部分的规范,也
多是出自
ISO/IEC
之手。
因此,
ISO/IEC
11172
和
ISO/IEC 13818
,其实就是
MPEG1
的音频部分和
MPEG-2
的别名。
另外,
p>
由于
MPEG-1
和
MPEG-2
,
每个都分好几个部分,
其中,
第三部分是关于音频的。
所以,
ISO/IEC
11172-3
和
ISO/IEC
13818-3
,就分别对
应着
MPEG-1
的音频,
MPEG-2
的音频,也就是我们常常提到的
MPEG
p>
的音频
文件所对应的规范。
2 MP3
中常见的术语
知道了
MPEG
的来龙去脉后,
< br>在了解
MP3
的播放时间如何计算之前,
也要知道其他一些,
和
MP3
相关的知识,
和常见的术语:
2.1
啥叫
MP3
注意,这个
MP3
,不是
MPEG-3
,但是为何叫
MP3
,是因为:
p>
MPEG
规范中规定了,每一个版本的
MP
EG
,比如
MPEG1
,
MPEG2
等,都有三种不同的
Layer
,不同
Layer
的
序
号命令是以罗马数字的,所以叫
做
Layer
I
,
Layer
II
,
Layer
III
。
其中,最常见的就是
MPEG 1
的
Layer III
,就是众所周知
的
MP3
。
根据事物发展由简到繁的规律,我们知道,
Layer
III
,相对
Layer
I
和
Layer II
,其有着更复杂
的压缩
算法。正是其相对复杂,用了很多算法,比如声学上的掩蔽效应(
masking effect
)
,
< br>Huffman
压缩等,使
得尽可能保持音质的
基础上,
极大地减少了音频文件大小,
也就是说,尽量让你听上去音频声音和音质都
没啥变化,但是
MP3
的文件大小,相对于原先没处理的,或者其他格式的,比如
WAV
格式等,要小很多,
方便大家互相传播
交流。这也是
MP3
如此流行的主要原因之一。
2.2
什么是
LSF
MPEG2/2.5
也常被简称为
L
SF
(
Low Sampling Frequencies<
/p>
)
,低采样率。
2.3
什么是帧(
frame
)
通俗点说,就是一段连续的数据块。对于
MPEG
音频文件本身,并没有什么文件头,而是由很多数据块
所组
成,这样的单个的数据块,就叫做一个(数据
/
音频)帧(
frame
)
。
MP3
文件,同理,由很多个帧所组成。
帧,也是其他很多音视频技术中的基本单位。
2.4 <
/p>
什么是帧头(
header
)
每一个帧里面,包含了帧头和音频数据。帧头,就是在帧的头部,有一定
长度的数据,用于描述改帧音频
的
一
些参数,用于解码器对此音频帧进行解码。对于
MPEG
的帧头
,是固定的
32
比特,即
4
字节。
2.5
啥是
CBR
和
VBR
CBR
(
Constant
bitrate
)固定
(/
不变
)
比特率,
VBR
(
Variable
bitrate
)
,不
定<
/p>
(/
可变
)
比特
率,变与不
变,指的是
MP3
的比特率
是否固定。音频文件可以被编码成
CBR
或
VBR
。
VBR
意思就是,每一帧
的比特率不
同。由于
VBR
可以在需要
的时候,采用高比特率,所以,一般来说,
VBR
的音质比
p>
CBR
的要好。
很多种音视频文件,都可以按照
VBR
来压缩,比如
MP3
、
WMA
、
Vorbis OGG
、
AAC
,
MPEG-2
的视频等。
VBR
的优点是,和
CBR
相比,用更
小的空间,即文件更小,实现
更高的音质。缺点是,编码复杂
度增加,编码
需要更长时间,而有些硬件编码器可能和
VBR<
/p>
不兼容。
2.6
比特率(
bitrate
)
p>
即每秒包含
/
播放了多少个比特的数据。比
特率常用
Kbps
(
kilo
bits per second
,
千比特每秒)表示。
此处的千字节
=1000
< br>字节,而不是
1024.
2.7
边信息(
side
information
)
在
MPEG
音频的帧头后面,
有一些解码器会用
到
的一些信息,用于解码器控制音频流的播放,
它就叫做
边
信息。不同版
本的
MPEG
的
Layer
III
的边信息的大小,详见后面的表。
3 VBR MP3
的帧头格式详解
3.1 VBR MP3
的帧头类型
VBR MP3
的帧头主要有两种,
X
ING
和
VBRI
。
< br>
关于它们的具体格式和含义,下面会详细解释。
p>
另外常常会提到的是,关于
V1
和
V2
两个版本的
ID3
头信息,这个主要是用于记录音频文
件的一些描述
信息,比如歌手,专辑,曲风等,和对音频文件解码,没有直接关系。属于
存储音频文件附属信息的头。
ID3
的
V1
和
V2
,不会同时存在。如果存在
ID3
的话,一般
< br>ID3 V1
会放在音频文件的最后,大小
128
个字
节,其中前三个字
节是字符“TAG”。
ID3
V2
放在音频文件的开头处,前三个
字节是字符“ID3”。
关于
ID3
的具体格式,请参考附录中的引用文献。
由于此处介绍的内容,目的是尽快,尽可能精确地去估算
M
P3
文件的(持续)播放时间。所以,此处不涉
及,关于如何去
编解码实际的音频数据。
3.2
MPEG
音频帧格式及其含义介绍
M
PEG
音频文件,由一个个的帧(
Frame
< br>)组成。每一帧都
有个帧头(
Frame Header
)
,位于该帧的最开始
处,接下来的是音频数据。音频数据多数
都是包含了
固定数目
的
音频采样
(
Sample
)
。正是基于这个特
性,才有后面的
VBR
< br>的播放时间计算公式。
前面介绍过了,目前,存在的三
种
Layer
的
MPEG
音频,尽管他们的压缩方法各不相同,但是帧头格式都一
样。
这些帧,由一个个的
Slot
(槽)组成。
Layer I
中,
一个
Slot
是
4
个字节,在
Layer
II
和
Layer III
中,一个<
/p>
Slot
是一个字节。
MPEG
帧头的格式及含义
位置
0
长度
11
含义
用于同步帧,找到此帧头(所有
位均置
1
)
音频版本
ID
(
参见
表
3.2)
00 -
版本是
MPEG 2.5
(MPED-2
的非官方
扩展版本
)
示例
1111 1111 111
11
2
01
–
保留
10
–
版本是
MPEG 2 (ISO/IEC 13818-3)
11
–
版本是
MPEG 1 (ISO/IEC 11172-3)
Layer
的索引
00
–
保留
11
13
2
01 - Layer
III
10 - Layer II
11 - Layer
I
保护位
(Protection bit)
01
15
1
0
–
包含
16
位的
CRC
校验
1
–
无
CRC
1
16
20
4
2
比特率索引
(
参见
表
2.1.3)
采样率索引
(
参见表
2.1.2)
填充位
1001
11
22
1
如果设置了,就会对每帧数据填充一个
slot
(
对于帧大小的计
算很重要
)
0
23
1
私有位
(
仅用于标示性的
)
声道的模式
00
–
立体声
01
–
混合立体声
10
–
双声道
(
两个单声道
)
11
–
一个声道
(
单声道
)
注
:
双声道文件由两个独立的单声道所组成。
大多数解码器把
双声道输出成立体声,
但是实际上,
不是所有的双声道都是立体
声的。
1
24
2
01
26
2
模式扩展
(
仅用于联合立体声
)
(
参见
表
2.1.6)
00
表
1
MPEG
音频帧头的格式
注意,
p>
此处如果上表中的保护位
Protection
< br>bit==0
,
那么紧跟着此
M
PEG
的
Header
之后,
会有
16bit=2Bytes
的
CRC
,
用于校验此帧头
是否出错。
主要目的是,
以防万一,
数
据在传输过程中,
或者常见的
mp3
文
件拷贝来拷贝
去
的过程中,出现此帧
头数据有些位出错了,此时,你收到此
mp3
文件,解码此帧头
,用后面
16bit
的
crc
和你实际用
crc
算法算出来的进行比较,就会
发现不一样,就说明此帧头有误。实际情况,很少出错。而<
/p>
且,实际中,很少用到此保护位,很少在帧头后面跟随
16bit
的
CRC
。
在
MPEG
标准中,描述了一种自由格
式(
free
format
)
,这种自由格式意思为用一个固定比特率对文件进行
编码,而此固定的
比特率不是我们表中预定义好的。
一般的解码器都无法解码这类音频文件。
下面是比特率索引表,
(单位:
Kbit/sec
)
。
比特率
MPEG 1
MPEG 2, 2.5 (LSF)
索引
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
表
2
比特率
Layer I
空闲
32
64
96
128
160
192
224
256
288
320
352
384
416
448
保留
Layer II
Layer III
Layer I
Layer II & III
32
48
56
64
80
96
112
128
160
192
224
256
320
384
32
40
48
56
64
80
96
112
128
160
192
224
256
320
32
48
56
64
80
96
112
128
144
160
176
192
224
256
8
16
24
32
40
48
56
64
80
96
112
128
144
160
为了计算帧大小,我们需要知道,每一帧里面包含多少
个采样,即采样数
/
帧(
sample
per frame
)
。
Layer I
Layer
II
Layer III
表
3
每帧的采样数
根据
< br>MPEG
帧头里面的索引,对应的,不同版本的
MPEG
的采样率也是不同的:
采样率索引
00
01
10
11
MPEG 1
44100 Hz
48000 Hz
32000 Hz
保留
MPEG 2 (LSF)
22050 Hz
24000 Hz
16000 Hz
MPEG 2.5 (LSF)
11025 Hz
12000 Hz
8000 Hz
MPEG 1
384
1152
1152
MPEG 2 (LSF)
384
1152
576
MPEG 2.5
(LSF)
384
1152
576
表
4
MPEG
不同版本对应的采样率
4
MP3
的播放时间的计算公式及
XING
和
VBRI
头介绍
4.1 CBR
的
MP3
的播放时间
(duration)
计算公式
因此,帧大小可以用如下公式计算:
Frame Size = ( (Samples Per Frame / 8 *
Bitrate) / Sampling Rate) + Padding Size
帧大小
=
(
(每帧的采样数
÷ 8 × 比特率)
÷
采样率)
+
填充大小
【公式
1
】
由于舍入误差,官方的计算帧大小的方法和此稍有不同。根
据
ISO
标准,应该以
slot
为单位进行计算,然
后对结果取整,再
p>
乘于
slot
的大小。
用如下公式可以计算
MP3
的播
放时间,以秒为单
位:
CBR Duration = File Size / Bitrate * 8