Jak používat mutagen k úpravě mp3 a dalších ID3 tagů v Pythonu

Podnikání

Knihovna pro editaci značek v jazyce Python, mutagen

K úpravě tagů (metadat) multimediálních souborů, například mp3, lze použít knihovnu Python mutagen.

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.

Můžete jej nainstalovat pomocí pip.

$ pip install mutagen

Zde je příklad úpravy značky ID3.

Další informace o ID3 naleznete na následujícím odkazu. Standard byl původně vytvořen pro mp3, ale nyní se používá i pro mp4 (m4a) a další soubory, které nejsou mp3.

mutagen.easyid3

Pokud chcete pouze číst nebo zapisovat jména interpretů, názvy alb, čísla skladeb atd., můžete snadno použít modul EasyID3.

from mutagen.easyid3 import EasyID3

Chcete-li napsat název písně, postupujte takto

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

Pro dosažení jednoduchého rozhraní lze upravovat pouze omezený počet značek, ale pro základní použití je to dostačující. Značky, které lze upravovat, jsou uvedeny níže.
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

Je užitečné definovat funkci.

Značky se zapisují takto. Celkový počet stop (počet skladeb) je reprezentován jmenovatelem „tracknumber“. Totéž platí pro počet disků.

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()

Čtení (zobrazení) značky je následující.

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

Značky se odstraňují následujícím způsobem.

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()

Použijte následující způsob.

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

mutagen.id3

Chcete-li upravovat značky ID3 přímo, použijte modul 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()

Chcete-li zapisovat, zadejte ID značky, jak je uvedeno níže.

  • názvy skladeb (TIT2)
  • Název alba (TALB)

ID značek jsou shrnuty v oficiální dokumentaci na následujícím odkazu, ale je obtížné pochopit, jaký druh informací představují.

Pro kontrolu shody může být jednodušší použít metodu pprint() pro zobrazení ID3 tagů existujícího souboru.