繁体   English   中英

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: 找不到 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模块使用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。

你必须去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种方法:

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

     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 网站手动下载ffmpeg并将bin路径附加到sys.path可能无法解决此问题。 同样,手动指定ffmpeg可执行文件的路径(在 Windows 上为ffmpeg.exe )也可能无法解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM