Hoe gebruik je mutagen om mp3 en andere ID3 tags te bewerken in Python

Bedrijf

Python tag bewerkingsbibliotheek, mutagen

De Python bibliotheek mutagen kan worden gebruikt om de tags (metadata) van multimedia bestanden zoals mp3 te bewerken.

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.

Je kunt het installeren met pip.

$ pip install mutagen

Hier is een voorbeeld van het bewerken van een ID3 tag.

Voor meer informatie over ID3, zie de volgende link. De standaard werd oorspronkelijk gecreëerd voor mp3, maar wordt nu ook toegepast op mp4 (m4a) en andere non-mp3 bestanden.

mutagen.easyid3

Als u alleen artiestnamen, albumnamen, tracknummers, enz. wilt lezen of schrijven, is het gemakkelijk om de EasyID3 module te gebruiken.

from mutagen.easyid3 import EasyID3

Om een songtitel te schrijven, doe je het volgende

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

Slechts een beperkt aantal tags kan worden bewerkt om een eenvoudige interface te verkrijgen, maar het is voldoende voor basisgebruik. De tags die kunnen worden bewerkt zijn hieronder te zien.
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

Het is nuttig om een functie te definiëren.

De tags worden als volgt geschreven. Het totaal aantal tracks (aantal liedjes) wordt weergegeven door de noemer van “tracknummer”. Hetzelfde geldt voor het aantal disks.

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

De tag uitlezing (display) is als volgt.

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

De tags worden als volgt verwijderd.

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

Gebruik als volgt.

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

mutagen.id3

Om ID3 tags direct te bewerken, gebruik de ID3 module.

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

Om te schrijven, specificeer de tag ID zoals hieronder getoond.

  • titels van liedjes (TIT2)
  • Naam van het album (TALB)

De tag ID's zijn samengevat in de officiële documentatie op de volgende link, maar het is moeilijk te begrijpen wat voor informatie ze vertegenwoordigen.

Het kan eenvoudiger zijn om de pprint() methode te gebruiken om de ID3 tags van een bestaand bestand weer te geven om te controleren of het overeenkomt.