如何使用mutagen在Python中編輯mp3和其他ID3標籤

商業

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

要寫入,請指定如下所示的標籤 ID。

  • 歌名(TIT2)
  • 專輯名稱(TALB)

標籤ID在以下鏈接的官方文檔中進行了總結,但很難理解它們代表什麼樣的信息。

使用 pprint() 方法顯示現有文件的 ID3 標籤以檢查對應關係可能更容易。

Copied title and URL