Как да използвате mutagen за редактиране на mp3 и други ID3 тагове в Python

Бизнес

Библиотека за редактиране на етикети на Python, mutagen

Библиотеката на Python mutagen може да се използва за редактиране на таговете (метаданните) на мултимедийни файлове, например 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.

Можете да го инсталирате с pip.

$ pip install mutagen

Ето един пример за редактиране на таг ID3.

За повече информация относно ID3 вижте следната връзка. Първоначално стандартът е създаден за mp3, но вече се прилага и за mp4 (m4a) и други файлове, които не са mp3.

mutagen.easyid3

Ако искате само да четете или записвате имена на изпълнители, имена на албуми, номера на песни и т.н., е лесно да използвате модула EasyID3.

from mutagen.easyid3 import EasyID3

За да напишете заглавие на песен, направете следното

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

Само ограничен брой тагове могат да бъдат редактирани, за да се постигне прост интерфейс, но той е достатъчен за основна употреба. Таговете, които могат да се редактират, са показани по-долу.
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

Полезно е да се дефинира функция.

Таговете се изписват, както следва. Общият брой на песните (брой песни) се представя в знаменателя на „tracknumber“. Същото важи и за броя на дисковете.

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

Показанията на етикета (дисплея) са следните.

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

Таговете се премахват, както следва.

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

Използвайте, както следва.

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

mutagen.id3

За директно редактиране на таговете ID3 използвайте модула 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()

За да запишете, посочете идентификатора на тага, както е показано по-долу.

  • заглавия на песни (TIT2)
  • Име на албума (TALB)

Идентификаторите на таговете са обобщени в официалната документация на следния линк, но е трудно да се разбере какъв вид информация представляват те.

Може да е по-лесно да използвате метода pprint(), за да покажете ID3 таговете на съществуващ файл и да проверите за съответствие.

Copied title and URL