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
相关产品推荐
相关产品推荐

