惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
博客园 - Franky
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
爱范儿
爱范儿
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)

Cyberia

复活吧微软边缘 - Cyberia 从零开始的EAC抓轨教程 - Cyberia Apophenia, 新时代补全工具 - Cyberia 浅谈博客设计 - Cyberia 爱软TV之GitHub - Cyberia 排印演进 - Cyberia EAC相关工具集合 - Cyberia 《C(金钱掌控)》观后感 - Cyberia C#在Windows UI开发中的衰落 - Cyberia 存储退潮 字体padding计算器 开源已死 自动化EAC音频抓取 起夜级家庭网络正在变得越来越重要 优化Powershell的启动时间 无JavaScript其实没有很重要 你不需要一个电纸书阅读器 文件分享的难题 为什么我不敢看都市 某科学的 SSH 算号指南 时代的辉夜姬 为什么 Pixi 是神 关于神椿的过去,当下以及未来,我的一点看法 Tahoe 的图标令人难评 The EVE of PUSHING LIMITS 在 Word 中通过制表符实现居中对齐等操作 编码之殇:前 Unicode 时代的 WAV 处理 sHELL 即地狱 WR1800K AX NAND 路由器刷入 Immortalwrt 一个 PWM 的世界
如何写出优雅完整的音频元数据
Nullpinter · 2026-05-07 · via Cyberia

Roon确实是本地音频播放器的佼佼者。虽然说有很多Hifi相关的功能,还有Roon Ready这种认证,但是就把它当作一个数据库管理软件来看,也是没有任何竞争对手的。可以说,如果你符合Roon用户的经典画像,你甚至不用处理元数据问题,Valance能够解决基本上全部的古典问题。对于我这种的日音弱智用户来说就差点了,Roon的数据库中角色名字都是按照罗马音显示,尽管能够用片假名/平假名搜到,但是还是看着很难受。更何况有些同人音乐根本不在数据库中,只有最新最热最火最潮的二次元才会被识别到。如果你用的Roon版本不能连接到Valance数据库,那更是只能根据文件元数据来组织。

音频元数据完全是一团糟,有ID3的各种版本,Vorbis Comment,APE Tag,甚至还有MP4。不过Roon只支持alac(m4a)、flac(vorbis comment)、mp3(ID3),dsf(ID3)。所以主要使用的也就这些。本人主要使用flac,所以主要根据flac来举例和实现。

基本信息#

TITLEALBUMARTISTALBUM ARTISTCOMPOSER这些信息都非常基础,不必多说。不过有一点需要注意:Roon在识别到同一专辑有多个ARTIST的时候,会根据艺术家数量判断是否为Various Artists专辑,如果是就会把ARTIST显示为Various Artists,而不是专辑中ARTIST字段的内容。有些时候为了让Roon识别成“合辑”(即Various Artists专辑),需要手动调整ALBUM ARTIST字段为Various Artists。

日期#

第一个大坑就是日期了。如果你用的是Mp3tag,这个软件会把Vorbis Comment中的DATE字段映射到实际上的YEAR上,而ID3的YEAR是只能写年份的,所以尽管这个地方在flac中能够写完整日期,但是还是不建议在这里写完整日期。

从而,我们需要建立几个映射:

标签原始信息目标信息
VorbisCommentDATEYEAR
VorbisCommentORGANIZATIONPUBLISHER
VorbisCommentTRACKNUMBERTRACK
ID3v2ORIGINALRELEASEDATERELEASETIME
APEv2Album ArtistALBUMARTIST
VorbisCommentTDRLRELEASETIME
MP4TDRLRELEASETIME

所有的详细日期都写在TDRL字段中,YEAR/DATE只写年份,这样就能兼容所有的播放器了。

关于详细日期,Roon还有一个坑点,它的识别支持YYYYYYYY-MM-DD,但是不支持YYYY-MMYYYY-MM会被强制加一个1号,比如1991-03会变成1991-03-01。但是有些专辑确实不知道什么时候发布的,就要写文字月份了。文字月份的意思是类似于jan 1991的写法,前面的月份可以是全名或者是三字母缩写,这些日期能够被正确的识别成1991-01

多艺术家、多编曲等等#

Roon默认使用的艺术家分割符是;,没有。所以多个艺术家默认需要使用;分割,当然可以把、也加入分隔符,但是相信我你会被日本人莫名其妙的艺名恶心的。

还有一种是多字段。这种在flac中比较常见,就是有多个ARTIST字段,或者多个COMPOSER字段。在Mp3tag中显示为名字1\\名字2,这种同样不会导致识别错误。

厂牌和碟号#

厂牌可以写在LABELPUBLISHER中,Roon都会识别。碟号可以写在CATALOGNUMBERCATALOG NUMBER(谁有病加空格)中,Roon也会识别。

基本上,大部分人都到此为止了。那么如何做到以下效果呢?

丰富的元数据示例

其他元数据需要依赖接下来的字段:INVOLOVEDPEOPLE(Vorbis Comment)、TIPL(ID3)、PERSONNEL(两者都能用)。

更多角色#

在Mp3tag中,INVOLOVEDPEOPLE字段会被正确的映射到ID3 TIPL中,所以你可以直接写INVOLOVEDPEOPLE字段。但是这两个字段有不同的格式!是一个坑点。

Roon支持的角色列表在这里。Roon只会识别已知的角色列表。

name (role)

name (role[additional info])

实际上多个是name (role)\\name (role)\\name (role)\\name (role)

举个例子:

堀江晶太 (arranger)\\堀江晶太 (instrument)\\野沢香苗 (erhu)\\野々村昌樹 (erhu)\\村上宣之 (mix)\\村上宣之 (recording)\\LiSA (lead vocals)\\LiSA (lyricist)

但是但是!这个格式有问题,因为他用的正则匹配方式非常愚蠢,所以aaa(cv.xxx) (arranger)这种格式会识别失败,令人忍俊不禁。这种情况你就要去写PERSONNEL了。

最正统的ID3写法#

role:name;

role:name;role:name;role:name

一定要用分号分隔,这是ID3要求的。举个例子:

arranger:堀江晶太;instrument:堀江晶太;erhu:野沢香苗;erhu:野々村昌樹;mix:村上宣之;recording:村上宣之;lead vocals:LiSA;lyricist:LiSA;

PERSONNEL写法#

PERSONNEL出现于以上两种都没有被彻底规范的时候,是Roon的私有字段。支持以下格式:

name\trole

name role

name - role

\t是tab分隔符,不要真当作字符了。第二行是两个空格。尽管理论上有侧支持使用,分割多个role,但是实际上不会识别!你要多写几个PERSONNEL行才行。例子:

Wolfgang Schulz - Flute

Daniel Gaede - Violin

Thomas Selditz - Viola

Andreas Greger - Cello

Jeremy Poole - Liner Note Translation

Christophe Huss - Liner Note Translation

Toms Spogis - Booklet Design

Julia Zancker - Cover Photo

Julia Zancker - Cover Design

Andreas Spreer - Recording

Andreas Spreer - Mix

Roland Kistner - Editing

Andreas Spreer - Producer

Andreas Spreer - Liner Notes

Thomas Seedorf - Liner Notes

Regina Köhler - Liner Notes

需要指出的是,Roon不会读取ORCHESTRA字段,所以Orchestra需要写在PERSONNEL中。ENSEMBLE和SOLOIST可以按需写,不是必须。

不推荐的写法#

Roon为了强兼所有人,还有其他地方的元数据也会被读取,但是我不建议按照这样分开来写(目标字段:从哪里读取):

  • Soloists:“SOLOIST”, “SOLOISTS”, “©PRF”
  • Lyricists:“LYRICIST”
  • Librettists:“LIBRETTO”, “LIBRETTIST”
  • Vocalists:“VOCALS”, “VOCALIST”
  • RemixedBy:“REMIXED BY”, “MIXARTIST”, “REMIXER”
  • DjMixers:“DJMIXER”
  • Mixers:“MIXER”
  • Arrangers:“ARRANGER”
  • Ensembles:“ENSEMBLE”
  • Engineers:“ENGINEER”
  • Authors:“AUTHOR”, “IWRI”
  • Writers:“WRITER”
  • Conductors:“CONDUCTOR”, “TPE3”, “©CON”
  • Producers:“PRODUCER”, “IPRO”
  • Featuring:“FEATURING”

更多元数据#

歌词#

从这些 key 取值:“SYLT”,“SYNCED LYRICS”,“LYRICS”,“©LYR”,“UNSYNCED LYRICS”,“USLT”

Roon会自动检测是不是LRC歌词。TTML是不支持的,别想了。

更多出版信息#

  • ProductCode:“BARCODE”, “UPC”, “EAN/UPN”
  • CatalogNumber:“CATALOGNUMBER”, “CATALOGUE #”, “CATALOGNO”, “CATALOG NUMBER”, “CATALOGUE NUMBER”, “CATALOG”, “CATALOGUE”, “LABELNO”
  • Labels:“TPUB”, “ORGANIZATION”, “LABEL”
  • Isrc:“TSRC”, “ISRC”
  • Country:“RELEASECOUNTRY”, “COUNTRY”, “RELEASE COUNTRY”

是否是盗版碟#

检查BOOTLEG的值是不是true,接受true1,如果是的话就会被识别成盗版碟。

曲目是不是Live版本#

Roon不支持从文件元数据设置这个专辑是不是Live版本!所以这个很鸡肋。

检查LIVE的值是不是true,接受true1,如果是的话就会被识别成Live版本。

图片#

Roon不支持webp,avif这些现代图片格式,别想了。

更多日期#

  • IMPORTDATE:专辑被导入到Roon的日期,格式需要是YYYY-MM-DD,这个可以维持按日期排序的顺序。
  • OrIGINALRELEASEDATE:专辑的原始发行日期,格式需要是YYYY-MM-DD,为的是写出这个专辑第一次发行在什么时候,在同一个专辑多次再版的时候很有用。

Roon拓展元数据#

  • ROONALBUMTAG:专辑标签,Roon会把这个字段的值当成标签来识别,多个标签需要写多个在Mp3tag中显示为xx\\xx\\xx
  • ROONTRACKTAG:曲目标签,Roon会把这个字段的值当成标签来识别,多个标签需要写多个在Mp3tag中显示为xx\\xx\\xx

结语#

到此,基本上你能写的都写了,Roon能认的都认了。Roon不支持给碟片命名,这个已经骂了很久了;Roon不支持从文件读取Artist头像,这个也骂了很久了。总之,Roon的元数据系统虽然有很多坑点,但是只要你按照上面的方法来写,基本上就能写出一个非常完整的元数据了。