Python使用Pydub将mp3转换为wav

pho*_*rxx 16 python audio pydub

好的,现在我很难将mp3转换为wav.我已经看到了不同的答案,但我想我会选择pydub,我已经使用这几行

from pydub import AudioSegment

AudioSegment.from_mp3("/input/file.mp3").export("/output/file.wav", format="wav")
Run Code Online (Sandbox Code Playgroud)

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

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')
Run Code Online (Sandbox Code Playgroud)

从from_file文件"build\bdist.win32\egg\pydub\audio_segment.py",第346行

文件"C:\ Python27\lib\subprocess.py",第711行,在init errread,errwrite)

文件"C:\ Python27\lib\subprocess.py",第948行,在_execute_child startupinfo中)

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

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

Rol*_*ith 13

pydub模块使用其中一个ffmpeg或多个avconf程序进行实际转换.所以你必须安装ffmpeg才能使这项工作.

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

  import subprocess

  subprocess.call(['ffmpeg', '-i', '/input/file.mp3',
                   '/output/file.wav'])
Run Code Online (Sandbox Code Playgroud)

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

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

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

  import subprocess

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

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

  • @ user3760740 据我所知,您无法使用 `ffmpeg` 将立体声输入转换为单声道输出。你可以用`sox`来做到这一点,请参阅更新的答案。 (2认同)
  • @user3760740 有不同的编码组合(sox `-e` 选项)和采样率(sox `-r` 选项)可以实现这一点。请参阅[手册](http://sox.sourceforge.net/sox.html)。哪一种适合您的应用程序是我无法说的。您可能必须尝试哪种最适合您。 (2认同)
  • @ user3760740 我已经更新了我的答案,为 16 kb/s 提供了一个明显的选项。 (2认同)

Abh*_*ore 8

您必须使用pydub,它是与音频文件相关的操作的绝佳模块。

注意。使用pydub之前,请务必先安装ffmpeg。

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

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

pip install pydub
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我们可以执行相同的操作并将音频流对象保留在内存中,而不是写入文件吗? (3认同)
  • 有点。memfile = io.BytesIO(); sound.export(memfile, 'wav'); sound=AudioSegment.from_wav(memfile) (2认同)