Jak używać mutagenu do edycji tagów mp3 i innych ID3 w Pythonie?

Biznes

Biblioteka Pythona do edycji tagów, mutagen

Biblioteka Pythona mutagen może być użyta do edycji tagów (metadanych) plików multimedialnych takich jak 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.

Możesz go zainstalować za pomocą pip.

$ pip install mutagen

Poniżej znajduje się przykład edycji znacznika ID3.

Więcej informacji na temat ID3 można znaleźć pod następującym linkiem. Standard ten został pierwotnie stworzony dla mp3, ale obecnie jest również stosowany do mp4 (m4a) i innych plików nie-mp3.

mutagen.easyid3

Jeśli chcesz tylko odczytywać lub zapisywać nazwy wykonawców, nazwy albumów, numery utworów, itp., łatwo jest użyć modułu EasyID3.

from mutagen.easyid3 import EasyID3

Aby napisać tytuł piosenki, wykonaj następujące czynności

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

Aby uzyskać prosty interfejs, można edytować tylko ograniczoną liczbę znaczników, ale jest to wystarczające do podstawowych zastosowań. Tagi, które można edytować, można zobaczyć poniżej.
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

Przydatne jest zdefiniowanie funkcji.

Znaczniki zapisuje się w następujący sposób. Całkowita liczba ścieżek (liczba utworów) jest reprezentowana przez mianownik „tracknumber”. To samo odnosi się do liczby płyt.

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

Odczyt (wyświetlenie) znacznika jest następujący.

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

Znaczniki są usuwane w następujący sposób.

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

Stosować w następujący sposób.

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

mutagen.id3

Aby bezpośrednio edytować znaczniki ID3, należy użyć modułu 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()

Aby zapisać, należy podać identyfikator znacznika, jak pokazano poniżej.

  • tytuły piosenek (TIT2)
  • Nazwa albumu (TALB)

Identyfikatory tagów są podsumowane w oficjalnej dokumentacji na poniższym linku, ale trudno jest zrozumieć, jaki rodzaj informacji reprezentują.

Łatwiejszym rozwiązaniem może być użycie metody pprint() do wyświetlenia tagów ID3 istniejącego pliku w celu sprawdzenia ich zgodności.