【问题标题】:Pydub from_mp3 gives [Errno 2] No such file or directoryPydub from_mp3 给出 [Errno 2] No such file or directory
【发布时间】:2015-12-10 07:39:31
【问题描述】:

我发现自己在墙前,只是试图将音频文件加载到 pydub 中进行转换,不断抛出“[Errno 2] No such file or directory”错误。

当然,我花了太多时间来确保路径有效,尝试了相对路径和绝对路径,并确认 python 方法 open() 在完全相同的路径下工作正常。

我正在通过 ubuntu 上的 anaconda 2.3 发行版在 ipython 3.2 和 python 2.7 中工作。

from pydub import AudioSegment
sound = AudioSegment.from_mp3("/absolute/path/to/file.mp3")

还尝试在路径中不带空格,因为有时会出现问题。这是完整的错误日志:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-15-8b1ec013ca8e> in <module>()
      1 import pydub
----> 2 sound = pydub.AudioSegment.from_mp3("/absolute/path/to/file.mp3")

/home/ludo/anaconda3/envs/python2/lib/python2.7/site-packages/pydub/audio_segment.pyc in from_mp3(cls, file)
    421     @classmethod
    422     def from_mp3(cls, file):
--> 423         return cls.from_file(file, 'mp3')
    424 
    425     @classmethod

/home/ludo/anaconda3/envs/python2/lib/python2.7/site-packages/pydub/audio_segment.pyc in from_file(cls, file, format, **kwargs)
    404         log_conversion(conversion_command)
    405 
--> 406         p = subprocess.Popen(conversion_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    407         p_out, p_err = p.communicate()
    408 

/home/ludo/anaconda3/envs/python2/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
    708                                 p2cread, p2cwrite,
    709                                 c2pread, c2pwrite,
--> 710                                 errread, errwrite)
    711         except Exception:
    712             # Preserve original exception in case os.close raises.

/home/ludo/anaconda3/envs/python2/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
   1333                         raise
   1334                 child_exception = pickle.loads(data)
-> 1335                 raise child_exception
   1336 
   1337 

OSError: [Errno 2] No such file or directory

我是对这里非常简单的事情视而不见还是...?

编辑: 正如 Vaulstein 询问的那样,我还尝试将路径作为原始文本 r"/absolute/path/to/file.mp3" 传递 - 这给了我同样的错误。

【问题讨论】:

  • 您是否尝试过将path 作为原始文本传递? r"/absolute/path/to/file.mp3",以防万一它有特殊字符。
  • 是的,我有相对和绝对的,得到同样的错误。它最特殊的字符是_和-。不过好点,将其添加到问题中!
  • 尝试从 IDE or python shell import pydub sound = pydub.AudioSegment.from_mp3("/absolute/path/to/file.mp3") 运行以下行
  • Mmmmkay,在 Kitty 会话中从 python 命令行尝试过(这就是你所说的 IDE 或 python shell?):1/ import pydub 抛出“RuntimeWarning:找不到 ffmpeg 或 avconv - 默认为 ffmpeg,但可能无法正常工作”2/ 执行与上述相同的操作“from pydub import AudioSegment”会导致相同的错误。

标签: python pydub


【解决方案1】:

异常与您提供的文件名没有任何关系。查看回溯,这是找不到 subprocess.Popen 调用的 conversion_command。这反过来又可以解释无法找到avconvffmpeg 的警告。解决方案应该是在控制台中使用sudo apt-get install libav-tools 安装 libav-tools 包。

【讨论】:

  • 我相信你是对的 - 这是 pydub 最常见的问题之一(这也是我们添加 RuntimeWarning 的原因)
  • 另一个注意事项,如果 ffmpeg/avlib 不在您的 PATH 中,您也可以在实例化任何 AudioSegment 对象之前手动指定它的位置,例如 AudioSegment.converter = "/path/to/ffmpeg" :)
  • 非常感谢 BlackJack 和@Jiaaro - 我设法按照您的提示从 python 命令行让它工作,但是我的 ipython 笔记本仍然遇到同样的错误。你熟悉吗?知道它可能来自哪里吗?虽然我的 ~/bin 在我的路径中,但我确实尝试将 ffmpeg 的直接路径从我的笔记本添加到 AudioSegment.converter。
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2017-07-05
  • 2018-11-20
  • 2018-07-24
  • 1970-01-01
相关资源
最近更新 更多