在DigitalOcean部署基于pydub的音频处理应用时遭遇ffprobe找不到的错误求助
我之前在部署音频处理应用到DigitalOcean的时候也踩过一模一样的坑,给你几个实用的排查和解决方向:
先还原下你遇到的错误提示,方便对应问题:
warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning)
Unexpected error: [Errno 2] No such file or directory: 'ffprobe'
1. 先检查二进制文件的执行权限
你把ffmpeg和ffprobe的二进制放到了项目的bin目录,但Linux系统下如果文件没有执行权限,就算路径完全正确,也会报"找不到文件"的错误。你可以登录到DigitalOcean服务器,进入项目根目录后执行下面的命令,给二进制文件加上执行权限:
chmod +x bin/ffmpeg-linux bin/ffprobe-linux
如果是用自动化脚本部署的,记得把这条命令加到部署流程里,确保每次部署后权限都能正确生效。
2. 把相对路径改成绝对路径
你现在用的是相对路径os.path.join("bin", "ffprobe-linux"),但有时候应用的运行工作目录并不是项目根目录,这就会导致相对路径"失效",找不到目标文件。可以改成基于项目根目录的绝对路径,这样不管应用在哪个目录下运行,都能精准定位到二进制文件:
import os from pydub import AudioSegment import platform # 获取项目根目录的绝对路径 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) if platform.system() == "Darwin": # Mac本地环境,无需额外设置 pass elif platform.system() == "Linux": # DigitalOcean服务器环境 AudioSegment.converter = os.path.join(BASE_DIR, "bin", "ffmpeg-linux") AudioSegment.ffprobe = os.path.join(BASE_DIR, "bin", "ffprobe-linux") else: raise EnvironmentError("Unsupported platform. Only macOS and Linux are supported.")
3. 确认二进制文件的架构兼容性
要确保你放在bin目录里的ffmpeg-linux和ffprobe-linux是适配DigitalOcean Droplet架构的。比如如果你的Droplet是x86_64架构,一定要下载对应x86_64的静态编译版本,要是误下成ARM架构的,就算权限和路径都没问题,也会因为无法执行而报类似"找不到文件"的错误。
4. 直接安装系统级的ffmpeg(最省心的方案)
其实完全不用自己携带二进制文件,直接在DigitalOcean服务器上安装系统级的ffmpeg反而更稳定,pydub会自动识别到系统中的ffprobe。执行下面的命令完成安装:
sudo apt-get update && sudo apt-get install -y ffmpeg
安装完成后,你甚至可以删掉代码里手动设置AudioSegment.converter和AudioSegment.ffprobe的部分,pydub会自动找到系统中的工具,省掉很多路径配置的麻烦。
内容来源于stack exchange

