Antra自动打标机制详解:ID3v2、Vorbis Comments与MP4 Atoms如何为每种音频写对元数据
【免费下载链接】AntraA desktop music library builder that turns Spotify, Youtube Music Apple Music, Amazon Music, Tidal, Qobuz, and Deezer links into fully tagged local library in FLAC, ALAC, Dolby Atmos, AAC, or MP3.项目地址: https://gitcode.com/gh_mirrors/an/Antra
Antra是一款桌面音乐库构建工具,能把 Spotify、YouTube Music、Apple Music、Amazon Music、Tidal、Qobuz 和 Deezer 的链接变成自动打标的本地音乐库,支持 FLAC、ALAC、AAC、MP3 等格式输出。很多人下载完音频后发现封面丢失、歌名变成"Track 01",而 Antra 的自动打标机制会替你处理全部元数据:它根据每种音频容器各自认可的标签规范——MP3 用ID3v2、FLAC 用Vorbis Comments、M4A 用MP4 Atoms——把歌名、艺术家、专辑、年份、曲目号、流派、封面、歌词甚至 ISRC 编码一次写全。
一键打标流程:下载完成后发生了什么
你不需要做任何配置。当一首歌下载完成后,Antra 的核心引擎 antra/core/engine.py 会按固定流水线执行四步:
- 转码定形——antra/utils/transcoder.py 先把文件转成你选择的输出格式(FLAC / ALAC / AAC / MP3);
- 元数据补全——antra/core/metadata_enricher.py 从胜出音源和免费 API 补齐流派、厂牌等信息;
- 写入标签——antra/utils/tagger.py 中的
FileTagger.tag()按扩展名分流,调用 FLAC / MP3 / MP4 三套写入逻辑; - 旁路文件——按设置额外保存封面图和歌词 sidecar 文件。
所有信息都汇聚在统一的数据模型 antra/core/models.py 的TrackMetadata上,包含标题、艺术家、专辑、发行日期、曲目/碟片号、ISRC、UPC、作曲家、厂牌、封面 URL、歌词等 30 多个字段,打标器负责把它们"翻译"成各容器自己的语言。
FLAC 自动打标:Vorbis Comments 全字段写入
FLAC 是无损格式的"标准答案",Antra 使用 Vorbis Comments 键值对写入 antra/utils/tagger.py。细节上有两个贴心设计:
- 年份双写:除了
date,还会写入四位数的year字段,因为 Windows Media Player 只认year; - 无损信息保留:ISRC、UPC(barcode)、ISWC 版权编码、厂牌、作曲家全部落盘,方便日后跨平台对账。
| 元数据 | Vorbis Comment 字段 |
|---|---|
| 歌名 / 艺术家 / 专辑 | title/artist/album/albumartist |
| 发行日期 | date+year(双写) |
| 曲目号 / 碟片号 | tracknumber(含/总曲目)、discnumber |
| 版权编码 | isrc/barcode/iswc |
MP3 自动打标:ID3v2 帧与兼容性陷阱
MP3 走 ID3v2 帧写入 antra/utils/tagger.py:TIT2(歌名)、TPE1/TPE2(艺术家/专辑艺术家)、TALB(专辑)、TDRC(日期)、TRCK/TPOS(曲目/碟片)、TCON(流派)、TSRC(ISRC)、TCOM(作曲家)、TPUB(厂牌),封面用APIC帧。
这里有个关键兼容性细节:Antra 故意以ID3v2.3而非 2.4 保存(v2_version=3),因为 Windows 资源管理器和常见手机播放器读取 v2.3 的APIC封面更稳定。非标准字段(ISWC、SPOTIFYID、AUDIO_TRAITS)则统一塞进TXXX自定义帧,不污染标准帧空间。
M4A/MP4 自动打标:MP4 Atoms 与 Freeform 命名空间
ALAC 和 AAC 都装在 MP4 容器里,由 antra/utils/tagger.py 用 MP4 Atoms 写入:©nam(歌名)、©ART/aART(艺术家/专辑艺术家)、©alb(专辑)、trkn(曲目号/总曲目)、disk(碟片号)、©gen(流派)、covr(封面,自动区分 JPEG/PNG)。
ID3 里能随便扩展,但 MP4 容器更严格,所以 ISRC、SPOTIFYID、厂牌等额外信息走Freeform Atom(----:com.apple.iTunes:ISRC这种命名空间键),既符合容器规范,iTunes 与主流播放器也都能正常读取。
封面与歌词:从下载到验证的完整链路
封面图不是简单下载了事。Antra 会嗅探真实 MIME 类型、把超大封面缩到最长边 1000px(_MAX_EMBEDDED_ART_EDGE)、把透明通道 PNG 压成 JPEG,并按 URL 做专辑级缓存——同一张专辑的几十首歌只请求一次 CDN。
歌词走多供应商瀑布流 antra/utils/lyrics.py:优先同步歌词(LRC),嵌入前会用validate_and_strip_lrc校验时间戳是否超出歌曲时长,防止把别的版本歌曲的歌词贴上来。然后按容器各写各的(见 antra/utils/tagger.py):
| 格式 | 纯文本歌词 | 同步歌词 |
|---|---|---|
| FLAC | LYRICS | SYNCEDLYRICS(LRC) |
| MP3 | USLT帧 | SYLT帧(毫秒精度) |
| M4A | ©lyratom | 以纯文本形式存入 |
如果你的输出格式是 Ogg/Opus 这类不支持内嵌的容器,Antra 会在同目录写出.lrc/.txtsidecar 文件(antra/utils/tagger.py);另外"保存封面文件"设置还能在专辑目录生成高分辨率cover.jpg/cover.png,让 Navidrome、Jellyfin、Plex 这类媒体服务器直接读取。
隐藏彩蛋:ANTRA_VERSION 溯源标签
打开设置里的"Record Antra version in downloaded files"开关(antra-wails/frontend/src/App.svelte),每个文件还会额外写入三个溯源标签(antra/utils/tagger.py):
ANTRA_VERSION——生成该文件的 Antra 版本(FLAC 直接写小写 Vorbis 字段、MP3 用TXXX、MP4 用----:com.antra:*命名空间);ANTRA_DOWNLOADED——UTC 下载时间戳;ANTRA_SOURCE——音源服务名。
这就像给每个文件盖了个"生产批次章":日后升级了版本或换了音源,可以凭标签精准找出哪些文件夹需要重新抓取。普通播放器看不到这些字段,完全无感。
总结:一份库,全格式兼容
一句话概括 Antra 的自动打标机制:一份统一的TrackMetadata,三套容器方言。Vorbis Comments 的宽松键值对、ID3v2.3 的兼容性取舍、MP4 Atoms 的命名空间规范,它都针对性地处理了,再叠加封面归一化、歌词时间戳校验和溯源标签,最终得到的是一份 Windows 资源管理器、VLC、foobar2000、iTunes 和各类媒体服务器都能正确读取的本地音乐库。想深入了解字段定义可以看 antra/core/models.py,想看完整打标实现就看 antra/utils/tagger.py,转码逻辑在 antra/utils/transcoder.py。
【免费下载链接】AntraA desktop music library builder that turns Spotify, Youtube Music Apple Music, Amazon Music, Tidal, Qobuz, and Deezer links into fully tagged local library in FLAC, ALAC, Dolby Atmos, AAC, or MP3.项目地址: https://gitcode.com/gh_mirrors/an/Antra
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考