使用Python的music-tag库更新MP3元数据遇问题求助
解决music-tag 0.4.3元数据编辑失败问题及字段参考
一、核心问题:字段名称与格式不匹配
你遇到的Publisher、Copyright、language、date更新失败,大概率是字段键名称错误或输入值不符合格式规范导致的。music-tag使用标准化的小写字段键,而非Mediainfo/VLC显示的别名,且部分字段有严格的格式要求。
二、music-tag 0.4.3 有效字段、别名及格式规范
以下是常用字段的标准键、对应别名(匹配Mediainfo/VLC显示名)及输入限制:
| 标准字段键(必须用小写) | 对应别名(Mediainfo/VLC显示名) | 输入值规范 |
|---|---|---|
title | Title, TIT2 | 任意UTF-8字符串 |
artist | Artist, Performer, TPE1 | 任意UTF-8字符串 |
album | Album, TALB | 任意UTF-8字符串 |
albumartist | Album Artist, TPE2 | 任意UTF-8字符串 |
composer | Composer, TCOM | 任意UTF-8字符串 |
genre | Genre, TCON | 任意UTF-8字符串,支持多值用列表["Rock", "Pop"] |
year | Year, TYER | 整数(如2024),仅存年份 |
date | Date, TDRC | ISO格式字符串(如"2024-05-20"),存完整日期 |
publisher | Publisher, TPUB | 任意UTF-8字符串 |
copyright | Copyright, TCOP | 任意UTF-8字符串 |
language | Language, TLAN | ISO 639-2三位代码(如"eng"代表英语,"chi"代表中文),不能直接写全称 |
tracknumber | Track Number, TRCK | 整数(如5)或字符串"5/10"(当前曲目/总曲目) |
discnumber | Disc Number, TPOS | 整数(如1)或字符串"1/2"(当前碟片/总碟数) |
comment | Comment, COMM | 任意UTF-8字符串 |
三、实用操作建议
查看当前文件支持的字段
不同音频格式(MP3/FLAC等)支持的字段可能有差异,先加载文件并打印所有可用字段键:import music_tag f = music_tag.load_file("your_audio.mp3") print("支持的字段:", list(f.keys()))验证字段别名
用以下代码查看某个标准字段的所有别名,快速对应Mediainfo/VLC的显示名称:print("publisher的别名:", f.aliases('publisher'))批量更新的正确姿势
确保使用标准小写字段键,示例代码:import music_tag f = music_tag.load_file("test.mp3") # 正确的批量更新字典 metadata = { 'publisher': 'My Record Label', 'copyright': '2024 All Rights Reserved', 'language': 'eng', 'date': '2024-05-20' } # 批量赋值 for key, value in metadata.items(): f[key] = value # 保存修改 f.save()调试单个字段的错误
若某个字段仍失败,单独捕获异常查看具体原因:try: f['language'] = 'eng' f.save() except Exception as e: print(f"更新language失败: {str(e)}")格式兼容性注意
- MP3依赖ID3标签,部分字段(如
language)必须用ISO代码; - FLAC等格式用Vorbis Comment,对字段格式限制更宽松,但仍建议遵循标准规范;
- 若VLC能修改但music-tag失败,检查是否是VLC自动转换了值格式(比如将
English转为eng)。
- MP3依赖ID3标签,部分字段(如
内容的提问来源于stack exchange,提问作者Ratler
相关产品推荐
相关产品推荐

