MPEG音频文件格式(包括MP3文件格式)详解

MPEG⾳频⽂件格式(包括MP3⽂件格式)详解
最近⼜在做MP3相关的程序,需要了解mp3的⽂件格式,于是就从⽹上了⼀些资料,并将内容整理如下,加⼊了⾃⼰的⼀些理解。
  MP3 ⽂件是由帧(frame)构成的,帧是MP3 ⽂件最⼩的组成单位。MP3 的全称应为MPEG1 Layer-3 ⾳频⽂件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影⾳压缩标准,MPEG ⾳频⽂件是MPEG1 标准中的声⾳部分,也叫MPEG ⾳频层,它根据压缩质量和编码复杂程度划分为三层,即 Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声⾳⽂件,并根据不同的⽤途,使⽤不同层次的编码。MPEG⾳频编码的层次越⾼,编码器越复杂,压缩率也越⾼,MP1 和MP2 的压缩率分别为4:1 和 6:1-8:1,⽽MP3 的压缩率则⾼达10:1-12:1,也就是说,⼀分钟CD ⾳质的⾳乐,未经压缩需要10MB的存储空间,⽽经过MP3 压缩编码后只有1MB 左右。不过MP3 对⾳频信号采⽤的是有损压缩⽅式,为了降低声⾳失真度,MP3 采取了“感官编码技术”,即编码时先对⾳频⽂件进⾏频谱分析,然后⽤过滤器滤掉噪⾳电平,接着通过量化的⽅式将剩下的每⼀位打散排列,最后形成具有较⾼压缩⽐的MP3 ⽂件,并使压缩后的⽂件在回放时能够达到⽐较接近原⾳源的声⾳效果。
⼀、MPEG⾳频压缩基础
  在众多⾳频压缩⽅法中,这些⽅法在保持声⾳质量的同时尽量压缩数字⾳频使之占⽤更⼩的存储空间。
MPEG压缩是该领域中效果最好的⼀个。这种压缩是有损压缩,这意味着,当运⽤这⼀⽅法压缩时肯定会丢失⼀部分⾳频信息。但是,由于压缩⽅法的控制很难发现这种损失。使⽤⼏个⾮常复杂和苛刻的数学算法,使得只有原始⾳频中⼏乎听不到的部分损失掉。这就给重要的信息剩下了更多的空间。通过这种⽅法可以将⾳频压缩12倍(可以选择压缩率),效果显著。正是应为他的质量,MPEG⾳频变得流⾏起来。
MPEG-1,MPEG-2和MPEG-4都是⼈们熟悉的MPEG标准,MP3只涉及到前两中,另外还有⼀个⾮官⽅标准MPEG-2.5⽤于扩展MPEG-2/LSF到更低的采样率。
MPEG-1⾳频(ISO/IEC 11172-3)描述了具有如下属性的三层⾳频编码:
1或2个声道
采样频率为32kHz,44.1kHz或48kHz
位率从32kbps到448kbps
每⼀层都有⾃⼰的优点。
MPEG-2⾳频(ISO/IEC 13818-3)有两个MPEG-1的扩展,通常叫做MPEG-2/LSF和MPEG-2/Multichannel
MPEG-2/LSF有如下特点:
1或2个声道
采样频率为MPEG-1的⼀半
波特率从8kbps256kbps
MPEG-2/Mutichannel有如下特点:
多达5个声道和1个LFE-通道(低频增强 不是重低⾳)
同MPEG-1⼀样的采样频率
5.1的最⾼波特率可能达到1Mbps
⼆、MPEG Layer3编/解码的基本原理
  ⾳乐CD具有44.1KHz 16Bits ⽴体声的⾳频质量,⼀张CD可以存储74分钟的歌曲(⼤约15⾸左右)。如何将这些歌曲⽆损或基本⽆损地进⾏压缩,以使在同样的媒体上存储更多的歌曲,⼀直困扰着软件业。当MPEG协会提出MPEG Audio Layer1~Layer3后,机会产⽣了。通过使⽤MPEG1 Layer3编码技术,
制作者得以⽤⼤约12∶1的压缩率记录16KHz带宽的有损⾳乐信号。不过,同CD原声区别不⼤。⼈的听⼒系统具有⾮常优越的性能,其动态范围超过96dB。你既可以听到扣⼦掉在地上这样⼩的声⾳,也可以听到波⾳747的强⼤的轰鸣声。但当我们站在飞机场听着波⾳747的轰鸣时, 你还能分辨出扣⼦掉在地上的声⾳吗?不可能。⼈的听⼒系统适应声⾳的动态变化,⼈们对这种适应及屏蔽特性⾳质研究后得出对声⾳压缩⾮常有⽤的理论。⼈们很早以前就知道利⽤这种特性来为磁带录⾳降低噪⾳了(当没有⾳乐时嘶嘶声很容易听到,⽽当⾳乐信号电平很⾼时嘶嘶声不容易听到)。当声⾳较强时产⽣屏蔽效应。在阈值曲线下的噪⾳或⼩信号声⾳⽆法被⼈⽿听到。在较强信号出现时,允许通过更多的信号。在此时增加被量化过的⼩信号数据(使⽤⽆⽤的位来携带更多的信息)可以达到⼀定程度的压缩的⽬的。通常情况下,MP3压缩器将原始声⾳通过FFT(快速傅⽴叶变换)变化到频域,然后通过⼀定的算法算出何种频率声⾳可以携带更多的信息。⽽在还原时解码器所需要做的仅仅是将其从频域再变换回来。
三、整个MP3⽂件结构:
MP3⽂件⼤体分为三部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1)
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。
Frame
.
.
.
Frame
⼀系列的帧,个数由⽂件⼤⼩和帧长决定
每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定
每个FRAME⼜分为帧头和数据实体两部分
帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独⽴
ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE。
四、MPEG⾳频帧格式
  ⼀个MPEG⾳频⽂件是许多的称为帧的较⼩部分组成的,通常,帧是独⽴的组成部分。每⼀帧都拥有
⾃⼰的头和⾳频信息。没有⽂件头。所以,我们可以剪切MPEG⽂件的任何部分并且能够正常播放(当然要分割到帧的结束处尽管许多程序会处理错误头)。在LayerIII中就并不是100%正确的。这是因为在MPEG-1LayerIII⽂件中的数据组织中,帧常常是互相关联的并且不能那样随便裁切。
当你想读取MPEG⽂件的信息时,通常只到第⼀帧就⾜够了,读取它的头信息然后假设其它帧是相同的就可以。但这也不是所有情况。变⽐特率的MPEG⽂件使⽤使⽤所谓⽐特变换,也就是说每⼀帧的⽐特率依照具体内容变化。这种⽅法没有减少声⾳质量的帧将应⽤较低的波特率。这样就允许更好的压缩质量的同时⼜保证了⾼质量的⾳质。
帧头由每⼀帧的前4个字节(32位)组成。帧头的前11⽐特(或前12个位,见下⽂关于帧同步)总是固定的称作“帧同步”。因此,可以在整个⽂件中查第⼀个帧同步(即:必须到⼀个值为255的且其后跟着三到四个最⾼位置1的字节。)然后读取整个头检查值是否正确。关于头中每⼀个⽐特的具体含义应该验证那⼀个值的有效性可以操看下⾯的表格,如果存在被定义为保留,⽆效,损坏或不允许的值表明该头已经损坏。记住,光有这些是不够的,帧同步能在许多⼆进制⽂件⾥⾯的应⽤是很⼴的。⽽且,MPEG⽂件可能在开头包含可能有错误同步信息的垃圾,所以我们必须检查两个或者更多⼀些帧来确定我们现在读取的⽂件是⼀个MPEG⽂件。
帧可能还有CRC校验。如果存在的话,CRC校验紧跟在帧头之后,长为16⽐特。CRC校验之后是⾳频
数据。计算出帧长度,如果你需要读取其他头或者计算该帧的CRC值,可以使⽤它⽐较⽂件中读出来的帧。验证MPEG头的有效性这是⼀个⾮常好的⽅法。
1、帧头格式
下⾯是⼀个头内容图⽰,使⽤字符A到M表⽰不同的区域。在表格中你可以看到每⼀区域的详细内容。
  AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM
长度(bits)
位置(bits)
描述
A
11
(31-21)
帧同步(所有位置1)
B
2
(20,19)
MPEG ⾳频版本ID
00 – MPEG 2.5
01 – 保留
10 – MPEG 2 (ISO/IEC 13818-3)
11 – MPEG 1 (ISO/IEC 11172-3)
注:MPEG 2.5不是官⽅标准。帧头第20个⽐特⽤来表⽰2.5版本。不⽀持该版本的应⽤程序⼀般认为该⽐特位置位为帧同步位,也就是说帧同步(A)的长度为12⽽不是这⾥规定的11,这样B也就变成了1位(第19个位)。推荐使⽤该表的⽅法因为这样允许你可以区分三个版本以获得最⾼兼容性。
C
2
(18,17)
Layer描述
00 - 保留
01 - Layer III
10 - Layer II
11 - Layer I
D
1
(16)
校验位
0 - 紧跟帧头后有16位即2个字节⽤作CRC校验
1 - 没有校验
E
4
(15,12)
位率索引
索引值
MPEG 1
MPEG 2, 2.5 (LSF)
Layer I
Layer II
Layer III
Layer I
Layer II & III
0000
Free
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
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
Bad
注:所有值单位为kbps,⽽且1kbit=1000bit⽽不是1024bit
Free表⽰空闲,如果固定⽐特率(这种⽂件不能变换⽐特率)和上表定义的不同,应该有应⽤程序决定。这种情况的实现应该只⽤于内部⽬的因为第三⽅应⽤程序是没有办法出正确⽐特率的。但是这么做并不是很重要况且还浪费精⼒。Bad表⽰该值⽆效。
MPEG⽂件可以有VBR。表⽰⽂件的⽐特率可以变化。我已经知道了两种惯⽤⽅法:
⽐特率变换(bitrate switching):每⼀帧都创建成不同的⽐特率。可以应⽤在任何层。LayerIII解码器必须⽀持该⽅法。LayerI和LayerII也可以⽀持。
mp3制作
⽐特池(bit reservoir):⽐特率可以使从前⾯的帧中借来的(受限),以便腾出空间来容纳输⼊信号部分。然⽽这样就导致各帧之间不再相互独⽴,意味着不能随便分割⽂件。这种⽅法只有LayerIII⽀持。

本文发布于:2024-09-22 23:32:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/350668.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:压缩   信息   质量   程序   部分   信号   特率
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议