Python – проверка CRC тега eyeD3 Lame не удалась

Я пытаюсь написать скрипт для очистки имен mp3-файлов с помощью Python и eyeD3, но получаю сообщение «ПРЕДУПРЕЖДЕНИЕ: проверка CRC для тега Lame не удалась» при попытке загрузить mp3-файл с помощью следующего скрипта.

import string
import os
import eyed3

count = 0

for root, dirs, filenames in os.walk('path'):
    for song in filenames:
        audiofile = eyed3.load(song)

Из-за этого я не могу переименовать большинство файлов в моей библиотеке. Есть ли опыт по этому вопросу или другая библиотека для использования?


person Jay Bell    schedule 15.04.2016    source источник
comment
Вы когда-нибудь догадывались об этом?   -  person Tom    schedule 20.06.2016
comment
@ Том Нет, к сожалению, нет.   -  person Jay Bell    schedule 18.10.2016
comment
В конце концов я нашел решение этой проблемы. Выложу, как только найду свой сценарий.   -  person Tom    schedule 18.10.2016
comment
@ Том, ты нашел решение?   -  person Shekhar Samanta    schedule 08.06.2018
comment
Вы нашли решение? Я пытаюсь поймать предупреждение как ошибку, но, похоже, я не могу (не знаю, как) это сделать. Я запускаю свой скрипт на нескольких файлах, поэтому мне хотелось бы знать, какой из них вызывает проблему.   -  person Felipe    schedule 25.04.2019
comment
Я никогда не сожалел.   -  person Jay Bell    schedule 06.05.2019
comment
Если вы хотите отключить это сообщение методом грубой силы, посмотрите site-packages/eyed3/mp3/headers.py строку 578 или около того...   -  person duanev    schedule 16.08.2020
comment
@Felipe У меня была такая же проблема, когда я пытался найти проблемные файлы. Чтобы решить эту проблему, перед загрузкой я добавил оператор печати, например, Обработка файла с названием песни, а затем вызов сброса стандартного вывода. Затем, когда вы запустите свой скрипт, вы должны увидеть предупреждение сразу после песни. Обратите внимание: если вы выводите в файл, обязательно перенаправьте stderr на stdout.   -  person Billy    schedule 02.10.2020


Ответы (7)


Я нашел первый обходной путь для обнаружения этих «ошибок» eye3d, к сожалению, отправленных на стандартный вывод: на самом деле, eyed3 не так полностью грязен, как кажется, потому что это ошибки и на самом деле log.warnings, поэтому я получил эти ошибки, просмотрев журнал. таким образом: - перед вызовом eye3d я перенаправляю журнал в stringIO - после вызова eye3d я проверяю, пуст ли этот stringIO (или нет)

образец кода :

import logging
import io
import eyed3

log_stream = io.StringIO()
logging.basicConfig(stream=log_stream, level=logging.INFO)
audiofile = eyed3.load('myfullfilename')
llog = log_stream.getvalue()
if llog:
    # deal here with the error message which in llog
    # and then purge the log_stream to reuse it for next eye3d call
    log_stream.truncate(0)
# all this code can be improved : enclose it in a try..catch, etc.
person herve-guerin    schedule 10.04.2020

Видел пару ТАК вопросов без четких ответов; этот, кажется, имеет наибольшее действие. Я тоже столкнулся с этой проблемой, но ясно, что ошибка не имеет ничего общего с чьим-либо конкретным сценарием Python. Вы можете узнать это, запустив инструмент eyeD3 из командной строки следующим образом (сокращенный вывод):

% eyeD3 -v '03 - The Presidents Of The United States Of America - Lump.mp3'
eyed3.mp3.headers:WARNING: Lame tag CRC check failed
.../03 - The Presidents Of The United States Of America - Lump.mp3 [ 5.28 MB ]

ID3 v2.4:
title: Lump
artist: The Presidents Of The United States Of America

Вы можете увидеть больше информации о теге LAME следующим образом:

% eyeD3 -P lameinfo '03 - The Presidents Of The United States Of America - Lump.mp3'
eyed3.mp3.headers:WARNING: Lame tag CRC check failed

Encoder Version     : LAME3.82U
LAME Tag Revision   : 10

Music CRC-16        : 5555
LAME Tag CRC-16     : 5555

Я действительно не изучал это, но я предполагаю, как это работает, что вычисленный CRC не соответствует тому, что в теге?

К сожалению, я не уверен, как на самом деле исправить тег LAME с помощью eyeD3 или любого другого инструмента. Однако то, что я смог исправить, это перекодировать и перезаписать файл (на Mac я использовал программу Switch Sound File Converter). Тег LAME кажется потерянным в процессе (что имеет смысл, поскольку LAME связан с кодированием):

% eyeD3 -P lameinfo '03 - The Presidents Of The United States Of America - Lump.mp3'

03 - The Presidents Of The United States Of America - Lump.mp3  [ 5.71 MB ]
-------------------------------------------------------------------------------
No LAME Tag

а также

% eyeD3  '03 - The Presidents Of The United States Of America - Lump.mp3'
.../03 - The Presidents Of The United States Of America - Lump.mp3 [ 5.71 MB ]

ID3 v2.3:
title: Lump

И, таким образом, предупреждение исчезает (обратите внимание на изменение версии тега ID3 на более старую версию... Затем я использовал программу под названием Tagr для обновления тегов, и она записала самую новую версию). В настоящее время я не уверен, как еще это сделать, но я хотел бы знать, есть ли у кого-нибудь еще идеи о различных инструментах для использования или более глубокое понимание того, как все это работает.

person Billy    schedule 02.10.2020

Я столкнулся с той же проблемой, мой mp3-файл был сгенерирован ffmpeg и имел эту проблему. Кроме того, у него не было никакой информации.

Я вручную (в Windows, используя свойства файла) отредактировал только заголовок и установил его на «X», после чего я смог использовать eyed3, не натыкаясь на ошибку CRC.

person David Airapetyan    schedule 18.10.2016
comment
Я пробовал это, но это не сработало для меня. Я также попытался сбросить тег (audiofile.initTag(), а затем audiofile.tag.save()), но он тоже не работает. - person herve-guerin; 10.04.2020

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

person Endlisnis    schedule 25.01.2020
comment
Извините, но я не понимаю, как переименование mp3-файла может исправить эту ошибку? (пробовал конечно, но у меня не получилось) - person herve-guerin; 10.04.2020
comment
@herve-guerin: переименование файла не решает проблему. Первоначальная проблема была связана с переименованием файлов. Эту ошибку можно игнорировать при переименовании файлов. - person Endlisnis; 15.04.2020

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

from logging import getLogger


  # (in main)
  # Suppress WARNINGS generated by eyed3
  getLogger().setLevel('ERROR')
person Rupesh Kapoor    schedule 25.01.2021

В моем случае ошибка оказалась побочным эффектом «неправильных настроек», как было предложено выше. Я «записал» mp3 с виниловой пластинки с помощью Audacity и заметил высокий уровень громкости данных. Я переделал запись с меньшим коэффициентом усиления. Проблема ушла!

person Larry Myerscough    schedule 26.03.2021

Вы слишком быстро открываете/изменяете файлы. Быстрее, чем он на самом деле загружается или закрывается должным образом. Я добавляю небольшое время сна во время каждого интервала и решаю проблему.

import string
import os
import eyed3
import time

count = 0

for root, dirs, filenames in os.walk('path'):
    for song in filenames:
        audiofile = eyed3.load(song)
        time.sleep(0.01)
person Edward Lai    schedule 11.05.2020
comment
Почему на CRC может повлиять скорость открытия файлов? Вы можете легко воссоздать это, открыв только один оскорбительный файл и увидев всплывающее предупреждение. - person Billy; 02.10.2020
comment
Я не думаю, что это имеет слишком большой смысл. Что значит слишком быстро? Откуда вы знаете, что спящего режима в десять миллисекунд между файлами достаточно — должен ли он быть более длительным на более быстрых машинах? - person MikeB; 06.10.2020
comment
У меня есть один файл, который дает мне эту ошибку. Это не имеет ничего общего со скоростью, с которой вы открываете файлы. - person SouthernYankee65; 03.12.2020