Python 使用 Pydub 将 mp3 转换为 wav

Python convert mp3 to wav with 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: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work

Traceback (most recent call last): File "C:/Users/phourlhar/Desktop/VoiceDetector/yeah.py", line 7, in stereo_to_mono()

File "C:\Users\phourlhar\Desktop\VoiceDetector\utils.py", line 25, in stereo_to_mono

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

File "build\bdist.win32\egg\pydub\audio_segment.py", line 346, in from_file

File "C:\Python27\lib\subprocess.py", line 711, in init errread, errwrite)

File "C:\Python27\lib\subprocess.py", line 948, in _execute_child startupinfo)

WindowsError: [Error 2] The system cannot find the file specified

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

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 bits/sample,给你 16 kb/s。

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

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

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

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

pip install pydub

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

import pydub
sound = pydub.AudioSegment.from_mp3("D:/example/apple.mp3")
sound.export("D:/example/apple.wav", format="wav")

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

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

    conda install -c conda-forge pydub
    

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

  1. 另一个解决方案(如果您已经使用 pip 安装 Pydub,但它不起作用)是安装缺少的 ffmpeg 包。另一个问题来了。虽然我们可以在两个 pypi and anaconda 上找到一个名为 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)也可能无法解决问题。