Discord使用FFmpegPCMAudio部署Heroku的ffmpeg路径问题求助
Discord.py部署Heroku时FFmpegPCMAudio路径问题解决方案
核心问题原因
本地代码硬编码了FFmpeg可执行文件的绝对路径,Heroku容器环境不存在该路径,且无需手动上传FFmpeg二进制文件即可完成配置。
分步解决方案
- 第一步:移除代码中的硬编码路径
调整discord.FFmpegPCMAudio的executable参数逻辑,适配本地开发和线上部署双场景:
本地开发时可在项目根目录新增import os # 优先读取环境变量中的FFmpeg路径,无配置则调用系统PATH中的FFmpeg ffmpeg_path = os.environ.get('FFMPEG_PATH', None) with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl: info = ydl.extract_info(url, download=False) await ctx.send('Сейчас играет: ' + info.get('title')) url2 = info['formats'][0]['url'] print(url2) if ffmpeg_path: source = discord.FFmpegPCMAudio(url2, executable=ffmpeg_path, **FFMPEG_OPTIONS) else: source = discord.FFmpegPCMAudio(url2, **FFMPEG_OPTIONS) vc.play(source).env配置文件,添加一行FFMPEG_PATH=/Users/someUser/ffmpeg即可正常使用,无需来回修改代码。 - 第二步:配置Heroku环境的FFmpeg
进入Heroku应用管理页面,在设置板块找到Buildpacks配置项,添加官方适配的FFmpeg构建包即可。部署时Heroku会自动在容器环境中安装FFmpeg并添加到系统路径,不需要手动上传二进制文件到代码仓库。
可选优化
目前youtube_dl已经停止维护,可替换为活跃维护的yt-dlp,用法和youtube_dl基本一致,仅需要替换导入的库名即可获得更快的解析速度和更多站点适配。
内容的提问来源于stack exchange,提问作者Timur
相关产品推荐
相关产品推荐

