robb3n's blog 春耕雨读

从文件夹到曲库:音乐文件标签最佳实践

15 分钟约 4,000 字
个人曲库系统 · 整理第 1 篇 · 共 4 篇目录
  1. 01从文件夹到曲库:音乐文件标签最佳实践正在读
  2. 04入库自动化:一首歌进曲库要过的几道闸2026-10-25
  3. 05流派树是怎么长出来的待发布
  4. 06给五千首歌补标签待发布
专题页 →

音乐文件多了以后,最先失效的是文件夹。一首歌既是日语、又是 City Pop、还很适合开车,却只能放进一个目录。我以前的曲库里有「韩」「戏腔」「泡沫经济」「专注」这些文件夹,语言、风格、年代印象和收听场景全混在同一层。

现在的分工是:

  • 文件夹只管存放:保留一套专辑结构,不再按语种、曲风、场景分目录
  • 标签负责组织:同一份文件,可以从专辑、语言、风格、来源多个入口找到
  • 歌单接住主观的分类:「专注」「夜晚」这类几个字段概括不了的选择
规则速览
  1. 身份字段先写对:歌、专辑、艺人各管各的
  2. 分类拆成三个字段:GENRE 管风格,LANGUAGE 管语言,GROUPING 管作品来源
  3. 写子流派时,把上级一起写上
  4. 封面按专辑取,歌词按曲目取
  5. 响度放在最后算
  6. 完成的标准,是播放器读到了什么
适用范围

以 Navidrome + FLAC 为例,规则核对到 2026 年 10 月。流派树和语种归并是按我的收听习惯定的,不是通用的音乐分类标准。1

先拆开一首歌

以山下达郎的《SPARKLE》为例,它在磁盘上的位置是:

17 山下达郎/【1982】FOR YOU/01. 山下达郎 - SPARKLE.flac

图中各块大小与音频参数来自这份文件的实际回读。

一个 FLAC 文件里有三层东西:2

  • 音频:保存声音。采样率、位深是技术参数,和自己填的分类无关
  • 标签(Vorbis Comment):说明它是谁、该怎样归类;歌词和响度增益也是其中的字段
  • 封面:单独存在 PICTURE 块里,按专辑统一

播放器显示的歌名、艺人、流派都来自文件内部。文件名只是给人看的入口,不必承担全部信息。

标签、响度值与歌词同样来自实际回读。

文件夹:只留一套结构

目录按发行来分:

  • 成套的原声带进原声带目录
  • 完整专辑按艺人归档,或者放进「其他专辑」
  • 散曲进「精选单曲」的批次目录
怎样算一张专辑

看是不是一次完整发行,不看曲目数。五首歌的爵士唱片、六首歌的 EP,都是完整的收听单位。

新文件的命名尽量简单:

专辑:01. 艺人 - 曲名.flac
散曲:艺人 - 曲名.flac

以前藏在文件夹里的分类,现在各有去处:

以前的文件夹 现在交给
韩 语种筛选(LANGUAGE=kor)
戏腔 流派筛选(GENRE=戏腔)
专注 手选歌单3

一份文件可以出现在很多集合里,不用复制。以后想换一种听法,改筛选条件或歌单就行,不必搬家。

身份字段:歌、专辑、艺人各管什么

分类再精细,认错了录音也没有意义。录音室版、现场版、重制版、伴奏版,不能因为歌名一样就共用元数据。匹配时同时核对艺人、专辑、版本、时长。

字段 回答的问题 我的写法
TITLE 这首曲目叫什么? 实际曲名,保留必要的版本区别
ARTIST 这一首由谁演绎? 按曲目写,客串艺人照实保留
ALBUM 收录在哪张发行里? 同一张专辑统一名称,散曲也保留来源专辑
ALBUMARTIST 这张专辑署在谁名下? 按专辑署名,整张统一
DATE 这张专辑最初哪年发行? 只写四位年份
TRACKNUMBER / TRACKTOTAL 本碟第几首、共几首? 按每碟填写
DISCNUMBER / DISCTOTAL 第几碟、共几碟? 单碟专辑也写 1 / 1

最容易写错的有三处:

  1. ARTIST 和 ALBUMARTIST 不是一回事
    • Eminem 的专辑客串很多,每首的 ARTIST 可以不同,ALBUMARTIST 仍然是 Eminem,不能因为参与者多就写成「群星」
    • 原声带有署名主创就写主创;没有统一主人的多艺人合辑,才写 V.A.
    • 两位独立艺人联名的专辑写两个值;固定组合名保留整体,不把几个人拼成新名字
  2. 音轨总数按碟计算
    • 双碟专辑,第一碟 20 首、第二碟 9 首:第二碟最后一首是「第 9 首 / 共 9 首,第 2 碟 / 共 2 碟」,不是「第 9 首 / 共 29 首」4
  3. DATE 记专辑的首发年
    • 再版沿用原专辑的年份,合辑用合辑自己的出版年,不逐首换成歌曲首发年
    • 代价:老歌收进新出的精选集,按年代做歌单时会落进新的年代。这个字段记的不是歌曲的创作年代
散曲的简化约定

保留来源专辑和年份,音轨号设为 0,不写碟号与专辑艺人。这是我管理散曲的方式,不是格式要求;想完整保留原发行信息,照写原来的轨号和专辑艺人也可以。

分类:风格、语言、来源分开写

字段 回答的问题 示例
GENRE 它是什么风格? Pop、City Pop、Funk
LANGUAGE 它用什么语言演唱? cmn、yue、eng、jpn、zxx
GROUPING 它出自哪类作品? 影视原声、游戏原声、动漫原声

一首日语动画主题曲,三个字段各写各的:

GENRE=Pop
LANGUAGE=jpn
GROUPING=动漫原声
  • 想听日语流行歌:组合 LANGUAGE 和 GENRE
  • 只想听其中的动画歌曲:再加上 GROUPING

这样就不用在 GENRE 里同时维护「日语」「日本流行」「动漫音乐」这些混了好几个维度的词。

GENRE:词表是一棵树,文件里写多个值

写子标签时,把它的所有祖先一起写进去

播放器不认识这棵树,只认文件里写着的值。只写「City Pop」,筛 Pop 时就找不到这首。

《SPARKLE》实际写着四条:

GENRE=Pop
GENRE=City Pop
GENRE=R&B
GENRE=Funk
  • City Pop 是 Pop 的子标签,Funk 是 R&B 的子标签,所以筛 Pop、City Pop、R&B、Funk 都能找到它
  • 有第三层时同理:
    • 戏腔 → 写 Pop、国风、戏腔
    • Neo Soul → 写 R&B、Soul、Neo Soul
  • 树只存在词表里,文件里是平铺的多个值,不写成 Pop/City Pop 这样的路径5

现在的树有 11 个顶层标签、26 个子标签:6

顶层标签 子标签;› 表示再下一层
Pop Dance Pop、City Pop、国风 › 戏腔、网络歌曲
Hip-Hop Rap、Trap
R&B Contemporary R&B、Alternative R&B、Soul › Neo Soul、Funk、Blues
Rock Pop Rock、Alternative Rock、Dream Pop、Classic Rock
Electronic House、Synthwave、Downtempo、Phonk
Classical Baroque、Classical Period、Romantic、Contemporary Classical
Ambient New Age
Jazz、Score、Folk、Easy Listening 暂无

每首歌的标签数量不设上限,但加标签有三条纪律:

  • 要有风格依据:这个流派的成分撑得起一整段才加,比如主歌整段是说唱、整首是 R&B 的律动;一句念白、一段吉他 solo 这样的点缀不算
  • 名称受控:只用 Dance Pop,不混写 Dance-Pop,免得同义不同名的值慢慢把曲库分裂
  • 来源交叉核对:
    • 网易云的曲目曲风是主要来源,再用 QQ 音乐、Discogs 核对
    • Last.fm 的专辑标签可以补细分风格,艺人级标签不能套到这个人的每一首歌上
    • 不同来源先映射到同一棵树,冲突了再复核

LANGUAGE:记唱的语言,不从歌名猜

常用值:cmn 普通话 · yue 粤语 · eng 英语 · jpn 日语 · kor 韩语 · zxx 没有语言内容。国语和粤语分开记。7

不能拿来判断演唱语言的:

  • 歌名的语言:英文标题的歌可能从头到尾唱中文
  • 歌词的字形:简体歌词也可能记的是粤语
  • 歌词里的中文译文、开头的制作人员署名
  • 同名歌有国语、粤语两版时,要确认是哪一版录音

混合语言的歌只取一个值:

  1. 演唱者的母语唱段确实出现了,就取母语。日韩歌手夹着英语唱,通常仍算母语
  2. 没有母语唱段,按中文 → 英语 → 其他的顺序取
  3. 只夹一两句的不算多语种;多国合作的曲目单独处理
zxx 不等于「没找到歌词」

zxx 表示已经确认没有语言内容。没有歌词,可能是数据源缺失,也可能拿错了版本。器乐、人声采样、无词吟唱要结合音频判断:人声检测能给线索,但有嗓音不等于有语言。

GROUPING:看曲子和作品的关系

只有三个值:影视原声、游戏原声、动漫原声,不记具体作品名。归不归类,看曲子和作品的关系,不看文件放在哪个目录。

算 不算
为作品创作的配乐、主题曲、片头片尾 既有歌曲后来被游戏授权使用
这些曲子的翻唱、翻奏 广告歌、综艺翻唱
单独收藏的电影插曲 为不特定影片制作的预告片音乐
动画电影(归 动漫原声) 引进剧在本地播出时另配的歌曲
Score 和 GROUPING 的分工
  • Score 是流派,留给为作品或画面创作的器乐,也包括没有作品归属的预告片配乐
  • 原声带里的人声歌曲按实际风格归类,不标 Score
  • Score 可以和风格并存,旧的「Score 只能单值」已经取消:
氛围取向的原创配乐:Score + Ambient
合成器取向的原创配乐:Score + Electronic + Synthwave

封面和歌词:跟着文件走

两者都嵌进文件,换位置、换播放器都不用重新抓取。但取数的粒度相反:

怎么取 检查什么
封面 先确认目标专辑,取一张,嵌进整张的所有曲目 整张是不是同一张封面,不只是每首有没有
歌词 逐首匹配 是不是对应这首歌的这个版本

逐首搜封面,很容易把同一首歌在精选集、重制版里的封面混进来。

歌词的写法:

  • 中文统一简体;外语保留原文,加简体中译

  • 有可靠的时间轴,就内嵌双语 LRC,原文和译文共用一个时间戳:

    [00:39.62]原文
    [00:39.62]对应的简体中文译文
  • 没有可靠的时间轴,宁可留双语纯文本,也不留一条处处错位的时间轴

  • 音源和歌词可以来自不同平台,但专辑版和剪辑版差几十秒时,时间轴不能直接搬

纯音乐怎么标

确认是器乐后,歌词字段保留来源提供的作曲等署名,再加一行「纯音乐,请欣赏」;没有署名就只写这一行,不编造作者。有人唱却没抓到歌词的,不能拿这个标记填空。

ReplayGain:让随机播放少一点忽大忽小

入库时分析响度,把增益写进标签,由支持并开启 ReplayGain 的播放器调整音量。8

  • 散曲:算曲目增益
  • 整张专辑:同时算曲目增益和专辑增益
    • 随机听用曲目增益
    • 整张听用专辑增益,保留曲目之间原有的强弱

图中《SPARKLE》的曲目增益是 -8.03 dB,专辑增益是 -5.42 dB。这是对这份音源分析出来的结果,换个版本就不一样,不是可以照抄的参数。

为什么放在最后算

前面的标签清洗可能把刚写进去的 ReplayGain 又清掉。

完成的标准:播放器读到了什么

入库顺序:

  1. 确认歌曲与版本
  2. 查重
  3. 决定按专辑还是散曲保存
  4. 核验音频
  5. 写身份字段、分类、封面和歌词
  6. 计算响度
  7. 上传并扫描
  8. 回读标签,再到播放器里检查

工具负责重复劳动,分类上的判断留给自己:

工具 负责
tagify 写元数据、按流派词表归一化,自动补齐祖先标签
metaflac 补写对应的 FLAC 字段
rsgain 计算响度

工具链可以换,关键是整条链遵守同一套定义。写完后到播放器里查四件事:

  • 身份:没认错录音;专辑名和专辑艺人整张一致;多碟顺序正确
  • 分类:子标签的祖先都写上了;粤语单独分出来了;来源有实际的作品关系支撑
  • 内容:整张专辑封面统一;歌词没挂错歌、没漏译、没错位;中文没有乱码
  • 播放:文件能正常读取;增益字段存在;客户端能显示、能用上这些信息
修正存量文件时,连播放历史一起考虑

Navidrome 用一部分字段识别一首歌。这些字段一改,它可能把原曲当成一首新歌,播放次数、收藏、评分和歌单归属都要跟着迁移。所以新文件尽量在入库前定好;改存量要连同历史一起规划,不能只看标签编辑器里变整齐了没有。

一套标签有没有价值,最后看它能不能让我更容易听到想听的音乐:文件夹保留稳定的位置,标签提供可以组合的入口,歌单留给几个字段概括不了的个人选择。


  1. 流派树服务于我的检索和混音,不是在裁定音乐史上的亲缘关系;LANGUAGE 是为了让语言歌单好用,不完整描述一首歌用到的全部语言。 ↩︎

  2. FLAC 格式文档区分了这几种结构。 ↩︎

  3. 「专注」太主观,我不把所有纯音乐都认定为适合专注:没有歌词的交响乐、激烈的配乐,一样可能让人分心。 ↩︎

  4. MusicBrainz Picard 对 totaltracks 的定义同样以当前碟为单位。 ↩︎

  5. Vorbis Comment 允许同名字段重复出现,所以能用多条 GENRE 表达多值;具体播放器怎样读取,仍要实际验证。 ↩︎

  6. 这棵树按我的检索需求划分。比如把 Blues 收在 R&B 下是我的管理口径,别的曲库完全可以把它们并列。我最早用的是一张平铺的流派表,扩到 14 个值后,想只听 City Pop、国风或 Funk 时仍然太粗,才改成树。 ↩︎

  7. 我的库把藏语、蒙古语、彝语也归进 cmn 这个检索桶。这是个人的合并选择:这些语言在语言学和 ISO 编码里都有自己的身份,cmn 本身表示普通话。需要准确记录语种的曲库,应该分别保存实际的语言代码。 ↩︎

  8. 我用的 rsgain 只写响度元数据,不改动音频流。 ↩︎