笔者在使用pydub.AudioSegment把mp3文件转换为wav时出现FileNotFoundError错误。
代码如下:
# -*- coding: utf-8 -*- """ @author: xiemanrui @time: 2018-05-05 20:15:09 """ # 需要安装pydub、ffmpeg import pydub import io import wave def mp3_to_wav(mp3_path, wav_path): with open(mp3_path, 'rb') as fh: data = fh.read() aud = io.BytesIO(data) sound = pydub.AudioSegment.from_file(aud, format='mp3') raw_data = sound._data size = len(raw_data) f = wave.open(wav_path, 'wb') f.setnchannels(1) f.setsampwidth(2) f.setframerate(16000) f.setnframes(size) f.writeframes(raw_data) f.close() return wav_path mp3_to_wav('out.mp3', 'out.wav')
具体错误如下:
Traceback (most recent call last):
File "E:/Code/bd_api/test.py", line 33, in <module>
mp3_to_wav('out.mp3', 'out.wav')
File "E:/Code/bd_api/test.py", line 18, in mp3_to_wav
sound = pydub.AudioSegment.from_file(aud, format='mp3')
File "C:\Python34\lib\site-packages\pydub\audio_segment.py", line 512, in from_file
p = subprocess.Popen(conversion_command, stdin=devnull, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "C:\Python34\lib\subprocess.py", line 859, in __init__
restore_signals, start_new_session)
File "C:\Python34\lib\subprocess.py", line 1112, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
原因分析:
这是因为找不到ffmpeg可执行文件的路径导致的。
解决:
设置ffmpeg执行文件的路径
pydub.AudioSegment.converter = 'E:\\mysoft\\ffmpeg\\bin\\ffmpeg.exe'
修改后的完整代码如下:
# -*- coding: utf-8 -*- """ @author: xiemanrui @time: 2018-05-05 20:15:09 """ # 需要安装pydub、ffmpeg import pydub import io import wave def mp3_to_wav(mp3_path, wav_path): with open(mp3_path, 'rb') as fh: data = fh.read() aud = io.BytesIO(data) pydub.AudioSegment.converter = 'E:\\mysoft\\ffmpeg\\bin\\ffmpeg.exe' sound = pydub.AudioSegment.from_file(aud, format='mp3') raw_data = sound._data size = len(raw_data) f = wave.open(wav_path, 'wb') f.setnchannels(1) f.setsampwidth(2) f.setframerate(16000) f.setnframes(size) f.writeframes(raw_data) f.close() return wav_path mp3_to_wav('out.mp3', 'out.wav')