Библиотека редактирования тегов 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-тегов существующего файла, чтобы проверить соответствие.