Мутаген save () не устанавливает и не изменяет обложку для файлов MP3 - PullRequest
6 голосов
/ 20 января 2020

Я пытаюсь использовать Mutagen для изменения обложки ID3 (версия 2.3) для нескольких файлов MP3 следующим образом:

from mutagen.mp3 import MP3
from mutagen.id3 import APIC

file = MP3(filename)

with open('Label.jpg', 'rb') as albumart:
    file.tags['APIC'] = APIC(
        encoding=3,
        mime='image/jpeg',
        type=3, desc=u'Cover',
        data=albumart.read()
    )
file.save(v2_version=3)

Однако файл (или по крайней мере, тег APIC) остается неизменным, что проверяется путем чтения тега назад. Однако в системном файловом обозревателе файл показывает обновленный Date modified. Как я могу заставить Mutagen корректно обновлять обложку?

Ответы [ 2 ]

4 голосов
/ 05 февраля 2020

Проблема возникает из-за спецификации ID3 , в которой говорится:

К одному файлу может быть прикреплено несколько изображений, каждое в своем отдельном "API C "кадр, но только один с тем же дескриптором содержимого.

Это означает, что ID3 должен хранить теги API C с использованием ['APIC:Description']. Кроме того, рекомендуемый способ добавления тегов не напрямую через интерфейс словаря, как в примере в вопросе, а с использованием функции ID3.add(). Использование объекта ID3 также позволяет нам использовать функцию ID3.getall() для проверки правильности прикрепления тега.

from mutagen.id3 import APIC, ID3
file = ID3("test.mp3")

print(file.getall('APIC')) # [] (assuming no APIC tags attached)

with open('image.jpg', 'rb') as albumart:
    file.add(APIC(
        encoding=3,
        mime='image/jpeg',
        type=3, desc=u'Cover',
        data=albumart.read()
    ))

print(file.getall('APIC'))
# [APIC(encoding=<Encoding.UTF16: 1>, mime='image/jpeg', type=<PictureType.COVER_FRONT: 3>, desc='Cover', data=...]
file.save(v2_version=3)
0 голосов
/ 05 февраля 2020

Мне нужно было установить обложку для тега "API C:" вместо тега "API C" (который, как мне кажется, определяет IDv2.3).

...