Пакет eyed3 для Python неправильно устанавливает метаданные ID3

Для этого я использую Python 2.7.13, Windows 10 и пакет eyed3, как описано здесь.

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

Проблема: сценарий правильно обновляет метаданные, но не может добавить информацию на экран «Подробности» свойств MP3 (экран сведений о MP3). Однако, если я сначала вручную ввожу данные в эти поля перед запуском скрипта, он правильно добавляет метаданные и показывает их на экране «Подробности»! Еще одна вещь, которую я заметил, заключается в том, что мне нужно ввести данные хотя бы в одно поле, чтобы скрипт правильно заполнил все поля. Кажется, что это инициализирует и каким-то образом разрешает доступ к полям...

В документации eyed3 приведен пример кода, которому я более или менее точно следовал в своем коде:

import eyed3
import eyed3.mp3

path = [path to some MP3 file]

if eyed3.mp3.isMp3File(path):
     audiofile = eyed3.load(path)   # load file from file path
     audiofile.tag.artist = u"Artist"    # u needed to denote unicode
     audiofile.tag.album_artist = u"Album Artist"
     audiofile.tag.album = u"Album"
     audiofile.tag.save()    # save altered tags

Вопросы:

  1. Есть ли какое-то скрытое разделение между метаданными ID3 и фактическими полями, отображаемыми на экране «Подробности» свойств MP3, о которых я не знаю?
  2. Я видел еще один вопрос относительно проблемы с глазами3, которая была решена используя initTag(), когда файл не имеет тегов ID3 ​​для начала. Хотя у меня не было такой же ошибки, может ли моя проблема быть связана?
  3. Могу ли я пропустить оператор импорта?
  4. Должен ли я просто попробовать другой модуль Python для управления метаданными ID3?

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

Заранее спасибо всем, кто найдет время, чтобы прочитать это! Любая помощь приветствуется :)


person Orin    schedule 05.01.2017    source источник


Ответы (1)


Я столкнулся с той же проблемой и, наконец, нашел решение в этой теме: https://bitbucket.org/nicfit/eyed3/issues/22/tag-save-method-does-not-apply-changes

суть: по умолчанию eyed3.load(pathtofile) загружает теги ID3_V2_4, а проводник и проигрыватель Windows Media используют тег 1.x.

Решение: замените оператор сохранения следующим:

   audiofile.tag.save(version=(1,None,None))
   audiofile.tag.save()

Первый оператор гарантирует, что теги, используемые проводником и WMP, будут обновлены. Второй гарантирует, что приложения, использующие теги v2.4, также будут обновлены (пример VLC). Надеюсь это поможет!

РЕДАКТИРОВАТЬ: В будущем, если вы планируете добавить обложку альбома, вам также следует добавить следующее:

    audiofile.tag.save(version=(2,3,0))

Не совсем уверен, почему, но обновление тегов v2.3, похоже, помогает при первом изменении обложки альбома.

person Rajeev Atmakuri    schedule 22.01.2017
comment
Благодарю вас! Это решило проблему. В итоге я просто использовал версию = (2,3,0), потому что, кажется, он также охватывает другие аспекты, такие как исполнитель альбома. - person Orin; 25.01.2017