Cómo usar mutagen para editar mp3 y otras etiquetas ID3 en Python

Negocio

Biblioteca de edición de etiquetas en Python, mutagen

La biblioteca de Python mutagen puede utilizarse para editar las etiquetas (metadatos) de los archivos multimedia como el 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.

Puedes instalarlo con pip.

$ pip install mutagen

Este es un ejemplo de edición de una etiqueta ID3.

Para más información sobre ID3, consulte el siguiente enlace. La norma se creó originalmente para el mp3, pero ahora se aplica también al mp4 (m4a) y a otros archivos que no son mp3.

mutagen.easyid3

Si sólo quieres leer o escribir los nombres de los artistas, los nombres de los álbumes, los números de las pistas, etc., es fácil utilizar el módulo EasyID3.

from mutagen.easyid3 import EasyID3

Para escribir el título de una canción, haga lo siguiente

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

Sólo se puede editar un número limitado de etiquetas para conseguir una interfaz sencilla, pero es suficiente para un uso básico. Las etiquetas que se pueden editar se pueden ver a continuación.
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

Es útil definir una función.

Las etiquetas se escriben de la siguiente manera. El número total de pistas (número de canciones) está representado por el denominador de 'tracknumber'. Lo mismo ocurre con el número de discos.

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 lectura de la etiqueta (pantalla) es la siguiente.

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

Las etiquetas se eliminan de la siguiente manera.

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

Utilícelo de la siguiente manera.

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

mutagen.id3

Para editar directamente las etiquetas ID3, utilice el módulo 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()

Para escribir, especifique el ID de la etiqueta como se muestra a continuación.

  • títulos de canciones (TIT2)
  • Nombre del álbum (TALB)

Los ID de las etiquetas están resumidos en la documentación oficial en el siguiente enlace, pero es difícil entender qué tipo de información representan.

Puede ser más fácil utilizar el método pprint() para mostrar las etiquetas ID3 de un archivo existente para comprobar la correspondencia.

Copied title and URL