21

好的,现在我坚持将 mp3 转换为 wav。我看到了不同的答案,但我想我会选择 pydub,我已经用这几行做了

from pydub import AudioSegment

AudioSegment.from_mp3("/input/file.mp3").export("/output/file.wav", format="wav")

但是当我运行上面的代码时,我得到以下错误

C:\Python27\lib\site-packages\pydub-0.14.2-py2.7.egg\pydub\utils.py:165: RuntimeWarning: 找不到 ffmpeg 或 avconv - 默认为 ffmpeg,但可能不起作用

回溯(最近一次通话最后):文件“C:/Users/phourlhar/Desktop/VoiceDetector/yeah.py”,第 7 行,在 stereo_to_mono()

文件“C:\Users\phourlhar\Desktop\VoiceDetector\utils.py”,第 25 行,位于 stereo_to_mono

sound = AudioSegment.from_mp3(PROJECT_DIR+'\\files\\rec'+str(c)+'.mp3')

文件“build\bdist.win32\egg\pydub\audio_segment.py”,第 346 行,在 from_file

文件“C:\Python27\lib\subprocess.py”,第 711 行,在init errread、errwrite 中)

文件“C:\Python27\lib\subprocess.py”,第 948 行,在 _execute_child 启动信息中)

WindowsError: [错误 2] 系统找不到指定的文件

我不知道为什么会引发此错误,因为我非常确定该文件存在。虽然我有建议安装 ffmpeg 的答案,但我不知道以后是否会以任何方式影响应用程序部署

4

3 回答 3

18

pydub模块使用其中一个ffmpegavconf程序来进行实际的转换。所以你必须安装ffmpeg才能使这项工作。

但是,如果您不需要pydub其他任何东西,您可以使用内置subprocess模块来调用转换器程序,ffmpeg如下所示:

  import subprocess

  subprocess.call(['ffmpeg', '-i', '/input/file.mp3',
                   '/output/file.wav'])

顺便说一句,这要求 ffmpeg 二进制文件位于 $PATH 中的某个位置。

编辑ffmeg据我所知,您无法将立体声转换为单声道。您只能选择左声道或右声道。我假设这不是你想要的。

sox程序可以将立体声转换为单声道:

  import subprocess

  subprocess.call(['sox', '/input/file.mp3', '-e', 'mu-law', 
                   '-r', '16k', '/output/file.wav', 'remix', '1,2'])

这将以 16 kHz 采样,8 位/采样,为您提供 16 kb/s。

于 2015-08-18T13:28:55.967 回答
10

pydub你一定要去,它是一个很好的与音频文件相关的操作模块。

笔记。请记住在使用 pydub 之前安装 ffmpeg。

如需有关安装ffmpeg的帮助,您可以使用此链接

然后安装 pydub 只需打开命令提示符并输入

pip install pydub

然后将任何文件从 mp3 转换为 wav 只需使用pydub作为

import pydub
sound = pydub.AudioSegment.from_mp3("D:/example/apple.mp3")
sound.export("D:/example/apple.wav", format="wav")
于 2016-02-03T17:42:44.890 回答
1

问题是由于缺少ffmpeg. Pydub 要求它执行格式转换的操作。要解决这个问题,有两种方法:

  1. 只需使用 conda 安装 pydub ,而不是 pip(尽管Pydub 的 GitHub 页面上有建议)

    conda install -c conda-forge pydub
    

这应该可以正常工作。原因未知,可能是由于兼容性问题。

  1. 另一种解决方案(如果您已经使用 pip 安装 Pydub,但它不起作用)是安装缺少的ffmpeg包。另一个问题来了。ffmpeg虽然我们可以在pypianaconda上找到一个名为的包,但如果我们只安装了其中一个源,我们可能会看到如下错误

    In [1]: import ffmpeg                                                                               
    ---------------------------------------------------------------------------
    ModuleNotFoundError                       Traceback (most recent call last)
    <ipython-input-1-16f5f3b4de71> in <module>
    ----> 1 import ffmpeg
    
    ModuleNotFoundError: No module named 'ffmpeg'
    

经过几次测试,我发现必须安装两者才能使包ffmpeg工作(安装两次,换句话说)。否则,即使它是通过 pip 或 anaconda 安装的,python 也找不到包。所以只需输入

pip install ffmpeg
conda install ffmpeg

现在尝试ffmpeg在python中导入。如果没有错误,问题应该已经解决了。

请注意,ffmpegFFmpeg 网站手动下载并附加bin路径sys.path可能无助于解决此问题。ffmpeg同样,手动指定(在 Windows 上是)可执行文件的路径也ffmpeg.exe可能无法解决问题。

于 2020-06-13T21:49:59.687 回答