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

MacOS下用pydub开发音频GUI时遭遇ffprobe未找到错误求助

问题描述

正在开发一款Python GUI程序,用于播放指定文件中的音频片段并支持用户标注,选用pydub库,代码片段如下:

from pydub import AudioSegment
from pydub.playback import play

song = AudioSegment.from_wav("beepboop.mp3")
play(song)

运行时出现以下错误:

Warning (from warnings module):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydub/utils.py", line 170
    warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work

Warning (from warnings module):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydub/utils.py", line 198
    warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning)
RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work
Traceback (most recent call last):
  File "/Users/jack/Desktop/code-repo/convert-csv-to-json/cleaner.py", line 7, in <module>
    song = AudioSegment.from_wav("beepboop.mp3")
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydub/audio_segment.py", line 808, in from_wav
    return cls.from_file(file, 'wav', parameters=parameters)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydub/audio_segment.py", line 728, in from_file
    info = mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pydub/utils.py", line 274, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'ffprobe': 'ffprobe'

已从官网下载ffprobe和ffmpeg并解压到/usr/local/bin,但运行print(os.environ['PATH'])得到的路径为/usr/bin:/bin:/usr/sbin:/sbin,MacOSX不允许将可执行文件复制到/usr/bin或/usr/sbin目录,执行pip3 install ffprobe-python显示该库已安装,尝试apt install方法提示MacOSX不支持,寻求解决方向。

解决方向

1. 将/usr/local/bin加入系统PATH

根据使用的shell类型修改配置文件:

  • Bash:编辑~/.bash_profile或~/.bashrc,添加一行:
    export PATH="/usr/local/bin:$PATH"
    
  • Zsh(MacOS默认):编辑~/.zshrc,添加同样内容。
    执行source ~/.zshrc或source ~/.bash_profile使配置生效,重启Python环境后重新运行代码。

2. 在代码中直接指定ffmpeg/ffprobe路径

pydub支持手动设置工具路径,在代码开头添加:

from pydub import AudioSegment
# 指定ffmpeg和ffprobe的绝对路径
AudioSegment.converter = "/usr/local/bin/ffmpeg"
AudioSegment.ffprobe = "/usr/local/bin/ffprobe"

from pydub.playback import play

# 注意:用from_mp3加载mp3文件,或用from_file指定格式
song = AudioSegment.from_mp3("beepboop.mp3")
play(song)

注意:原代码中用from_wav加载mp3文件是错误的,需改为对应格式的加载方法。

3. 用Homebrew安装ffmpeg(推荐)

先安装Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

然后安装ffmpeg:

brew install ffmpeg

Homebrew会自动将ffmpeg和ffprobe安装到/usr/local/bin,并确保该路径被加入PATH,无需手动配置。

内容的提问来源于stack exchange,提问作者Jack McCumber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:54:56