Как использовать mutagen для редактирования mp3 и других ID3-тегов в Python

Бизнес

Библиотека редактирования тегов Python, mutagen

Библиотека Python mutagen может быть использована для редактирования тегов (метаданных) мультимедийных файлов, таких как mp3.

Mutagen is a Python module to handle audio metadata. It supports ASF, FLAC, MP4, Monkey’s Audio, MP3, Musepack, Ogg Opus, Ogg FLAC, Ogg Speex, Ogg Theora, Ogg Vorbis, True Audio, WavPack, OptimFROG, and AIFF audio files.

Вы можете установить его с помощью pip.

$ pip install mutagen

Вот пример редактирования тега ID3.

Более подробную информацию о ID3 см. по следующей ссылке. Изначально стандарт был создан для mp3, но сейчас применяется также к mp4 (m4a) и другим не mp3 файлам.

mutagen.easyid3

Если вы просто хотите прочитать или записать имена исполнителей, названия альбомов, номера треков и т.д., легко использовать модуль EasyID3.

from mutagen.easyid3 import EasyID3

Чтобы написать название песни, сделайте следующее

path = 'example.mp3'
tags = EasyID3(path)
tags['title'] = 'new_title'
tags.save()

Для достижения простого интерфейса можно редактировать только ограниченное количество тегов, но этого вполне достаточно для базового использования. Ниже показаны теги, которые можно редактировать.
EasyID3.valid_keys.keys()

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

Полезно определить функцию.

Теги записываются следующим образом. Общее количество треков (количество песен) представлено знаменателем 'tracknumber'. То же самое справедливо и для количества дисков.

def set_id3_tag(file_path, title=None, artist=None, albumartist=None, album=None, genre=None,
                track_num=None, total_track_num=None, disc_num=None, total_disc_num=None):
    tags = EasyID3(file_path)

    if title:
        tags['title'] = title
    if artist:
        tags['artist'] = artist
    if albumartist:
        tags['albumartist'] = albumartist
    if album:
        tags['album'] = album
    if genre:
        tags['genre'] = genre
    if total_track_num:
        if track_num:
            tags['tracknumber'] = '{}/{}'.format(track_num, total_track_num)
        else:
            tags['tracknumber'] = '/{}'.format(total_track_num)
    else:
        if track_num:
            tags['tracknumber'] = '{}'.format(track_num)
    if total_disc_num:
        if disc_num:
            tags['discnumber'] = '{}/{}'.format(disc_num, total_disc_num)
        else:
            tags['discnumber'] = '/{}'.format(total_disc_num)
    else:
        if track_num:
            tags['discnumber'] = '{}'.format(disc_num)

    tags.save()

Показания метки (дисплей) выглядят следующим образом.

def show_id3_tags(file_path):
    tags = EasyID3(file_path)
    print(tags.pprint())

Метки удаляются следующим образом.

def delete_id3_tag(file_path, target_tag):
    tags = EasyID3(file_path)
    tags.pop(target_tag, None)
    tags.save()


def delete_all_id3_tag(file_path):
    tags = EasyID3(file_path)
    tags.delete()
    tags.save()

Используйте следующим образом.

set_id3_tag(path, albumartist='new_artist')
delete_id3_tag(path, 'discnumber')
show_id3_tags(path)

mutagen.id3

Чтобы редактировать ID3-теги напрямую, используйте модуль ID3.

from mutagen.id3 import ID3, TIT2

path = 'example.mp3'
tags = ID3(path)
print(tags.pprint())

tags.add(TIT2(encoding=3, text="new_title"))
tags.save()

Для записи укажите идентификатор метки, как показано ниже.

  • названия песен (TIT2)
  • Название альбома (TALB)

Идентификаторы тегов кратко описаны в официальной документации по следующей ссылке, но трудно понять, какую информацию они представляют.

Возможно, будет проще использовать метод pprint() для отображения ID3-тегов существующего файла, чтобы проверить соответствие.