Como usar mutagen para editar mp3 e outras etiquetas ID3 en Python

Negocios

Biblioteca de edición de etiquetas Python,mutagen

A biblioteca Python mutagen pódese usar para editar as etiquetas (metadatos) de ficheiros multimedia como 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.

Podes instalalo con pip.

$ pip install mutagen

Aquí tes un exemplo de edición dunha etiqueta ID3.

Para obter máis información sobre ID3, consulte a seguinte ligazón. O estándar creouse orixinalmente para mp3, pero agora tamén se aplica a mp4 (m4a) e outros ficheiros non mp3.

mutagen.easyid3

Se só queres ler ou escribir nomes de artistas, nomes de álbums, números de pistas, etc., é sinxelo usar o módulo EasyID3.

from mutagen.easyid3 import EasyID3

Para escribir o título dunha canción, fai o seguinte

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

Só se pode editar un número limitado de etiquetas para conseguir unha interface sinxela, pero é suficiente para un uso básico. As etiquetas que se poden editar pódense 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

É útil definir unha función.

As etiquetas están escritas do seguinte xeito. O número total de cancións (número de cancións) está representado polo denominador de ‘número de pista’. O mesmo ocorre co 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()

A lectura da etiqueta (visualización) é a seguinte.

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

As etiquetas elimínanse do seguinte xeito.

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

Use o seguinte.

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

mutagen.id3

Para editar as etiquetas ID3 directamente, use o 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 o ID da etiqueta como se mostra a continuación.

  • títulos de cancións(TIT2)
  • Nome do álbum(TALB)

Os ID de etiquetas resúmense na documentación oficial da seguinte ligazón, pero é difícil entender que tipo de información representan.

Pode ser máis doado usar o método pprint() para mostrar as etiquetas ID3 dun ficheiro existente para comprobar a correspondencia.

Copied title and URL