【问题标题】:Python - eyeD3 Lame tag CRC check failedPython - eyeD3 Lame 标记 CRC 检查失败
【发布时间】:2016-08-06 18:32:09
【问题描述】:

我正在尝试编写一个脚本来使用 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)

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

【问题讨论】:

  • 你有想过这个吗?
  • @Tom 不,很遗憾我没有。
  • 我最终找到了解决方案。我会尽快找到我的脚本。
  • @Tom 你找到解决方案了吗?
  • 您找到解决方案了吗?我试图将警告“捕获”为错误,但似乎我不能(不知道该怎么做)。我在多个文件上运行我的脚本,所以我很想知道是哪个文件导致了问题。

标签: python mp3 media crc eyed3


【解决方案1】:

我找到了第一个转机来检测那些遗憾地发送到 stdout 的 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.

【讨论】:

    【解决方案2】:

    看到几个没有明确答案的 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 的程序来更新标签并写回最新版本)。我目前不确定其他方法,但我很想知道是否有其他人对使用不同的工具有想法,或者对这一切的工作原理有更深入的了解。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我试过这个,但它对我不起作用。我也尝试重置标签(audiofile.initTag() 然后 audiofile.tag.save() )但它也不起作用。
      【解决方案4】:

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

      【讨论】:

      • 道歉,但我不明白如何重命名 mp3 文件可以解决此错误? (我当然试过,但它对我不起作用)
      • @herve-guerin:重命名文件并不能解决问题。最初的问题与重命名文件有关。重命名文件时可以忽略此错误。
      【解决方案5】:

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

      from logging import getLogger
      
      
        # (in main)
        # Suppress WARNINGS generated by eyed3
        getLogger().setLevel('ERROR')
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          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)
          

          【讨论】:

          • 为什么打开文件的速度会影响 CRC?您可以通过只打开一个有问题的文件并看到警告仍然弹出来轻松地重新创建它。
          • 我认为这没有多大意义。 “太快”是什么意思?你怎么知道在文件之间休眠 10 毫秒就足够了——在更快的机器上应该是更长的休眠时间吗?
          • 我有一个文件给我这个错误。它与您打开文件的速度无关。
          • 我有一个脚本可以扫描整个目录以查找丢失的封面图像。我收到一堆这样的警告。我尝试在每个eyed3.load() 之后添加time.sleep(0.1),但我仍然收到警告,但每秒的速度要低得多。
          猜你喜欢
          • 2020-08-19
          • 1970-01-01
          • 2016-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-01
          • 1970-01-01
          • 2013-07-07
          相关资源
          最近更新 更多