Python 3.8 Mutagen不会读取GEOB标签

问题描述

我在Eclipse中使用PyDev。 Mutagen通过Anaconda安装。

我有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标签:

Screenshot of 010 Editor

因此,我希望看到的输出不是“无”。任何帮助表示赞赏!

更新: 添加了以下行:

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)都基于mutagen.id3.TextFrame类,具有{{1 }}属性。所以当您发出:

.text

...您实际上是这样做的:

titleData = audio.get('TIT2')

请牢记这一点,看看mutagen.id3.GEOB:它没有任何此类属性。由您决定要获得什么-也许titleData = audio.get('TIT2').text

还有其他框架,它们也没有主要文字-最突出的是APICexample),您可能也很容易遇到/想要处理。 文本框架是最简单的类型,但到目前为止并不是唯一的一种-请查看https://id3.org/id3v2.3.0https://id3.org/id3v2.4.0-frames来了解它们的不同之处(例如:{{ 3}})。

(此答案中所有带有底线的内容都是链接-不仅是蓝色文字。)

,

对于诱变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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...