Я пытаюсь использовать мутаген (с 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()
очистит невстроенные жанры, такие как «Технический дэт-метал» или « 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())