MP3 Tag id3(MP3标签 id3)

发布时间 2023-11-24 11:11:15作者: djd66
MP3文件是由帧构成,帧是 MP3文件的最小组成单位。根据帧性质的不同,文件大体分为四个部分:ID3v2标签帧、数据帧、APEV2标签帧、ID3v1标签帧,而只有数据帧才是必需的。  

数据帧包含了歌曲的压缩数据。标签帧提供了歌曲的演唱者、歌名、专辑、年份等信息。

一、V1版本

 ID3v1 在文件结尾,以字符串“TAG”为标识,其长度是固定的 128 个字节。

ID3V1结构
--------------------------------------------------------------------
名称 字节   说明
--------------------------------------------------------------------
Tag   3   ID3V1标识符“TAG”的Ascii码
Title  30  歌曲名
Artist  30  歌手名
Album  30  专辑名
Year   4   日期信息
Comment 28  注释信息,有时为30字节
Reserved 1   =0说明有音轨,下一字节就是音轨;≠0表示注释是30个字节
Track  1   音轨(字节型数值),歌曲在专辑里的序号 
Genre  1   歌曲风格(字节型数值)
--------------------------------------------------------------------

备注:

1、歌曲的风格总共148种,具体信息可上网查阅。Genre是个usigned char,转换成数字之后即为该歌曲的风格编号,即可知道其歌曲风格的字符串。

2、V1版本没有指定具体的编码格式,不过可默认为GBK编码,一般来说不会错的。

3、如果MP3的注释=30字节,那么就要占用 Reserved 和 Track 两个字节,这要看 Reserved 是否=0,如果=0,那么注释有 28 个字节。如果不是,那么注释有 30 个字节。当注释=30 个字节的时候,那就没有 Track 了。

二、V2版本

ID3V2 与 ID3V1 的作用差不多,也是记录 mp3 的有关信息,但 ID3V2 的结构比 ID3V1 要复杂得多,而且可以伸缩和扩展。ID3V2 到现在一共有 4 个版本,但流行的播放软件一般只支持第 3 版,既ID3V2.3。由于ID3V1记录在 MP3 文件的末尾,ID3V2 就只好记录在 MP3 文件的首部了。   每个 ID3V2.3 的标签都一个标签头和若干个标签帧或一个扩展标签头组成。歌曲的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。

1.D3V2标签头   

一首MP3如果有ID3V2.3的话,那么ID3V2.3的标签头占用文件最前面的10个字节,其数据结构如下:  

ID3V2.3标签头结构

--------------------------------------------------------------------
名称  字节  说明
--------------------------------------------------------------------
Header  3    ID3V2.3标识符"ID3"的Ascii码,否则认为没有ID3V2.3
Ver    1  版本号,=03
Revision 1  副版本号,=00
flag   1  标志字节,一般没意义,=00
Size   4  标签内容长度,高位在前,不包括标签头的10个字节
---------------------------------------------------------------------

备注:

1、Size:Size的计算公式如下:

使用位与 |:

size = ((Size[0] & 0x7f) << 21) | 

((Size[1] & 0x7f) << 14) |  

((Size[2] & 0x7f) << 7) |

 (Size[3] & 0x7f);

或者使用加法+:

size = ((Size[0] & 0x7f) << 21) +

((Size[1] & 0x7f) << 14)+

((Size[2] & 0x7f) << 7)+

 (Size[3] & 0x7f);

标签帧的结构
----------------------------------------------------------
名称  字节  说明
----------------------------------------------------------
FrameID 4    帧标识符的Ascii码,常用标识符的意义见下表
Size   4    帧内容及编码方式的合计长度,高位在前,不包括帧头的10个字节
Flags  2    标志,只使用了6位,一般均=0
帧内容      至少 1 个字节
----------------------------------------------------------

备注:

1、Size的计算同上。

2、编码方式一般在帧内容的第一个字节,可能取值为:

0x00:表示帧内容字符用 ISO-8859-1 编码;

0x01:表示帧内容字符用 UTF-16LE 编码;

0x02:表示帧内容字符用 UTF-16BE 编码;

0x03:表示帧内容字符用 UTF-8 编码(仅ID3V2.4才支持)

我在转码为UTF-8的时候,源编码格式用GBK代替ISO-8859-1,因为GBK英文部分与ISO-8859-1一致,同时是双字节编码,可以用来表示中文简体和繁体。而ISO-8859-1是单字节编码,自身不能显示中文。

另外编码方式为0x00时,转码后打印不出来信息(因为帧内容开头第一字节就是0x00),一般在判断编码格式之后去掉这一个字节,剩下的内容即可打印出来。

3、有时看到的是"eng"这样的字符形式,它表示帧内容所使用的自然语言为英语。

标签帧标识符的意义(FrameID)
---------------------------------------
名称  意义
---------------------------------------
AENC: 音频加密技术
APIC: 附加描述
COMM: 注释,相当于ID3v1的Comment
COMR: 广告
ENCR: 加密方法注册
ETC0: 事件时间编码
GEOB: 常规压缩对象
GRID: 组识别注册
IPLS: 复杂类别列表
MCDI: 音乐CD标识符
MLLT: MPEG位置查找表格
OWNE: 所有权
PRIV: 私有
PCNT: 播放计数
POPM: 普通仪表
POSS: 位置同步
RBUF: 推荐缓冲区大小
RVAD: 音量调节器
RVRB: 混响
SYLT: 同步歌词或文本
SYTC: 同步节拍编码
TALB: 专辑,相当于ID3v1的Album
TBPM: 每分钟节拍数 
TCOM: 作曲家 
TCON: 流派(风格),相当于ID3V1的Genre
TCOP: 版权
TDAT: 日期
TDLY: 播放列表返录 
TENC: 编码 
TEXT: 歌词作者 
TFLT: 文件类型 
TIME: 时间
TIT1: 内容组描述 
TIT2: 标题,相当于ID3v1的Title 
TIT3: 副标题
TKEY: 最初关键字 
TLAN: 语言 
TLEN: 长度 
TMED: 媒体类型 
TOAL: 原唱片集 
TOFN: 原文件名 
TOLY: 原歌词作者
TOPE: 原艺术家
TORY: 最初发行年份 
TOWM: 文件所有者(许可证者) 
TPE1: 艺术家相当于ID3v1的Artist 
TPE2: 乐队
TPE3: 指挥者
TPE4: 翻译(记录员、修改员) 
TPOS: 作品集部分 
TPUB: 发行人 
TRCK: 音轨(曲号),相当于ID3v1的Track
TRDA: 录制日期 
TRSN: Intenet电台名称 
TRSO: Intenet电台所有者 
TSIZ: 大小  
TSRC: ISRC(国际的标准记录代码) 
TSSE: 编码使用的软件(硬件设置) 
TYER: 年代,相当于ID3v1的Year
TXXX: 年度
UFID: 唯一的文件标识符
USER: 使用条款
USLT: 歌词 
WCOM: 广告信息
WCOP: 版权信息
WOAF: 官方音频文件网页
WOAR: 官方艺术家网页
WOAS: 官方音频原始资料网页
WORS: 官方互联网无线配置首页
WPAY: 付款
WPUB: 出版商官方网页
WXXX: 用户定义的URL链接 
---------------------------------------
说明:
  ①帧内容是数字的,都用 Ascii 字符表示。
  ②有的 TCON(风格、流派)的帧内容是直接用字符串表示的,如“genre”,而有的则是用编号表示的,如“28 31 32 29”就是用字符串“(12)”表示 12 号风格,我们在解析的时候要注意。
  ③TRCK(音轨)的帧内容格式是:N/M。其中,分母表示专辑中共有 M 首歌曲,分子表示专辑中的第 N 首曲。