Python使用Pydub将mp3转换为wav

时间:2015-08-18 13:04:49

标签: python audio pydub

好的,现在我很难将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,但可能无效

     

追踪(最近一次通话):     File" 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')
     

文件"构建\ 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中       STARTUPINFO)

     

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

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

3 个答案:

答案 0 :(得分:11)

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。

答案 1 :(得分:7)

你必须选择pydub,它是与音频文件相关的操作的绝佳模块。

请注意。在使用pydub之前,请记得安装ffmpeg。

有关安装 ffmpeg 的帮助,您可以使用此link

然后安装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")

答案 2 :(得分:0)

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

  1. 只需使用 conda而不是pip 安装pydub(尽管有Pydub's GitHub page的建议)

    conda install -c conda-forge pydub
    

这应该工作正常。原因不明,可能是出于兼容性方面的考虑。

  1. 另一种解决方案(如果您已经使用pip来安装Pydub,并且不起作用)是安装缺少的ffmpeg软件包。这是另一个问题。尽管我们在pypianaconda上都可以找到名为ffmpeg的软件包,但是如果仅安装其中一个源,则可能会看到类似

    的错误
    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

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

请注意,从FFmpeg website手动下载ffmpeg并将bin路径附加到sys.path可能不会解决此问题。同样,手动指定ffmpeg可执行文件的路径(在Windows中为ffmpeg.exe)也可能无法解决问题。