如何使用mutagen设置标签的"艺术家"、"专辑艺术家"、"年份"、"专辑"、"曲目编号"和"标题"字段

4
我正在尝试使用mutagen(Python 2.7.5)创建一个程序,给定歌曲路径为...\Artist\Year Album\Songnumber Title.mp3,设置歌曲的艺术家、专辑艺术家、年份、专辑、歌曲编号和标题标签,并保留流派标签。我尝试使用EasyID3来做到这一点,但它没有专辑艺术家标签。我也尝试过使用常规ID3,但我遇到了几个问题。下面是我使用的代码:
from mutagen.id3 import ID3, TIT2, TPE2, TALB, TPE1, TYER, TDAT, TRCK, TCON, TORY, TPUB
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = ID3(p)
audio.add(TIT2(encoding=3, text=u"t"))    #TITLE
audio.add(TRCK(encoding=3, text=u"1"))    #TRACK
audio.add(TPE1(encoding=3, text=u"a"))    #ARTIST
audio.add(TALB(encoding=3, text=u"al"))   #ALBUM
audio.add(TYER(encoding=3, text=u"2000")) #YEAR
audio.add(TDAT(encoding=3, text=u"2001")) #YEAR
audio.add(TORY(encoding=3, text=u"2002")) #ORIGYEAR
audio.add(TPE2(encoding=3, text=u"aa"))   #ALBUMARTIST
audio.add(TCON(encoding=3, text=u"g"))    #GENRE
audio.save()

我使用这个表格来查找每个标签的4位代码。
标题、音轨、艺术家和专辑都可以正常工作。在mp3文件属性>详细信息下除了这四个和“年份”之外的所有字段,之前的值都被save()清除了,当我尝试添加新值时,什么也没有发生。特别是“流派”和“专辑艺术家”字段无法工作。至于同时具有TYER和TDAT代码的“年份”,除非该字段先为空,否则不会改变,并且只能通过TYER进行更改。“ORIGYEAR”与TORY代码没有任何作用。
实际上,“流派”字段并没有完全损坏——如果您使用Python代码(audio.add(etc))更改它,或者事先手动进入属性>详细信息,save()将清除非内置流派,例如“Technical Death Metal”或“mt3jr39kf390”,同时它适用于内置流派,例如“Classic Rock”或“Country”,而某些整数,如1或2,会变成这些内置流派。(年份字段偶尔也会表现出类似的行为——如果您手动将字段值设置为某些数字,save()将把它更改为另一个数字。我只观察到这种行为对于小于800的值,但不是全部——448和449保持不变,而500变成320,700变成448,12变成10,10变成8。如果您以这种方式将12更改为10,然后再次运行程序,什么也不会发生,但是如果您手动将其更改为其他值,然后再更改回10,它将变成8。)
所以,问题在于如果已经有内容,我无法更改年份标签,我无法更改专辑艺术家或流派标签,并且我不知道是否存在“get”命令,以便我可以保留流派标签。
此外,EasyID3也存在相同的问题——save()会清除某些字段,并且在流派和年份方面表现出奇怪的行为。唯一的区别似乎是,即使该字段不为空,也可以更改年份。这是我使用的代码:
from mutagen.easyid3 import EasyID3
p = "E:\\Musik\\Aeon\\2005 Bleeding the False\\01 Cenobites - Copy.mp3"
audio = EasyID3(p)
audio["title"] = u"t"
audio["artist"] = u"a"
audio["album"] = "al"
audio["date"] = u"2000"
audio["tracknumber"] = u"1"
audio["genre"] = u"g"
audio.save()
print '\n'.join(EasyID3.valid_keys.keys())

1
链接到“标签字段映射”表格非常有用。 - user8554766
2个回答

1
我和你有同样的问题。我尝试过。

from mutagen.id3 import ID3, TIT2, TIT3, TALB, TPE1, TRCK, TYER`
tags = ID3()
tags['TIT2'] = TIT2(encoding=3, text=u'just a title') #title
tags['TYER'] = TYER(encoding=3, text=u'2000')  #year
tags['TRCK'] = TRCK(encoding=3, text=u'9')  #trackno
tags.save('111.mp3')

以这种方式,似乎可以更改标签而无需确保先前的标签为空,但是当我用Python检查这些标签时,我发现TYER帧已经变成了TDRC,而我不知道为什么。

这确实解决了如果有东西而年份不变的问题。现在剩下的问题是“专辑艺术家”和“流派”标签的问题。(顺便说一句,是save('111.mp3')解决了它。) - H.v.M.

0

能够解释一下这段代码的作用以及为什么你认为它可以解决 OP 的问题会更好。 - ad absurdum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接