Использование Mutagen для обработки всех допустимых типов файлов

Что мне нужно сделать, чтобы обработать все типы файлов, принимаемые мутагеном, .ogg, .apev2, .wma, flac, mp4 и asf? (Я исключил mp3, потому что на него больше всего документации)

Я был бы признателен, если бы кто-то, кто знает, как это делается, мог бы предоставить некоторый псевдокод, чтобы объяснить используемые методы. Основные теги, которые я хотел бы извлечь, - это название и исполнитель файлов, альбом, если он доступен.

Когда начать?


person lzc    schedule 05.10.2013    source источник
comment
После небольшого поиска после прочтения ответа @abarnert выше я наткнулся на следующее, что является очень хорошим началом для своего рода оболочки Mutagen, которая разумно получает большинство общих полей для множества форматов: github.com/sampsyo/beets/blob/master/beets/mediafile.py   -  person Emory Petermann    schedule 04.02.2014
comment
В pypi есть пакет, который упаковывает muatgen и упрощает работу с несколькими форматами — pypi.org/project/phrydy . Он основан на github.com/sampsyo/beets/blob/master/beets. /mediafile.py , кстати   -  person Gokul    schedule 05.10.2018
comment
Комментарий @Gokul должен быть ответом. Это отлично работает для моего варианта использования (получение и время от времени запись тегов исполнителя/альбома для различных форматов). Это Pythonic, и не нужно возиться с тегами TALB и тому подобным.   -  person benshepherd    schedule 23.09.2020


Ответы (1)


Каждый тип тега имеет разные имена для полей, и не все они идеально сопоставляются.

Если вам просто нужно несколько наиболее важных полей, у Mutagen есть «простые» оболочки для ID3v2 и MP4/ITMF. Так, например, вы можете сделать это:

>>> m = mutagen.File(path, easy=True)
>>> m['title']
[u'Sunshine Smile']
>>> m['artist']
[u'Adorable']
>>> m['album']
[u'Against Perfection']

Но это будет работать только для этих двух форматов файлов. Теги Vorbis, Metaflac, APEv2 и WMT, по сути, представляют собой сопоставления ключ: значение или ключ: [список значений] произвольной формы. В Vorbis есть рекомендуемый набор имен для общих полей комментариев, а в WM есть набор полей, которые отображается графическим интерфейсом WMP и API .NET, но у Metaflac и APEv2 нет даже этого. На самом деле довольно часто в комментариях Metaflac можно увидеть как «Artist» из старого имени поля ID3v1, так и «ARTIST» из Vorbis.

И даже для ID3v2 сопоставления не идеальны — iTunes показывает кадр «TPE1» как «Исполнитель» и «TPE2» как «Исполнитель альбома», в то время как Foobar2000 показывает TPE2 как «Исполнитель», а TXXX:ИСПОЛНИТЕЛЬ АЛЬБОМА как «Исполнитель альбома». ".

Итак, чтобы сделать это правильно, вам нужно просмотреть iTMF, Vorbiscomment, ID3v2 (или см. Википедию) и WMT, а затем просмотрите имеющиеся у вас файлы и добавьте некоторые эвристики, чтобы решить, как получить то, что вы хотите от файлов. у вас есть.

Например, вы можете попробовать что-то вроде этого:

>>> m = mutagen.File(path)
>>> for tag in ('TPE1', 'TPE2', u'©ART', 'Author', 'Artist', 'ARTIST',
...             'TRACK ARTIST', 'TRACKARTIST', 'TrackArtist', 'Track Artist'):
...     try:
...         artist = unicode(m[tag][0])
...         break
...     except KeyError:
...         pass

Лучшим решением было бы включить тип тега и попробовать только соответствующие поля для формата.

К счастью, эту работу за вас сделали другие люди. Вы можете найти почти всю собранную людьми информацию о том, как разные проигрыватели/теггеры сопоставляют значения с каждым форматом, на форумах Hydrogen Audio и вики, и различные другие проекты превратили эту информацию в простые таблицы сопоставления тегов, которые вы можете просто взять и позаимствовать для своего кода, например эта один от MusicBrainz. MusicBrainz Picard даже имеет оболочку Mutagen, которая позволяет вам использовать согласованный набор имен метаданных (описанных здесь) со всеми типами тегов.

person abarnert    schedule 05.10.2013