Python 3.8 Mutagen 不会读取 GEOB 标签
Posted
技术标签:
【中文标题】Python 3.8 Mutagen 不会读取 GEOB 标签【英文标题】:Python 3.8 Mutagen wont read GEOB tag 【发布时间】:2020-10-15 20:22:53 【问题描述】:我在 Eclipse 中使用 PyDev。通过 Anaconda 安装的 Mutagen。
我有 C 方面的经验,但决定尝试一下 Python。不知道为什么这不起作用,并且没有很多关于 Mutagen 的例子。这是一个简单的 mp3,我正在尝试从中读取标签。我检查了 Mutagen 规范,并且 GEOB 类确实存在。但我看不出我错过了什么。
这是我的 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 标签:
所以我希望看到“无”以外的输出。任何帮助表示赞赏!
更新: 添加行:
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 函数吗?我希望能够以二进制或十六进制的形式获取所有 [无法表示的数据]。
【问题讨论】:
audio.pprint()
是否甚至列出了 GEOB 框架? (术语:“标签”是整个事物;“框架”是即“TIT2”和“GEOB”)
更新了我的帖子。列出了 GEOB 帧。不知道为什么我没有从他们那里获得数据。
【参考方案1】:
我既不知道诱变剂也不知道 Python,但根据手册,任何 文本框架(即您的 TIT2
)都基于 mutagen.id3.TextFrame 类,具有 .text
属性。所以当你发出:
titleData = audio.get('TIT2')
...你确实做到了:
titleData = audio.get('TIT2').text
考虑到这一点,现在看看mutagen.id3.GEOB:它没有任何这样的属性。由您决定要获得什么 - 也许是.desc
?
还有其他没有主要文本的框架 - 最突出的是APIC
(example),您可能也很容易遇到/想要处理它们。 文本框架是最简单的类型,但到目前为止还不是唯一的类型 - 请查看 https://id3.org/id3v2.3.0 和 https://id3.org/id3v2.4.0-frames 以了解它们的不同之处(例如:ETCO
)。
(此答案中所有有底线的内容都是链接 - 不仅是蓝色文本。)
【讨论】:
【参考方案2】:根据诱变剂manual 获取具有给定标识符的所有帧,方法调用是“getall”而不是“get”。以下方法返回歌曲标题和所有 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
【讨论】:
以上是关于Python 3.8 Mutagen 不会读取 GEOB 标签的主要内容,如果未能解决你的问题,请参考以下文章
我在哪里可以找到 Mutagen 的文档/教程? (Python)[关闭]
如何使用 Python 3.8 中的按钮读取 Tkinter 中的条目
如何阻止 Python Rocket 出现在 Python 3.8 中?