Comment utiliser mutagen pour éditer les tags mp3 et autres ID3 en Python

Affaires

Bibliothèque d'édition de balises en Python, mutagen

La bibliothèque Python mutagen peut être utilisée pour modifier les balises (métadonnées) des fichiers multimédia tels que les 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.

Vous pouvez l'installer avec pip.

$ pip install mutagen

Voici un exemple d'édition d'une balise ID3.

Pour plus d'informations sur l'ID3, voir le lien suivant. La norme a été créée à l'origine pour le mp3, mais elle est désormais également appliquée au mp4 (m4a) et à d'autres fichiers non mp3.

mutagen.easyid3

Si vous souhaitez simplement lire ou écrire des noms d'artistes, des noms d'albums, des numéros de pistes, etc., il est facile d'utiliser le module EasyID3.

from mutagen.easyid3 import EasyID3

Pour écrire un titre de chanson, procédez comme suit

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

Seul un nombre limité de balises peut être modifié pour obtenir une interface simple, mais c'est suffisant pour une utilisation de base. Les balises qui peuvent être modifiées sont présentées ci-dessous.
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

Il est utile de définir une fonction.

Les balises s'écrivent comme suit. Le nombre total de pistes (nombre de chansons) est représenté par le dénominateur de “tracknumber”. Il en va de même pour le nombre de disques.

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 lecture de l'étiquette (affichage) est la suivante.

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

Les étiquettes sont retirées comme suit.

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

Utilisez comme suit.

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

mutagen.id3

Pour éditer directement les balises ID3, utilisez le module 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()

Pour écrire, spécifiez l'ID de la balise comme indiqué ci-dessous.

  • titres des chansons (TIT2)
  • Nom de l'album (TALB)

Les ID des balises sont résumés dans la documentation officielle au lien suivant, mais il est difficile de comprendre quel type d'information ils représentent.

Il peut être plus facile d'utiliser la méthode pprint() pour afficher les balises ID3 d'un fichier existant afin de vérifier la correspondance.