You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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)前添加一行代码打印路径:
    print("选中的文件路径:", file_path)
    
    运行后确认路径是否正确,对应的MP3文件是否存在、未被移动或删除
  • 若路径包含中文、空格或特殊字符,尝试将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:03:31