Мутаген: как извлечь свойства обложки альбома? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь получить свойства (пока ширины и высоты, но, вероятно, больше) изображения обложки альбома из mp3-файла, используя python 3.7.1 и mutagen 1.42, но пока что ничего не работает.Я все еще могу правильно извлечь некоторую другую информацию

В документе рассказывается о APIC , но при попытке отобразить все теги не отображается ничего, связанного с каким-либо изображением (и моими тестовыми файлами mp3 имеет фотографии альбома):

import os,sys
from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3

song_path = os.path.join(sys.argv[1]) # With sys.argv[1] the path to a mp3 file containing a picture
track = MP3(song_path, ID3=EasyID3)
pprint(track.get('title')[0] + ' ' + str(track.info.length) + 's, ' + str(int(track.info.bitrate / 1000)) + 'kbps')
print(track.keys())

Результат с использованием моего файла:

> Exponential Tears 208.0s, 205kbps
> ['album', 'copyright', 'encodedby', 'length', 'title', 'artist', 'albumartist', 'tracknumber', 'genre', 'date', 'originaldate']

(Этот mp3-файл имеет встроенное изображение, котороеЯ могу видеть любое музыкальное программное обеспечение, которое я использую.)

Я нашел много разных способов справиться с этим с помощью мутагена, но некоторые кажутся устаревшими, другие просто не работают, я не понимаю, что яздесь отсутствует.

Любая помощь здесь будет с удовольствием оценена

1 Ответ

0 голосов
/ 19 февраля 2019

ОК, в конце концов я понял это: модуль EasyID3 обрабатывает только самые распространенные теги и не включает в себя данные изображения (APIC).Для этого вам нужно использовать модуль ID3 , который более сложен для понимания.Затем найдите ключ APIC: , в котором изображение хранится в виде строки байтов.

Вот небольшой пример использования PIL для работы с изображениями:

import os,sys
from io import BytesIO
from mutagen.mp3 import MP3
from mutagen.id3 import ID3
from PIL import Image

song_path = os.path.join(sys.argv[1])
track = MP3(song_path)
tags = ID3(song_path)
print("ID3 tags included in this song ------------------")
print(tags.pprint())
print("-------------------------------------------------")
pict = tags.get("APIC:").data
im = Image.open(BytesIO(pict))
print('Picture size : ' + str(im.size))

Надеюсь, это поможет, удачи!;)

...