如何修复Python音乐播放器中的[WinError 2]文件未找到错误
解决pydub加载MP3时的WinError 2问题
出现WinError 2找不到文件的报错,核心原因要么是pydub依赖的FFmpeg未正确配置,要么是文件路径存在异常,以下是具体解决步骤:
1. 安装并配置FFmpeg
pydub本身不具备解码MP3的能力,完全依赖FFmpeg处理音频文件,这是此类报错最常见的诱因:
- 下载对应Windows版本的FFmpeg(建议选择full build版本),解压到本地任意目录,比如
C:\ffmpeg - 找到FFmpeg解压目录下的
bin文件夹(如C:\ffmpeg\bin),将其路径添加到系统环境变量PATH中 - 重启Python编辑器或命令行窗口,让环境变量生效
- 验证配置:打开命令行输入
ffmpeg -version,能正常输出FFmpeg版本信息即配置成功
2. 验证文件路径有效性
即使通过文件选择器获取路径,也可能存在路径异常:
- 在
current_audio = AudioSegment.from_mp3(file_path)前添加一行代码打印路径:
运行后确认路径是否正确,对应的MP3文件是否存在、未被移动或删除print("选中的文件路径:", file_path) - 若路径包含中文、空格或特殊字符,尝试将MP3文件移动到路径更简单的目录(如
D:\test.mp3)再测试
3. 代码优化提示(额外)
原代码中playback.stop()无法真正停止正在播放的音频(因为playback.play()是阻塞调用),可以改用simpleaudio实现可中断的播放逻辑,修改后的核心代码示例:
import simpleaudio play_obj = None def play_music(): global current_audio, play_obj file_path = filedialog.askopenfilename(filetypes=[("Mp3 files", "*.mp3")]) if file_path: stop_music() current_audio = AudioSegment.from_mp3(file_path) play_obj = simpleaudio.play_buffer( current_audio.raw_data, num_channels=current_audio.channels, bytes_per_sample=current_audio.sample_width, sample_rate=current_audio.frame_rate ) def stop_music(): global play_obj if play_obj and play_obj.is_playing(): play_obj.stop()
内容的提问来源于stack exchange,提问作者MIKO
相关产品推荐
相关产品推荐

