MP3文件结构解析(超详细)

摘要:
比特率与音频和视频压缩的关系是,比特率越高,音频和视频的质量越好,但编码文件越大;如果比特率较低,情况正好相反。音频信号在时域和频域具有相关性,即存在数据冗余。MP3文件数据由多个帧组成,帧是MP3文件的最小组成单位。一些MP3文件在末尾有额外的字节来存储非声音数据的描述信息。

转自:http://blog.csdn.net/u010650845/article/details/53520426

MP3文件结构解析(超详细)1. MP3文件结构解析

1.1. 概述

1.1.1. 音频相关术语

ID3:

一般位于一个mp3文件的开头或末尾的若干字节内,记录该mp3文件的歌手、标题、专辑名称、年代、风格等信息,ID3分位两个版本,V1版ID3在文件末尾的固定128字节,以TAG字符开头,若没有则认为无ID3V1信息,V2版ID3位于mp3的开头,长度可变。

采样率:

每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示,采样率是指将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点,采样频率越高声音的还原就越真实越自然,在当今的主流采集卡上,采样频率一般共分为22.05KHz、44.1KHz、48KHz三个等级,22.05KHz只能达到FM广播的声音品质,44.1KHz则是理论上的CD音质界限,48KHz则更加精确一些。

比特率:

比特率是指每秒传送的比特(bit)数。单位为bps(Bit Per Second),比特率越高,传送的数据越大。在音频、视频领域,比特率常翻译为码率,比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。比特率与音、视频压缩的关系,简单的说就是比特率越高,音频、视频的质量就越好,但编码后的文件就越大;如果比特率越少则情况刚好相反。

比特率=采样率*采样位数*声道数

码率/码流/位率:

是指音频、视频文件在单位时间内使用的数据流量,通俗一点的理解就是取样率,是音频、视频编码中质量控制中最重要的部分,一般我们用的单位是Kb/s、Mb/s。一般来说码流越大,压缩比就越小,质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就越高,处理出来的文件就越接近原始文件

编码:

从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在时域和频域上具有相关性,也即存在数据冗余。将音频作为一个信源,音频编码的实质是减少音频中的冗余。

自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码

解码:

编码的逆过程

1.1.2. MP3简述

MP3全称为MPEG Audio Layer 3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.mp3的文件,基本保持源文件的音质,MP3是ISO/MPEG标准的一部分,

ISO/MPEG标准描述了使用高性能感知编码方案的音频压缩,此标准一直在不断更新以满足“质高量小”的追求,现已形成MPEG Layer1、Layer2、Layer3三种音频编解码方案,分别对应MP1、MP2、MP3 这三种声音文件

MPEG(Moving Picture Expert Group)是ISO下的一个动态图像专家组,它指定的MPEG标准广泛的应用于各种多媒体中,MPEG标准包括视频和音频标准,其中音频标准已制定出MPEG-1、MPEG-2、MPEG-2 ACC、MPEG-4。MPEG-1和MPEG-2标准使用同一个音频编解码族Layer1、2、3,MP3绝大多数使用的是MPEG1标准

MP3音频压缩包含编码和解码两部分,编码是将原始信号转换成电平信号的过程,解码即是逆过程,MP3 采用了感知音频编码(PerceptualAudio Coding)这一失真算法。人耳感受声音的频率范围是20Hz-20kHz,MP3截掉了大量的冗余信号和无关的信号,编码器通过混合滤波器组将原始声音变换到频率域,利用心理声学模型,估算刚好能被察觉到的噪声水平,再经过量化,转换成Huffman编码,形成MP3位流。解码器要简单得多,它的任务是从编码后的谱线成分中,经过反量化和逆变换,提取出声音信号。

MP3文件数据由多个帧组成,帧是MP3文件最小组成单位。每个帧又由帧头、附加信息和声音数据组成。每个帧播放时间是0.026秒,其长度随位率的不同而不等。有些MP3文件末尾有些额外字节存放非声音数据的说明信息。

1.2. MP3文件结构

MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1

 MP3文件结构解析(超详细)第1张

 

1.3. ID3V2解析

ID3V2一共有四个版本,ID3V2.1/2.2/2.3/2.4,目前流行的播放软件一般只支持第三版即ID3V2.3,由于ID3V1记录在文件的末尾处,ID3V2就只能记录在文件的首部了,也是因为这个原因,对ID3V2的操作比ID3V1要慢,而且ID3V2的结构比ID3V1的结构复杂的多,但是ID3V2可以记录更多的信息,长度可变

ID3V2.3由一个标签头和若干个标签帧或者一个扩展标签头组成,至少要有一个标签帧,每一个标签帧记录一种信息,例如作曲、标题等

1.3.1. 标签头

位于文件开始处,长度为10字节,结构如下:

char Header[3];    /*必须为“ID3”否则认为标签不存在*/

char Ver;         /*版本号ID3V2.3 就记录3*/

char Revision;     /*副版本号此版本记录为0*/

char Flag;        /*标志字节,只使用高三位,其它位为0 */

char Size[4];      /*标签大小*/

注:标签大小,不能确定具体包括哪些内容,解析歌曲文件后,发现没有哪些字节之和会等于该值,详见下面的实例分析

标志字节一般为0,定义如下(abc000000B)

a:表示是否使用Unsynchronisation

b:表示是否有扩展头部,一般没有,所以一般也不设置

c:表示是否为测试标签,99.99%的标签都不是测试标签,不设置

标签大小共四个字节,每个字节只使用低7位,最高位不使用恒为0,计算时将最高位去掉,得到28bit的数据,计算公式如下:

Size=(Size[0]&0x7F)*0x200000+(Size[1]&0x7F)*0x400+(Size[2]&0x7F)*0x80+(Size[3]&0x7F)

以《金南玲 - 逆流成河.mp3》为例,使用WinHex工具打开如下,读者可自己对照上述结构,本章结束会给出详细的结构分析

 MP3文件结构解析(超详细)第2张

1.3.2. 标签帧

每个标签帧都有10个字节的帧头(和标签头不是一个东西,虽然他们刚好都是10字节,标签头只有一个,每个标签帧都有一个帧头)和至少一个字节的内容构成,标签帧与标签头/其他标签帧无特殊字节分割,只能通过帧头信息来确定帧内容的大小。

帧头长度10字节,定义如下:

char ID[4]; /*标识帧,说明其内容,例如作者/标题等*/

char Size[4]; /*帧内容的大小,不包括帧头,不得小于1*/

char Flags[2]; /*标志帧,只定义了6 位*/

标识帧,常见的内容如下:

TIT2=标题

TPE1=作者

TALB=专集

TRCK=音轨格式:N/M 其中N为专集中的第N首,M为专集中共M首,N和M    为ASCII 码表示的数字

TYER=年代是用ASCII 码表示的数字

TCON=类型直接用字符串表示

COMM=备注格式:"eng

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Qt 相对路径 绝对路径在Eclipse中如何打印内存详情下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

真的高品质吗?看声谱鉴别真假音质

  如今不少音乐软件标榜着高品质音乐,诸如 HQ、SQ、无损、320kbps 的词语我们早已不陌生,我们都知道比特率越高的音乐文件音质越好,但比特率高音质一定高吗?答案是否定的,不少来源不正的音乐文件虽然显示的比特率为 320k 甚至无损,实际上音质却只有 128k 的水平。这些文件都是由低位率压缩的 MP3 文件转换成 320K 甚至无损格式传到网上,冠...

编码格式

计算机常见的编码格式 ASCII,ISO-8859-1,GB2312,GNK,UTF-8,UTF-16等 ASCII:总共有128个字符,通过键盘输入就能显示; ISO-8859-1:总共能表示256个字符,扩展了ASCII编码,但是仍然是的单字节编码; GB2312:双字节编码,包含6763个汉字 GBK:扩展GB2312,加入更多汉字,兼容GB2312...

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

由于MySQL编码原因会导致数据库出现乱码。 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。 具体操作: 1、进入MySQL控制台 >mysql -uroot -p #输入密码进入 >status; #查看当前MySQL运行状态,如下图所示:  ...

sqlite乱码的解决方法

在命令行下通过sqlite3.exe创建数据库后,通过insert语句插入中文内容后,在程序或sqlite管理工具中打开乱码。网上有篇文章描述的就是这样一个过程。链接:http://www.cnblogs.com/niunan/archive/2009/10/31/1593516.html 通过谷歌资料发现,这个问题很难解决,要么插入中文乱码,要么只能显示...

720P、、、1080P采用H.264编码的码流是多少M?

20P ,大约就是百万像素 ,码流大约在2到4或者5M;  1080P 大约在4到8M 。  H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压知缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC...

C#数据类型转换

1. 装箱、拆箱还是别名   许多 C#.NET 的书上都有介绍 int -> Int32 是一个装箱的过程,反之则是拆箱的过程。许多其它变量类型也是如此,如:short <-> Int16,long <-> Int64 等。对于一般的程序员来说,大可不必去了解这一过程,因为这些装箱和拆箱的动作都是可以自动完成的,不需要写代...