Как установить: исполнителя, исполнителя альбома, год, альбом, номер песни и поля заголовка тега, с мутагеном

Я пытаюсь использовать мутаген (с 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())

person Blrp    schedule 02.08.2013    source источник
comment
Ссылка на таблицу Сопоставления полей тегов весьма полезна.   -  person    schedule 31.10.2018


Ответы (2)


у меня тот же вопрос что и у вас. И я пытался

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, и я не знаю, почему

person prehawk    schedule 07.08.2013
comment
Это решает проблему, когда год не меняется, если там что-то есть. Теперь все, что осталось, это проблемы с тегами исполнителя альбома и жанра. (Кстати, это сделало сохранение('111.mp3').) - person Blrp; 09.08.2013

Попробуйте сохранить следующим образом

audio.save(v2_version=3)

это решило проблему в моем случае.

Изменить: это потому, что TYER TDAT TORY являются тегами версии 2.3 и были изменены в версии 2.4 Источник: https://en.wikipedia.org/wiki/ID3#ID3v2_frame_specification

person Maxis    schedule 07.11.2016
comment
Было бы неплохо объяснить, что это делает и почему вы ожидаете, что это может решить проблему OP. - person ad absurdum; 08.11.2016