MP3的播放时间计算方法

别妄想泡我
952次浏览
2021年02月20日 06:25
最佳经验
本文由作者推荐

-

2021年2月20日发(作者:爱还在)


主题:


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


相关的一些基本概



念,主要是


MPEG

的相关知识和编解码的一些知识:



1.1 MPEG


是啥



MPEG


全名


Moving Pictures Experts Group


,动态图像专家组,简单说就是一个专 家组,专门研究一些音


视频规范的,所以才叫专家,不是我们国家的“砖家”哦。这个专 家组是在


ISO/IEC



Inter national


Standards Organization/International Electrotechnical


Commission,


国际标准化组




/


国际电工委员

会)联合指导下成立的。这个组,专门去研究出一个数字音视频的压缩相关的规范,所以最后



研究出适用


于不同应用环境的


N


多规范。



和事物发展的过程类似 ,研究出这么多的规范也是,不同时期,不同的版本,针对不同的应用。也是由简




繁。并且,命名规则都是,按照阿拉伯数字从小到大的:


MPEG 1



MPEG2


MPEG4



MPEG-7


,最新版本,


好像都有


MPEG-21


了。



1.2


为啥没了


MPEG-3


估计有人纳闷了,为啥中间的


MPEG3


咋没 了呢?



是没


MPEG3



当然,


不是被刘谦变魔术变没了,



而是由于当时设计者没有规划好,


导致已经设计好的


MPEG2



性能太好了,都能干本来 打算让


MPEG3


干的活了,所以后来干脆就不去再设计


MPEG3


了,原定计划就取消


了,也就没了


MPEG3


。看来这个


MPEG3


,待遇貌似不比胎死腹中好多少。对于很多人误解的,以为


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



主要应用于


ISDN

上的声音传输。


MPEG-1


Layer III


支持的采样率为


32,44.1,48khz,



特率支持


32--- 320kbps MPEG-2 Layer III


支持的采样率为

< br>16,22.05,24khz,


比特率支持


8--- 160kbps


Fraunhofer


对此又进行扩展,


将原来


MPEG-2


所支持的低采样



率再除以


2



得到:


8,


11.025,



12


kHz


比特率跟


MPEG-2


相同,称 为





1.4 MPEG


中不同帧之间的关系



对于


Layer I



Layer II


,不同的帧之间 ,是互相独立的。也就意味着,你可以任意截取


MPEG


的音频 文


件,然后找到第一个正确的帧头,然后解码,然后接下来放余下的帧,这样都可以正确 的播放。而



对于


Layer


III


,所有帧不保证都是互相独立的。由于可能用到“字节蓄水池(


byte


reservoir


)”, 即内部的


一个数据缓存,这些帧,都是相关的,最差情况下,要连续缓冲保存

< p>
9


个帧,才能对第一帧解码。




1.5 MPEG-1


< p>
MPEG-2


音频特性



1.5.1 MPEG-1


音频(


ISO/IEC 11172-3




其描述了三层


音频编码


,具有如下特性:



A


.一个或两个音频声道


< p>
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


.一个或两个音频声道


< p>
B


.采样率只有


MPEG-1

的一半



C


.比特率从

< p>
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


的别名。



另外,


由于


MPEG-1



MPEG-2



每个都分好几个部分,


其中,


第三部分是关于音频的。


所以,


ISO/IEC


11172-3



ISO/IEC


13818-3


,就分别对



应着


MPEG-1


的音频,

MPEG-2


的音频,也就是我们常常提到的


MPEG


的音频


文件所对应的规范。



2 MP3


中常见的术语


< p>
知道了


MPEG


的来龙去脉后,

< br>在了解


MP3


的播放时间如何计算之前,


也要知道其他一些,



MP3


相关的知识,


和常见的术语:



2.1


啥叫


MP3


注意,这个


MP3


,不是


MPEG-3


,但是为何叫


MP3


,是因为:



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


音频文件本身,并没有什么文件头,而是由很多数据块 所组


成,这样的单个的数据块,就叫做一个(数据


/

< p>
音频)帧(


frame




MP3


文件,同理,由很多个帧所组成。

帧,也是其他很多音视频技术中的基本单位。



2.4 < /p>


什么是帧头(


header


< p>


每一个帧里面,包含了帧头和音频数据。帧头,就是在帧的头部,有一定 长度的数据,用于描述改帧音频




一 些参数,用于解码器对此音频帧进行解码。对于


MPEG


的帧头 ,是固定的


32


比特,即


4


字节。



2.5


啥是


CBR



VBR


CBR



Constant


bitrate


)固定


(/

不变


)


比特率,


VBR

< p>


Variable


bitrate



,不



定< /p>


(/


可变


)


比特 率,变与不


变,指的是


MP3


的比特率 是否固定。音频文件可以被编码成


CBR


VBR



VBR


意思就是,每一帧 的比特率不


同。由于


VBR


可以在需要 的时候,采用高比特率,所以,一般来说,


VBR


的音质比


CBR


的要好。



很多种音视频文件,都可以按照


VBR


来压缩,比如

< p>
MP3



WMA



Vorbis OGG



AAC



MPEG-2


的视频等。


VBR


的优点是,和


CBR


相比,用更 小的空间,即文件更小,实现



更高的音质。缺点是,编码复杂 度增加,编码


需要更长时间,而有些硬件编码器可能和


VBR< /p>


不兼容。



2.6

比特率(


bitrate




即每秒包含


/


播放了多少个比特的数据。比 特率常用


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>


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



另外常常会提到的是,关于


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


音频帧头的格式



注意,


此处如果上表中的保护位


Protection

< br>bit==0



那么紧跟着此


M PEG



Header


之后,


会有


16bit=2Bytes



CRC




用于校验此帧头 是否出错。


主要目的是,


以防万一,


数 据在传输过程中,


或者常见的


mp3


文 件拷贝来拷贝




的过程中,出现此帧 头数据有些位出错了,此时,你收到此


mp3


文件,解码此帧头 ,用后面


16bit



crc


和你实际用


crc


算法算出来的进行比较,就会



发现不一样,就说明此帧头有误。实际情况,很少出错。而< /p>


且,实际中,很少用到此保护位,很少在帧头后面跟随


16bit



CRC





MPEG


标准中,描述了一种自由格 式(


free


format



,这种自由格式意思为用一个固定比特率对文件进行


编码,而此固定的 比特率不是我们表中预定义好的。



一般的解码器都无法解码这类音频文件。





下面是比特率索引表,

< p>
(单位:


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


为单位进行计算,然


后对结果取整,再



乘于


slot


的大小。


用如下公式可以计算


MP3


的播 放时间,以秒为单



位:



CBR Duration = File Size / Bitrate * 8

-


-


-


-


-


-


-


-