【问题标题】:How to get a custom MP3 tag via Python?如何通过 Python 获取自定义 MP3 标签?
【发布时间】:2021-11-16 02:58:50
【问题描述】:
我正在研究一种使用AcousticBrainz API 的算法。该过程的一部分是分配具有特定 UUID 的音频文件,该 UUID 引用数据库中的文件。标签是通过 Picard 添加的,并且在检查时出现在其他标签中,例如通过 VLC 媒体播放器:
有没有办法访问这些“自定义”标签?我尝试使用eyeD3 和mutagen,但是,我认为它们只能访问特定标签,如艺术家或文件长度。
我可以使用 eyed3 或 mutagen 来实现目标吗?有没有其他工具可以实现这种操作?
【问题讨论】:
标签:
python
metadata
mp3
musicbrainz
eyed3
【解决方案1】:
是的,您可以使用其中任何一种。这些自定义标签存储为用户文本框架,框架 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
【解决方案2】:
谢谢埃里克·约翰逊!我不知道不同的标签格式。我对访问录音的 MBID 很感兴趣,但我无法通过 ID3 获得它,但是,您的示例和对 Picard 的引用确实很有帮助。我最终需要读取 UFID 标签,所以我使用了以下内容:
audio = ID3(filepath)
for frame in audio.getall("UFID"):
print(str(frame.data, 'utf-8'))
张贴在这里,以备将来有人需要。