2013-08-02 59 views
0

我試圖用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個字母的代碼表:http://help.mp3tag.de/main_tags.html

標題,曲目,藝術家和專輯都能正常運作。除了這四個和「年份」之外,對於mp3文件的屬性>詳細信息中的所有字段,以前的值由save()清除,並且當我嘗試添加新值時,什麼也沒有發生。特別是「流派」和「專輯藝術家」字段不起作用。至於代碼爲TYER和TDAT的「年份」,除非該字段先是空的,然後再由TYER填充,否則它不會改變。代碼TORY的「ORIGYEAR」什麼都沒做。如果你用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()) 

回答

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,我不知道爲什麼

+0

這並修復與是否有一些有一年沒有改變的問題。現在剩下的就是「專輯藝術家」和「流派」標籤的問題。 (順便說一下,這是它的保存('111.mp3')。) – Blrp

0

嘗試保存如下

audio.save(v2_version=3) 

它解決了這一問題,在我的情況。

編輯:這是因爲TYER TDAT TORY是V2.3標籤和V2.4 來源得到了改變:https://en.wikipedia.org/wiki/ID3#ID3v2_frame_specification

+0

對此做了一些解釋,以及爲什麼你期望它可以解決OP問題將會很好。 –