Sådan bruger du mutagen til at redigere mp3- og andre ID3-tags i Python

Forretning

Python-bibliotek til redigering af tags, mutagen

Python-biblioteket mutagen kan bruges til at redigere tags (metadata) i multimediefiler som f.eks. 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 installere det med pip.

$ pip install mutagen

Her er et eksempel på redigering af et ID3-tag.

Du kan finde flere oplysninger om ID3 på følgende link. Standarden blev oprindeligt skabt til mp3, men anvendes nu også til mp4 (m4a) og andre ikke-mp3-filer.

mutagen.easyid3

Hvis du blot ønsker at læse eller skrive kunstnernavne, albumnavne, tracknumre osv., er det nemt at bruge EasyID3-modulet.

from mutagen.easyid3 import EasyID3

Du kan skrive en sangtitel ved at gøre følgende

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

Der kan kun redigeres et begrænset antal tags for at opnå en enkel grænseflade, men det er tilstrækkeligt til grundlæggende brug. De tags, der kan redigeres, kan ses nedenfor.
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 er nyttigt at definere en funktion.

Mærkerne er skrevet som følger. Det samlede antal spor (antal sange) repræsenteres af nævneren af “tracknumber”. Det samme gælder for antallet af diske.

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

Udlæsningen af mærket (displayet) er som følger.

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

Mærkerne fjernes på følgende måde.

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

Anvendes som følger.

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

mutagen.id3

Hvis du vil redigere ID3-tags direkte, skal du bruge ID3-modulet.

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

For at skrive skal du angive tag-id'et som vist nedenfor.

  • sangtitler (TIT2)
  • Albumnavn (TALB)

Tag-ID'erne er opsummeret i den officielle dokumentation på følgende link, men det er svært at forstå, hvilken slags information de repræsenterer.

Det kan være nemmere at bruge pprint()-metoden til at vise ID3-tags i en eksisterende fil for at kontrollere, om der er overensstemmelse.

Copied title and URL