Как удалить существующее изображение обложки альбома из Mp3 с помощью модуля eyed3 - PullRequest
0 голосов
/ 18 сентября 2018

Я пытался использовать модуль eyed3 для маркировки mp3-файлов, но, к сожалению, мне трудно понять документацию по модулю, и мне было интересно, может ли кто-нибудь мне помочь? .. Документацию можно найти по адресу https://eyed3.readthedocs.io

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

import eyed3
x = eyed3.load('file_path')
x.tag._images.remove()
x.tag.save()

Но когда я запускаю этот код, он выдает мне следующую ошибку:

TypeError: remove() missing 1 required positional argument: 'description'

IЯ не уверен, где найти вышеупомянутый description для передачи в качестве параметра.Я также посмотрел исходный файл python для тегирования eyed3, но, основываясь на изучении кода, я не могу выяснить, что передать этому аргументу description.

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

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 19 сентября 2018

Немного покопавшись, description буквально просто описание изображения.Когда вы вызываете x.tag.images, вы получаете объект ImageAccessor, который в основном представляет собой итерацию, содержащую ваши изображения.Если вы приведете x.tag.images к списку, вы увидите, что он содержит 1 объект ImageFrame (в моем тестовом примере).Когда вы звоните x.tag.images.remove(), eyed3 должен знать, какое изображение удалить, и выбирает изображение для удаления на основе описания изображения.Вы можете получить описания каждого изображения, используя что-то вроде этого.

[y.description for y in x.tag.images]

Как только вы знаете описание изображения, которое вы хотите удалить, вы сможете передать его в функцию удаления, и этот конкретныйизображение будет удалено.

>>> x.tag.images
<eyed3.id3.tag.ImagesAccessor object at 0x1053c8400>
>>> list(x.tag.images)
[<eyed3.id3.frames.ImageFrame object at 0x1050cc4a8>]
>>> x.tag.images.remove()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/jperoutek/test_env/lib/python3.6/site-packages/eyed3/utils/__init__.py", line 170, in wrapped_fn
    return fn(*args, **kwargs)
TypeError: remove() missing 1 required positional argument: 'description'
>>> x.tag.images.remove('')
<eyed3.id3.frames.ImageFrame object at 0x1050cc4a8>
>>> x.tag.images
<eyed3.id3.tag.ImagesAccessor object at 0x1053c8400>
>>> list(x.tag.images)
[]
...