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标签以检查其对应关系可能更容易。