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
我在 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
(
(此答案中有底线的所有内容都是 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