7

我正在尝试编写一个脚本来使用 Python 和 eyeD3 清理 mp3 文件名,但是当我尝试使用以下脚本加载 mp3 文件时出现“警告:eyed3.mp3.headers:Lame tag CRC check failed”

import string
import os
import eyed3

count = 0

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

因此,我无法重命名库中的大多数文件。关于这个主题的任何经验或使用不同的图书馆?

4

7 回答 7

1

看到几个没有明确答案的 SO 问题;这个好像动作最多。我也遇到了这个问题,但很明显这个错误与任何人的特定 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 与标签中的不匹配?

不幸的是,我不确定如何使用 eyeD3 或任何其他工具实际修复 LAME 标签。但是,我能够修复警告的是重新编码并覆盖文件(在 Mac 上我使用了“切换声音文件转换器”程序)。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 的程序来更新标签并写回最新版本)。我目前不确定该怎么做,但我很想知道是否有其他人对使用不同的工具有想法,或者对这一切如何运作有更深入的了解。

于 2020-10-02T01:05:33.563 回答
1

我找到了第一个转折点来检测那些遗憾地发送到标准输出的 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.
于 2020-04-10T17:28:56.487 回答
0

我在某些文件上也收到此错误,但这不是实际的 Python 错误,它只是被打印到标准输出。您可以忽略警告并以您认为合适的任何方式重命名文件。

于 2020-01-25T18:03:23.000 回答
0

我遇到了同样的问题,我的 mp3 文件是由 ffmpeg 生成的并且有这个问题。此外,它没有任何信息集。

我手动(在 Windows 中,使用文件属性)只编辑了标题并将其设置为“X”,之后我能够使用 eyed3 而不会遇到 CRC 错误。

于 2016-10-18T03:55:29.300 回答
0

我可以通过这样做来抑制这个错误:

from logging import getLogger


  # (in main)
  # Suppress WARNINGS generated by eyed3
  getLogger().setLevel('ERROR')
于 2021-01-25T01:14:08.183 回答
0

就我而言,该错误似乎是上面建议的“不明智的设置”的副作用。我使用 Audacity 从黑胶唱片中“录制”了 mp3,并注意到数据的音量很高。我用较低的增益重新录制。问题消失了!

于 2021-03-26T17:11:31.427 回答
-1

您访问/修改文件的速度太快。比实际加载或正确关闭要快。我在每个间隔期间添加了一小段时间睡眠并解决了问题。

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)
于 2020-05-11T15:04:13.223 回答