mutagen 元数据引擎 — Seal 怎么把封面和信息写进音频文件
mutagen 是什么
mutagen 是一个 Python 库,专门处理音频文件的元数据标签读写。它几乎覆盖了所有主流音频格式的标签规范:MP3(ID3v2)、AAC/M4A、FLAC、Opus、WAV、WMA 等。
Seal 作为一个安卓应用,内部用 Kotlin 写 UI,但 yt-dlp 内核本身就是 Python 项目——Seal 通过 youtubedl-android 库把 yt-dlp 和 mutagen 一起打包进了安卓包内。下载完成后 Seal 可以调用 mutagen 在本机直接写入标签,不需要上传任何数据到远程服务。
Seal 具体写了什么
当音频文件下载完成时,Seal 会调用 mutagen 依次写入以下字段:
| 字段 | 来源 | 说明 |
|---|---|---|
| 标题(Title) | yt-dlp 解析到的视频标题 | 直接用原始标题,不做截断 |
| 艺术家(Artist) | 上传者/频道名 | 如果视频是多人合作,可能取第一个上传者 |
| 专辑(Album) | 播放列表标题或空 | v1.12.0 起也写入了专辑字段 |
| 专辑艺术家 | 频道名 | 方便在播放器里按艺人分组 |
| 封面(AlbumArt) | 视频封面图的 JPG 版 | 嵌入音频文件本身,播放器打开直接显示 |
| 曲目号 | 播放列表位置 | 从 0 开始的顺序 |
为什么这在手机下载器里少见
大多数手机端视频下载器在下载音频时不会处理元数据——它们要么存成不带标签的原始文件,要么只改文件名(比如 "video123.mp3")。Seal 能做到完整标签写入,得益于两个条件:
- yt-dlp 内核在解析阶段已经拿到了视频站的结构化元数据(标题、上传者、封面图 URL)
- mutagen 可以在安卓设备本地直接读写几乎所有音频格式的标签(大多数同类库要么不支持安卓,要么只支持少数格式)
封面强制写入可以关掉
v1.10.0 起,"强制内嵌元数据"变成了可选设置。某些场景你可能不想让音频文件自带封面(比如想用自己找的封面替换),可以在设置里关掉。
关掉后下载的音频文件还是有标题和艺术家标签,只是不嵌封面图。
继续到 播客归档实战 看这套能力在真实场景里怎么用,或跳 MKV 重封装 了解 v1.12.0 起默认改容器格式的原因。