使用Python通过FFmpeg转换MP3到WAV时遇FileNotFoundError的解决方法
解决MP3转WAV时的FFmpeg未找到与FileNotFoundError问题
问题重现
用户尝试用pydub将MP3转换为WAV,代码如下:
from pydub import AudioSegment # Specify the path to the FFmpeg executable ffmpeg_path = r"C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin\ffmpeg.exe" AudioSegment.ffmpeg = ffmpeg_path AudioSegment.ffprobe = ffmpeg_path # Load the MP3 file mp3_file = r"C:\Users\תמרה\Tea Time - Ofshane.mp3" audio = AudioSegment.from_file(mp3_file, format="mp3") # Export as WAV wav_file = r"C:\Users\תמרה\Tea Time - Ofshane.wav" audio.export(wav_file, format="wav")
运行后出现以下错误:
C:\Users\תמרה\PycharmProjects\spotify\venv\Scripts\python.exe "C:\Users\תמרה\PycharmProjects\spotify\file stuff.py" C:\ffmpeg-2023-05-29-git-45fa85a777-full_build\bin\ffmpeg.exe C:\Users\תמרה\PycharmProjects\spotify\venv\lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning) C:\Users\תמרה\PycharmProjects\spotify\venv\lib\site-packages\pydub\utils.py:198: RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning) Traceback (most recent call last): File "C:\Users\תמרה\PycharmProjects\spotify\file stuff.py", line 12, in <module> audio = AudioSegment.from_file(mp3_file, format="mp3") File "C:\Users\תמרה\PycharmProjects\spotify\venv\lib\site-packages\pydub\audio_segment.py", line 728, in from_file info = mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit) File "C:\Users\תמרה\PycharmProjects\spotify\venv\lib\site-packages\pydub\utils.py", line 274, in mediainfo_json res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE) File "C:\Users\תמרה\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 971, in __init__ True self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Users\תמרה\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 1440, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] The system cannot find the file specified Process finished with exit code 1
错误原因分析
- FFprobe路径设置错误:ffmpeg和ffprobe是两个独立的可执行文件,你将
AudioSegment.ffprobe也指向了ffmpeg.exe,导致pydub无法找到ffprobe工具。 - 路径含非ASCII字符:用户名包含希伯来文,Windows系统下部分场景会出现Unicode路径解析问题,导致无法定位MP3文件或FFmpeg程序。
- FFmpeg路径有效性存疑:需确认你指定的ffmpeg.exe路径是否真实存在。
解决步骤
1. 修正FFprobe路径
找到ffmpeg目录下的ffprobe.exe,单独设置其路径:
from pydub import AudioSegment ffmpeg_path = r"C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin\ffmpeg.exe" ffprobe_path = r"C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin\ffprobe.exe" AudioSegment.ffmpeg = ffmpeg_path AudioSegment.ffprobe = ffprobe_path
2. 规避非ASCII路径问题
将MP3文件移动到不含特殊字符的路径下,比如C:\temp\Tea Time - Ofshane.mp3,然后修改代码中的文件路径:
mp3_file = r"C:\temp\Tea Time - Ofshane.mp3" wav_file = r"C:\temp\Tea Time - Ofshane.wav"
3. 验证FFmpeg路径有效性
打开命令提示符,直接输入你指定的ffmpeg路径,确认能正常运行:
"C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin\ffmpeg.exe" -version
如果提示找不到文件,说明路径错误,需重新定位FFmpeg的安装目录。
4. 备选方案:添加FFmpeg到系统PATH
将FFmpeg的bin目录(比如C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin)添加到系统环境变量PATH中,这样pydub会自动检测到ffmpeg和ffprobe,无需手动设置路径。
修正后的完整代码示例
from pydub import AudioSegment # 正确设置ffmpeg和ffprobe路径 ffmpeg_path = r"C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin\ffmpeg.exe" ffprobe_path = r"C:\Users\תמרה\AppData\Local\ffmpegio\ffmpeg-downloader\ffmpeg\bin\ffprobe.exe" AudioSegment.ffmpeg = ffmpeg_path AudioSegment.ffprobe = ffprobe_path # 使用不含非ASCII字符的路径 mp3_file = r"C:\temp\Tea Time - Ofshane.mp3" audio = AudioSegment.from_file(mp3_file, format="mp3") wav_file = r"C:\temp\Tea Time - Ofshane.wav" audio.export(wav_file, format="wav")
内容的提问来源于stack exchange,提问作者avocado123123
相关产品推荐
相关产品推荐

