如何通过 Python 获取自定义 MP3 标签?

How to get a custom MP3 tag via Python?

我正在研究一种使用 AcousticBrainz API 的算法。该过程的一部分是分配具有特定 UUID 的音频文件,该 UUID 引用数据库中的文件。该标签通过 Picard 添加,并在检查时出现在其他标签中,例如通过 VLC 媒体播放器:

有什么方法可以访问这些 'custom' 标签吗?我尝试使用 eyeD3 and mutagen,但是,我认为它们只能访问特定标签,例如艺术家或文件长度。

我可以使用 eyed3 或 mutagen 来实现目标吗?有没有其他工具可以实现这样的操作?

是的,您可以使用任何一个。这些自定义标签存储为用户文本框架,框架 ID 为“TXXX”。

下面是一些使用 eyeD3 的示例代码:

import eyed3

file = eyed3.load("test.mp3")
for frame in file.tag.frameiter(["TXXX"]):
    print(f"{frame.description}: {frame.text}")
# get a specific tag
artist_id = file.tag.user_text_frames.get("MusicBrainz Artist Id").text

还有诱变剂(它在每一帧中支持多个值,但这似乎违反了 ID3 规范;请参阅 this picard PR 了解详细信息):

from mutagen.id3 import ID3

audio = ID3("test.mp3")
for frame in audio.getall("TXXX"):
    print(f"{frame.desc}: {frame.text}")
# get a specific tag
artist_id = audio["TXXX:MusicBrainz Artist Id"].text[0]

您可以在此处查看 Picard 如何使用诱变剂读取这些标签:https://github.com/metabrainz/picard/blob/ee06ed20f3b6ec17d16292045724921773dde597/picard/formats/id3.py#L314-L336

谢谢埃里克约翰逊!我不知道不同的标签格式。我对访问录音的 MBID 很感兴趣,但我无法通过 ID3 获取它,但是,您的示例和对 Picard 的参考确实有帮助。我最终需要读取 UFID 标签,所以我使用了以下内容:

audio = ID3(filepath)
for frame in audio.getall("UFID"):
    print(str(frame.data, 'utf-8'))

张贴在这里以备将来有人需要。