我正在尝试使用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()
我使用this table查找每个标记的4个字母代码。
标题,曲目,艺术家和专辑都很好。对于mp3文件属性>除了这四个和“年”之外的所有字段,save()
清除了之前的值,当我尝试添加新值时,什么也没发生。特别是“流派”和“专辑艺术家”字段不起作用。对于同时具有TYER和TDAT代码的“年”,除非该字段首先为空,然后仅为TYER,否则它将不会发生变化。代码TORY的“ORIGYEAR”没有做任何事情。
“genre”字段实际上并未完全破坏 - 如果您使用python代码(audio.add(etc)
)更改它,或者事先手动进入属性>详细信息,save()
将清除非构建 - 在“技术死亡金属”或“mt3jr39kf390”等类型中,它与内置类型如“经典摇滚”或“乡村”一起使用,而某些整数如1或2则转换为内置类型。 (年份字段偶尔表现相似 - 如果您手动将字段值设置为某些数字,save()
会将其更改为不同的数字。我只是观察到低于800的值,但并非所有 - 448和449保持不变,而500转为320,700转为448,12转为10,10转为8.如果你以这种方式改变12到10再运行程序,什么都不会发生,但如果你手动将其更改为其他值并返回10,它将变为8。)
所以,问题是我不能更改年份标签,如果那里已有的东西,我无法更改专辑艺术家或流派标签,我不知道如何做“获取”命令,如果甚至有一个,所以我可以保留流派标签。
此外,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())
答案 0 :(得分:0)
我和你有同样的问题。我试过
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,我不知道为什么
答案 1 :(得分:0)
尝试按以下方式保存
audio.save(v2_version=3)
它解决了我的问题。
编辑:它是因为TYER TDAT TORY是v2.3标签并且在v2.4中被更改了 资料来源:https://en.wikipedia.org/wiki/ID3#ID3v2_frame_specification