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

部署discord.py机器人到Heroku调用ffmpeg出现PermissionError权限错误

错误原因

你遇到的权限报错来自两个核心问题:

  1. 本地Windows环境下的ffmpeg路径是Windows专属的.exe可执行文件路径,而Heroku运行环境是Linux,既无法识别Windows格式的可执行文件,也没有你项目目录下存放的Windows版ffmpeg的执行权限。
  2. 你已经安装了ffmpeg的Heroku构建包,该构建包会将ffmpeg直接安装到系统全局PATH中,无需手动指定本地ffmpeg路径。

解决步骤

1. 修改代码中的FFmpeg调用参数

删除FFmpegPCMAudio中的executable参数,或者直接将值改为'ffmpeg',同时将音频路径的Windows风格反斜杠改为Linux通用的正斜杠:
修改前的代码段:

source = FFmpegPCMAudio(executable = r'.\FFmpeg\ffmpeg.exe', source = r'.\Audio\audio.mp3')

修改后的代码段:

source = FFmpegPCMAudio(source = './Audio/audio.mp3')
# 若系统找不到ffmpeg可以手动指定executable参数为全局路径:
# source = FFmpegPCMAudio(executable='ffmpeg', source = './Audio/audio.mp3')

2. 清理不必要的文件并调整构建包顺序

  • 在.gitignore文件中添加本地Windows版ffmpeg的存放目录(即你项目里的FFmpeg/文件夹),避免将无效的Windows可执行文件上传到Heroku。
  • 确认Heroku构建包的顺序:heroku/python在前,ffmpeg构建包在后,构建包顺序错误可能导致ffmpeg未被正确加载到系统环境变量中。

3. 验证ffmpeg安装状态

部署完成后可以通过heroku run bash进入应用容器,执行ffmpeg -version命令,若正常输出版本信息则说明ffmpeg安装正确,此时运行bot命令就不会再报权限错误。

额外优化建议

你当前代码中固定等待3秒后断开语音的逻辑,若音频时长超过3秒会被强制中断,可以改为监听播放状态自动断开,示例逻辑:

ctx.voice_client.play(source)
while ctx.voice_client.is_playing():
    await asyncio.sleep(1)
await ctx.voice_client.disconnect()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:39:03