【问题标题】:How to get a custom MP3 tag via Python?如何通过 Python 获取自定义 MP3 标签?
【发布时间】:2021-11-16 02:58:50
【问题描述】:

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

有没有办法访问这些“自定义”标签?我尝试使用eyeD3mutagen,但是,我认为它们只能访问特定标签,如艺术家或文件长度。

我可以使用 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'))
    

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

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 2018-12-05
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多