MP3 的全称为MPEG1 Layer-3 音频文件
每帧采样数(帧时间戳):
我们首先区分两个术语:帧大小和帧长度。帧大小即每帧采样数表示一帧中采样的个数,这是恒定值。其值如下表所示
|
MPEG 1 |
MPEG 2 (LSF) |
MPEG 2.5 (LSF) |
Layer I |
384 |
384 |
384 |
Layer II |
1152 |
1152 |
1152 |
Layer III |
1152 |
576 |
576 |
|
采样率(单位:Hz),2 bits
每秒采集信息的次数,例如:44100Hz, 每秒取44100次,每1/44100秒取一次(计算一次音频振幅的位置)
bits |
MPEG1 |
MPEG2 |
MPEG2.5 |
00 |
44100 |
22050 |
11025 |
01 |
48000 |
24000 |
12000 |
10 |
32000 |
16000 |
8000 |
11 |
保留 |
比特率(单位:Kbps)
索引值 |
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 |
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 |
Free表示空闲,如果固定比特率(这种文件不能变换比特率)和上表定义的不同,应该有应用程序决定。这种情况的实现应该只用于内部目的因为第三方应用程序是没有办法找出正确比特率的。但是这么做并不是很重要况且还浪费精力。
Bad表示该值无效。
帧长:
LyaerI使用公式:
帧长度(字节) = (( 每帧采样数 / 8 * 比特率 ) / 采样频率 ) + 填充 * 4
LyerII和LyaerIII使用公式:
帧长度(字节)= (( 每帧采样数 / 8 * 比特率 ) / 采样频率 ) + 填充
例: LayerIII 比特率 128000,采样频率 44100,填充0 =〉帧大小 417字节
MPEG1 MPEG2
1152 576
最大帧长:144*320/32 = 1440 最大帧长:72*160/22.05=522.45
最小帧长:144*32/44.1=104.49 最小帧长:72*8/16=36
每帧持续时间(单位:毫秒) :
每帧持续时间(ms) = 每帧采样数 / 采样频率 * 1000
MPEG1 Layer III 采样率为44.1KHz,一帧持续时间为26.12...不是整数,约等于 26ms。
MPEG2 Layer III 采样率为16KHz, 一帧持续时间为72ms.
1152/44.1=26.12ms
1152/48=24ms
1152/32=36ms
576/22.05=26.12ms
576/24=24ms
576/16=36ms
帧频 (单位:HZ):
帧频 = 采样频率 / 每帧采样数
采样率为44.1KHz,帧频38.12帧/s。
MPEG2 Layer III 采样率为16KHz, 一帧持续时间为72ms.
44100/1152=38.28125
48000/1152=41.67
32000/1152=27.78
22050/576=38.28125
24000/576=41.67
16000/576=27.78
LayerIII |
MPEG 1 |
MPEG 2 (LSF) |
比特率Kbps |
|
|
0000 |
Free |
|
0001 |
32 |
8 |
0010 |
40 |
16 |
0011 |
48 |
24 |
0100 |
56 |
32 |
0101 |
64 |
40 |
0110 |
80 |
48 |
0111 |
96 |
56 |
1000 |
112 |
64 |
1001 |
128 |
80 |
1010 |
160 |
96 |
1011 |
192 |
112 |
1100 |
224 |
128 |
1101 |
256 |
144 |
1110 |
320 |
160 |
1111 |
Bad |
|
每帧采样数Hz |
|
|
|
1152 |
576 |
采样频率Hz |
|
|
00 |
44100 |
22050 |
01 |
48000 |
24000 |
10 |
32000 |
16000 |
11 |
保留 |
MP3头结构:
AAAAAAAA AAA BB CC D EEEE FFGH II JJ K L MM
11111111 111 11 00 0 1000 0001 00 00 1 1 00
11111111 111 11 01 0 1001 0001 00 00 1 1 00
11111111 111 11 01 1 1111 0001 00 00 1 1 00
符号i |
长度(bits) |
位置(bits) |
描述 |
例子 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A |
11 |
(31-21) |
帧同步(所有位置1) &0xFFF2 11位同步+MPEG2 &0xFFFA 11位同步+MPEG1 |
1111 1111 111 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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个位)。推荐使用该表的方法因为这样允许你可以区分三个版本以获得最高兼容性。 |
11 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C |
2 |
(18,17) |
Layer描述 00 - 保留 01 - Layer III 10 - Layer II 11 - Layer I |
01 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
D |
1 |
(16) |
校验位 0 - 紧跟帧头后有16位即2个字节用作CRC校验 1 - 没有校验 |
1 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
E |
4 |
(15,12) |
位率索引
注:所有值单位为kbps,而且1kbit=1000bit而不是1024bit Free表示空闲,如果固定比特率(这种文件不能变换比特率)和上表定义的不同,应该有应用程序决定。这种情况的实现应该只用于内部目的因为第三方应用程序是没有办法找出正确比特率的。但是这么做并不是很重要况且还浪费精力。 Bad表示该值无效。 MPEG文件可以有VBR。表示文件的比特率可以变化。我已经知道了两种惯用方法: 比特率变换(bitrate switching):每一帧都创建成不同的比特率。可以应用在任何层。LayerIII解码器必须支持该方法。LayerI和LayerII也可以支持。 比特池(bit reservoir):比特率可以使从前面的帧中借来的(受限),以便腾出空间来容纳输入信号部分。然而这样就导致各帧之间不再相互独立,意味着不能随便分割文件。这种方法只有LayerIII支持。 LyaerII中有一些不被允许比特率组合和模式。下表是允许的组合。
|
1001 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F |
2 |
(11,10) |
采样频率(单位:Hz)
|
11 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
G |
1 |
(9) |
填充位 0 – 没有填充 1 – 填充了一个额外的空位 填充用来达到正确的比特率。 例如:128k 44.1kHz LayerII使用了很多418bit或417bit长的帧来达到正确的128k比特率。LyaerI的空位有32bit长,LayerII和LayerIII的空位有8bit长。 |
0 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
H |
1 |
(8) |
私有bit,可以用来做特殊应用。例如可以用来触发应用程序的特殊事件。 |
1 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
I |
2 |
(7,6) |
声道 00 立体声 01 联合立体声(立体声) 10 双声道(立体声) 11 单声道(单声) 注:双声道文件由二个独立的单声道组成。 每一个声道使用整个文件一半的位率。大多数的解码器把它当作立体声来输出,但是它并不总是这种情况。按我的理解就是是两个声道的信息是完全相同的,并不能把它当作立体声看待。 |
01 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
J |
2 |
(5,4) |
扩展模式(仅在联合立体声时有效) 扩展模式用来连接对立体声效果无用的信息,来减少所需的资源。这两个位在联合立体声模式下有编码器动态指定。 完整的MPEG文件的频率序列分成有32个子带。在LayerI和LayerII中这两个位确定强度立体声应用的频带。 LayerIII中这两个位确定应用了哪一种联合立体声(M/S stereo或者Intensity stereo)频带由解压算法决定。
|
00 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
K |
1 |
(3) |
版权 0无版权 1有版权 |
1 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
L |
1 |
(2) |
原创 0 原创拷贝 1 原创 |
1 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
M |
2 |
(1,0) |
强调 00 - 无 01 - 50/15 ms 10 - 保留 11 - CCIT J.17 |
00 |
文档:
http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm
http://www.mp3-tech.org/
https://tools.ietf.org/html/rfc2250
https://tools.ietf.org/html/rfc1889
https://tools.ietf.org/html/rfc2038
https://tools.ietf.org/html/rfc3119
https://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header
https://blog.csdn.net/yu_yuan_1314/article/details/9112509
https://blog.csdn.net/cpq37/article/details/11213323
https://www.datavoyage.com/mpgscript/mpeghdr.htm
https://id3.org/mp3Frame
http://www.mp3-tech.org/tests/wma9/index.html MP3样例下载
https://blog.csdn.net/houxiaoni01/article/details/78810674
http://wiki.hydrogenaud.io/index.php?title=MP3