Python 3.8 诱变剂不会读取 GEOB 标签

Python 3.8 Mutagen wont read GEOB tag

我在 Eclipse 中使用 PyDev。通过 Anaconda 安装诱变剂。

我有 C 语言的经验,但决定尝试 Python。不确定为什么这不起作用,而且 Mutagen 的例子并不多。这是一个简单的 mp3,我正在尝试从中读取标签。我检查了 Mutagen 规范,GEOB class 确实存在。但是我没有看到我错过了什么。

这是我的 python 文件:

import mutagen

from mutagen.id3 import ID3

audio = ID3("Test.mp3") #path: path to file

titleData = audio.get('TIT2')
print(titleData)

tagData = audio.get('GEOB')  # returns None as a default
print(tagData)
    
 
print("Done!")

这是输出:

Stupid Song
None
Done!

我正在使用文件 Test.mp3 作为我的测试用例。如果我用十六进制编辑器打开,我会看到实际上有一个 GEOB 标签:

所以我希望看到 'None' 以外的输出。感谢您的帮助!

更新: 添加了行:

printall = audio.pprint()
print(printall)

得到输出:

GEOB=[unrepresentable data]
GEOB=[unrepresentable data]
GEOB=[unrepresentable data]
GEOB=[unrepresentable data]
GEOB=[unrepresentable data]
GEOB=[unrepresentable data]
GEOB=[unrepresentable data]
TBPM=142
TCON=Other
TIT2=Stupid Song
TKEY=E
TSSE=Lavf58.20.100
TXXX=SERATO_PLAYCOUNT=0

所以我只是错误地使用了 audio.get 函数?我希望能够以二进制或十六进制的形式获取所有 [无法表示的数据]。

我既不知道诱变剂也不知道 Python,但根据手册任何 文本框(即你的 TIT2) is based on the mutagen.id3.TextFrame class,有一个.text 属性。所以当你发出:

titleData = audio.get('TIT2')

...你确实这样做了:

titleData = audio.get('TIT2').text

考虑到这一点,现在看看 mutagen.id3.GEOB:它没有任何这样的属性。这取决于你选择你想要得到什么 - 也许 .desc?

还有其他 框架 也没有主要文本 - 最突出的是 APIC (), which you might also easily encounter/want to process. Text frames are the most simple type, but by far not the only ones - have a look at https://id3.org/id3v2.3.0 and https://id3.org/id3v2.4.0-frames to see how different each can be (example: )。

(此答案中有底线的所有内容都是 link - 不仅是蓝色文本。)

根据诱变剂 manual 获取具有给定标识符的所有帧,方法调用是“getall”而不是“get”。以下方法returns歌曲名和所有GEOB帧。

def get_tags_mutagen(filepath):
    audio = ID3(filepath) #path: path to file
    
    titleData = audio.getall('TIT2')
    print("Song Title: ", titleData)

    tagData = audio.getall('GEOB')  # returns None as a default
    for i in tagData:
        print(i)

    return tagData