Python使用pydub.AudioSegment把mp3转换为wav报错FileNotFoundError

笔者在使用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')



猜你喜欢

转载自blog.csdn.net/xiemanR/article/details/80209072