Hur man använder mutagen för att redigera mp3- och andra ID3-taggar i Python

Företag

Python-bibliotek för redigering av taggar, mutagen

Pythonbiblioteket mutagen kan användas för att redigera taggar (metadata) i multimediefiler som 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.

Du kan installera det med pip.

$ pip install mutagen

Här är ett exempel på hur du redigerar en ID3-tagg.

Mer information om ID3 finns på följande länk. Standarden skapades ursprungligen för mp3, men tillämpas nu även på mp4 (m4a) och andra filer som inte är mp3-filer.

mutagen.easyid3

Om du bara vill läsa eller skriva artistnamn, albumnamn, spårnummer osv. är det enkelt att använda EasyID3-modulen.

from mutagen.easyid3 import EasyID3

För att skriva en låttitel gör du följande

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

Endast ett begränsat antal taggar kan redigeras för att uppnå ett enkelt gränssnitt, men det räcker för grundläggande användning. De taggar som kan redigeras visas nedan.
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

Det är lämpligt att definiera en funktion.

Etiketterna är skrivna på följande sätt. Det totala antalet spår (antal låtar) representeras av nämnaren i ”tracknumber”. Samma sak gäller för antalet skivor.

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

Avläsningen av taggen (displayen) ser ut på följande sätt.

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

Taggarna tas bort på följande sätt.

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

Använd på följande sätt.

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

mutagen.id3

Om du vill redigera ID3-taggar direkt använder du ID3-modulen.

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

För att skriva anger du tagg-ID enligt nedan.

  • titlar på låtar (TIT2)
  • Albumnamn (TALB)

Tag-ID:erna sammanfattas i den officiella dokumentationen på följande länk, men det är svårt att förstå vilken typ av information de representerar.

Det kan vara enklare att använda metoden pprint() för att visa ID3-taggarna i en befintlig fil för att kontrollera överensstämmelse.