如何使用 Python 从 mp3 元数据中提取 "Encoded by"?

How to extract "Encoded by" from mp3 metadata using Python?

我正在尝试编写一个 Python 脚本来从一些 mp3 文件中提取元数据标签。具体来说,我希望提取 "Album" 和 "Encoded by",如果我右键单击文件并查看详细信息,它们将可用:

我目前正在使用 eyeD3 库来解析元数据。我正在使用这个库,因为我认为它可以很容易地完成我的任务,但我不喜欢它。

我能够很容易地提取 "Album",但不能提取 "Encoded by" 字段。如果我打印出所有歌曲标签,我看不到任何像我需要的 "Encoded by" 字段。有什么想法吗?

这是我的代码:

import eyed3

def main():
    music_file = r'G:\Music Collection-40\Sweeter Things A Compilation Miss You - 54-40.mp3'

    audiofile = eyed3.load(music_file)
    for attribute_name in dir(audiofile.tag):
        attribute_value = getattr(audiofile.tag, attribute_name)
        print attribute_name, attribute_value

if __name__ == "__main__":
    main()
    print 'done'

如果您愿意放弃 eyed3,Mutagen 库值得一试。它在 bitbucket (https://bitbucket.org/lazka/mutagen) 上得到积极维护。

下面是从 Mutagen 中的 id3v2 标签中提取 "Encoded By" 字段的示例:

from mutagen.mp3 import MP3
audio = MP3("poison-and-wine.mp3")
print "Track: " + audio.get("TIT2").text[0]
print "Encoded By: " + audio.get("TENC").text[0]

打印:

Track Poison & Wine
Encoded By JKuhn

您要查找的 "encoded by" 标签是 ID3 2.3/2.4 中的 TENC。是不是弹出来了?

事实证明 "Encoded by" 字段隐藏在 frame_set 对象返回的列表中:audiofile.tag.frame_set['TENC'][0].text