2017-02-14 64 views
1

我正在编写一个脚本,它使用诱变剂来更新.mp3文件中的元数据信息。
评论标签似乎存在问题。使用EasyID3编写ID3标签

这是到目前为止我的代码

import mutagen 
from mutagen.easyid3 import EasyID3 

path = 'song.mp3' 
try: 
    tag = EasyID3(path) 
except: 
    tag = mutagen.File(path, easy=True) 
    tag.add_tags() 

tag['genre'] = 'mygenre' 
tag['artist'] = 'myartist' 
tag['title'] = 'mytitle' 
tag['date'] = '1000' 
tag['album'] = 'myalbum' 
tag['albumartist'] = 'myalbumartist' 
tag['tracknumber'] = 'mytracknumber' 
tag['discnumber'] = 'mydiscnumber' 
tag.save(v2_version=3) 

这工作的罚款,对我来说,当我加

tag['comment'] = 'mycomment' 

我收到以下错误

mutagen.easyid3.EasyID3KeyError: "'comment' is not a valid key" 

回答

2
>>> import pprint 
>>> from mutagen.easyid3 import EasyID3 
>>> print EasyID3.valid_keys.keys() 
>>> pprint.pprint(EasyID3.valid_keys.keys()) 
['albumartistsort', 
'musicbrainz_albumstatus', 
'lyricist', 
'musicbrainz_workid', 
'releasecountry', 
'date', 
'albumartist', 
'musicbrainz_albumartistid', 
'composer', 
'catalognumber', 
'encodedby', 
'tracknumber', 
'musicbrainz_albumid', 
'album', 
'asin', 
'musicbrainz_artistid', 
'mood', 
'copyright', 
'author', 
'media', 
'performer', 
'length', 
'acoustid_fingerprint', 
'version', 
'artistsort', 
'titlesort', 
'discsubtitle', 
'website', 
'musicip_fingerprint', 
'conductor', 
'musicbrainz_releasegroupid', 
'compilation', 
'barcode', 
'performer:*', 
'composersort', 
'musicbrainz_discid', 
'musicbrainz_albumtype', 
'genre', 
'isrc', 
'discnumber', 
'musicbrainz_trmid', 
'acoustid_id', 
'replaygain_*_gain', 
'musicip_puid', 
'originaldate', 
'language', 
'artist', 
'title', 
'bpm', 
'musicbrainz_trackid', 
'arranger', 
'albumsort', 
'replaygain_*_peak', 
'organization', 
'musicbrainz_releasetrackid'] 

它似乎确实是comment是不是有效的密钥。没有恐惧,似乎you can define your own!相结合,与this document,我们似乎需要frameid被称为COMM。因此,增加一个EasyID3.RegisterTextKey('comment', 'COMM')应该(可能)让你做你需要的。 :)

+0

完美的作品。非常感谢你。 – multifractal

+0

不客气,很高兴帮助! :) – sxn

+0

要了解最新的标签(如果他们添加更多): https://github.com/quodlibet/mutagen/blob/master/mutagen/easyid3.py 支持的代码应该在的结尾某处文件。 – ritiek