Come usare mutagen per modificare mp3 e altri tag ID3 in Python

Attività commerciale

libreria Python per la modifica dei tag, mutagen

La libreria Python mutagen può essere usata per modificare i tag (metadati) di file multimediali come 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.

Potete installarlo con pip.

$ pip install mutagen

Ecco un esempio di modifica di un tag ID3.

Per maggiori informazioni sull'ID3, vedi il seguente link. Lo standard è stato originariamente creato per gli mp3, ma ora viene applicato anche agli mp4 (m4a) e ad altri file non mp3.

mutagen.easyid3

Se vuoi solo leggere o scrivere nomi di artisti, nomi di album, numeri di tracce, ecc., è facile usare il modulo EasyID3.

from mutagen.easyid3 import EasyID3

Per scrivere il titolo di una canzone, fai come segue

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

Solo un numero limitato di tag può essere modificato per ottenere un'interfaccia semplice, ma è sufficiente per un uso di base. I tag che possono essere modificati possono essere visti qui sotto.
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

È utile definire una funzione.

I tag sono scritti come segue. Il numero totale di tracce (numero di canzoni) è rappresentato dal denominatore di 'tracknumber'. Lo stesso vale per il numero di dischi.

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

La lettura del tag (display) è la seguente.

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

I tag vengono rimossi come segue.

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

Utilizzare come segue.

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

mutagen.id3

Per modificare direttamente i tag ID3, usate il modulo 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()

Per scrivere, specificare l'ID del tag come mostrato di seguito.

  • titoli delle canzoni (TIT2)
  • Nome dell'album (TALB)

Gli ID dei tag sono riassunti nella documentazione ufficiale al seguente link, ma è difficile capire che tipo di informazioni rappresentano.

Potrebbe essere più facile usare il metodo pprint() per visualizzare i tag ID3 di un file esistente per controllare la corrispondenza.