[英]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: 找不到 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 startupinfo 中)
WindowsError: [错误 2] 系统找不到指定的文件
我不知道为什么会引发此错误,因为我非常确定该文件存在。 虽然我有建议安装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 位/样本,为您提供 16 kb/s。
你必须去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")
问题是由于缺少ffmpeg
。 Pydub 需要它来执行格式转换的操作。 要解决这个问题,有2种方法:
只需使用 conda 安装 pydub ,而不是 pip (尽管Pydub 的 GitHub 页面上有建议)
conda install -c conda-forge pydub
这应该可以正常工作。 原因未知,可能是由于兼容性问题。
另一个解决方案(如果您已经使用 pip 安装 Pydub,并且它不起作用)是安装缺少的ffmpeg
包。 另一个问题来了。 虽然我们可以在pypi和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 网站手动下载ffmpeg
并将bin
路径附加到sys.path
可能无法解决此问题。 同样,手动指定ffmpeg
可执行文件的路径(在 Windows 上为ffmpeg.exe
)也可能无法解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.