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
模块使用 ffmpeg
或 avconf
程序进行实际转换。所以你必须安装 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种方法:
只需使用 conda 安装 pydub,而不是 pip(尽管 Pydub's GitHub page 上有建议)
conda install -c conda-forge pydub
这应该可以正常工作。原因未知,可能是由于兼容性问题。
另一个解决方案(如果您已经使用 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
)也可能无法解决问题。
好的,现在我被困在将 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
模块使用 ffmpeg
或 avconf
程序进行实际转换。所以你必须安装 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种方法:
只需使用 conda 安装 pydub,而不是 pip(尽管 Pydub's GitHub page 上有建议)
conda install -c conda-forge pydub
这应该可以正常工作。原因未知,可能是由于兼容性问题。
另一个解决方案(如果您已经使用 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
)也可能无法解决问题。