首页 > 其他分享 >MP3 Tag id3(MP3标签 id3)

MP3 Tag id3(MP3标签 id3)

时间:2023-11-24 11:11:06浏览次数:36  
标签:ID3v1 编码 字节 标签 id3 Tag MP3 Size

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 首曲。

标签:ID3v1,编码,字节,标签,id3,Tag,MP3,Size
From: https://www.cnblogs.com/djd66/p/17853310.html

相关文章

  • WPF --- 如何以Binding方式隐藏DataGrid列
    引言如题,如何以Binding的方式动态隐藏DataGrid列?预想方案像这样:先在ViewModel创建数据源People和控制列隐藏的IsVisibility,这里直接以MainWindow为DataContextpublicpartialclassMainWindow:Window,INotifyPropertyChanged{publicMainWindow(){......
  • easyui datagrid实现通用编辑
    functionBillEdit(Jquerygrd){varself=this;this.grd=Jquerygrdthis.editIndex=undefinedthis.GetCurrentIndex=function(){letindex=nullletrow=this.grd.datagrid("getSelected")if(row!=null)......
  • 配置 husky+lint-staged
    官方文档husky-githubhusky-doclint-staged安装依赖yarnaddhuskylint-staged-D在package.json中添加一条preinstall脚本{"script":{"prepare":"huskyinstall"}}prepare为package.json中的“scripts”属性中的脚本当执行install的时候它会......
  • 什么是 Amazone LightSail 中的 Tags 概念
    AmazonLightsail允许您将标签作为标签分配给资源。每个标签都是由一个键和一个可选值组成的标签,可以高效地管理、搜索和过滤资源。尽管没有固有的标签类型,但它们允许您按用途、所有者、环境或其他标准对Lightsail资源进行分类。当您拥有许多相同类型的资源时,这非常有用。......
  • offline RL | TD3+BC:在最大化 Q advantage 时添加 BC loss 的极简算法
    题目:AMinimalistApproachtoOfflineReinforcementLearning,NeurIPS2021,8775。pdf版本:https://arxiv.org/pdf/2106.06860.pdfhtml版本:https://ar5iv.labs.arxiv.org/html/2106.06860(感觉写的蛮好的)openreview:https://openreview.net/forum?id=Q32U7dzWXpcgithub......
  • 无涯教程-RSpec - Tags标签
    RSpecTags提供了一种在规范文件中运行特定测试的简便方法。假设您只想运行指定测试方法,则可以使用Tags标签实现。describe"HowtorunspecificExampleswithTags"doit'isaslowtest',:slow=>truedosleep10puts'Thistestisslow!'end......
  • WPF --- 重写圆角DataGrid样式
    引言因要符合UI设计,需要一个圆角的DataGrid样式,其需要一个,所以需要重写DataGrid的样式,代码具体样式代码如下:<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"......
  • 不懂乐理,也能扒谱,基于openvpi将mp3转换为midi乐谱(Python3.10)
    所谓"扒谱"是指通过听歌或观看演奏视频等方式,逐步分析和还原音乐作品的曲谱或乐谱的过程。它是音乐学习和演奏的一种常见方法,通常由音乐爱好者、乐手或学生使用。在扒谱的过程中,人们会仔细聆听音乐作品,辨别和记录出各个音符、和弦、节奏等元素,并通过试错和反复推敲来逐渐还原出准......
  • element中的el-select下拉框多选显示的tags文本内容过长导致显示溢出框外
      /*select多选tags超出省略显示*/.el-select__tags-text{ display:inline-block; max-width:60px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}.el-select.el-tag__close.el-icon-close{ top:-7px;}......
  • docker异常unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain
    docker重装启动异常 INFO[2021-03-09T15:06:20.839195000+08:00]Loadingcontainers:start.INFO[2021-03-09T15:06:20.885624800+08:00]stoppingeventstreamfollowinggracefulshutdownerror="<nil>"module=libcontainerdnamespace=mobyINFO[2021-......