CentOS服务器Discord Bot使用ffmpeg-static仍提示找不到ffmpeg求助
解决CentOS服务器上Discord Bot找不到ffmpeg的问题
我之前也碰到过类似的情况,在没有sudo权限的CentOS服务器上折腾Discord Bot的ffmpeg问题,给你几个可行的方案试试:
1. 确认ffmpeg-static的安装路径并手动指定到Bot代码里
有时候npm安装ffmpeg-static后,Bot没法自动识别到二进制文件的位置,我们可以直接在代码里指定它的路径。
首先,在你的项目目录里执行命令找到ffmpeg-static的安装位置:
npm list ffmpeg-static
输出里会显示类似node_modules/ffmpeg-static的路径,进去后找到里面的ffmpeg二进制文件(CentOS下没有.exe后缀)。
如果用的是discord.js,在播放音频时直接指定ffmpegPath参数:
const ffmpegStatic = require('ffmpeg-static'); const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates ] }); client.on('messageCreate', async (message) => { if (message.content === '!play') { const connection = await message.member.voice.channel.join(); // 直接用ffmpeg-static提供的路径 const dispatcher = connection.play('./audio.mp3', { ffmpegPath: ffmpegStatic.path }); } });
2. 把ffmpeg-static的路径加入系统环境变量
如果不想每次都在代码里指定路径,可以手动把ffmpeg的目录加到PATH里,让系统能找到它。在Bot代码的最顶部加上这段:
const path = require('path'); // 获取ffmpeg二进制文件的所在目录 const ffmpegDir = path.dirname(require('ffmpeg-static').path); // 把这个目录加到PATH最前面 process.env.PATH = `${ffmpegDir}:${process.env.PATH}`;
3. 手动下载独立的ffmpeg静态包(如果ffmpeg-static不好用)
如果ffmpeg-static的版本和你的CentOS不兼容,你可以自己下载适合CentOS的静态ffmpeg包,放到自己的用户目录里:
- 下载对应架构(比如x86_64)的静态ffmpeg包(选择无需安装、解压即可用的static版本)
- 解压后把
ffmpeg二进制文件复制到你用户目录下的~/bin文件夹(如果没有就自己创建:mkdir ~/bin) - 编辑
~/.bashrc文件,加上:export PATH="$HOME/bin:$PATH",然后执行source ~/.bashrc让配置生效 - 之后Bot就能直接找到系统里的ffmpeg了,不需要额外配置
4. 检查系统依赖是否缺失
CentOS的版本如果比较旧,可能缺少ffmpeg需要的系统库(比如glibc、openssl)。你可以用ldd命令检查ffmpeg二进制的依赖:
ldd $(npm explore ffmpeg-static -- pwd)/ffmpeg
如果输出里有not found的项,你可以尝试用非sudo的包管理器(比如conda,如果服务器允许的话)安装对应的依赖,或者换一个兼容性更好的ffmpeg静态版本。
另外,重新安装ffmpeg-static时可以加--verbose参数看看有没有安装报错:
npm i ffmpeg-static --verbose
内容的提问来源于stack exchange,提问作者Ellis Thompson
相关产品推荐
相关产品推荐

