Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

audio - Python convert mp3 to wav with Pydub

Ok, now I am stuck up in converting mp3 to wav. I have seen different answers but i think i would to go for the one of pydub, which i already did using these few lines

from pydub import AudioSegment

AudioSegment.from_mp3("/input/file.mp3").export("/output/file.wav", format="wav")

but when I run the above code, i get the following error

C:Python27libsite-packagespydub-0.14.2-py2.7.eggpydubutils.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:UsersphourlharDesktopVoiceDetectorutils.py", line 25, in stereo_to_mono

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

File "builddist.win32eggpydubaudio_segment.py", line 346, in from_file

File "C:Python27libsubprocess.py", line 711, in init errread, errwrite)

File "C:Python27libsubprocess.py", line 948, in _execute_child startupinfo)

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

I don't know why it raises this error as i am very sure the file exists. Although i have answers suggesting the installation of ffmpeg, but i dont know if affect the app deployment in any way later on

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The pydub module uses either ffmpeg or avconf programs to do the actual conversion. So you do have to install ffmpeg to make this work.

But if you don't need pydub for anything else, you can just use the built-in subprocess module to call a convertor program like ffmpeg like this:

  import subprocess

  subprocess.call(['ffmpeg', '-i', '/input/file.mp3',
                   '/output/file.wav'])

This requires that the ffmpeg binary is in a location in your $PATH, by the way.

Edit: With ffmeg, you cannot convert stereo to mono, as far as I know. You can only choose the left or right channel. I'm assuming this is not what you want.

The sox program can convert stereo to mono:

  import subprocess

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

This will sample at 16 kHz, with 8 bits/sample, giving you 16 kb/s.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...