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)[关闭]

节点颜色 Networkx Python 3.8

如何使用 Python 3.8 中的按钮读取 Tkinter 中的条目

如何阻止 Python Rocket 出现在 Python 3.8 中?

Python 3.8 - BeautifulSoup 4 - unwrap() 不会删除所有标签

在 Ubuntu 上从源码编译安装 Python 3.8