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

如何解决Discord机器人中的‘ffmpeg was not found’错误?

解决Discord机器人的"ffmpeg was not found"错误及代码优化建议

一、解决ffmpeg找不到的核心方案

1. 直接在代码中指定ffmpeg路径

找到你解压的ffmpeg程序的绝对路径,在调用FFmpegPCMAudio时加上executable参数:

# Windows示例(注意替换成你自己的ffmpeg.exe路径)
voice.play(FFmpegPCMAudio(URL, executable=r"C:\ffmpeg-6.0-full_build\bin\ffmpeg.exe", **FFMPEG_OPTIONS))

# Linux/macOS示例
voice.play(FFmpegPCMAudio(URL, executable="/usr/local/bin/ffmpeg", **FFMPEG_OPTIONS))

提示:Windows路径前加r是为了避免转义字符问题,确保路径正确。

2. 将ffmpeg加入系统环境变量

  • Windows:
    • 找到ffmpeg解压后的bin文件夹(比如C:\ffmpeg\bin)
    • 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
    • 在系统变量的Path中添加该bin文件夹的路径,点击确定后重启你的代码编辑器或命令行窗口。
  • Linux/macOS:
    • 打开终端,编辑~/.bashrc(bash用户)或~/.zshrc(zsh用户)文件
    • 添加一行:export PATH=$PATH:/path/to/ffmpeg/bin(替换成你的ffmpeg bin路径)
    • 执行source ~/.bashrc(或对应配置文件)使修改生效。

二、代码优化建议(针对新手)

1. 移除不必要的全局变量

你的channel_player全局变量完全可以改成局部变量,避免全局变量带来的意外问题:

async def play(ctx, url):
    if not ctx.message.author.voice:
        await ctx.send(f"{ctx.message.author.name} 未连接到语音频道")
        return
    channel = ctx.message.author.voice.channel  # 用局部变量替代全局变量

2. 避免重复连接语音频道

添加判断逻辑,防止用户重复调用命令时出现连接错误:

voice = get(bot.voice_clients, guild=ctx.guild)
if voice and voice.is_connected():
    await voice.move_to(channel)  # 如果已连接,直接切换到用户所在频道
else:
    voice = await channel.connect()  # 未连接则新建连接

3. 替换停止维护的youtube-dl

youtube-dl已经停止更新,建议换成功能更完善的yt-dlp:

  • 先安装:pip install yt-dlp
  • 代码中替换导入语句:
from yt_dlp import YoutubeDL  # 替代原来的youtube_dl

4. 支持带特殊字符的URL

把命令参数改成*, url,这样用户输入包含空格或特殊字符的URL时不会被截断:

@bot.command(brief="从YouTube URL播放音频")
async def play(ctx, *, url):  # 加*号让url接收完整参数

5. 添加异常处理

避免因无效URL或其他错误导致机器人崩溃:

if not voice.is_playing():
    try:
        with YoutubeDL(YDL_OPTIONS) as ydl:
            info = ydl.extract_info(url, download=False)
        URL = info['url']
        voice.play(FFmpegPCMAudio(URL, **FFMPEG_OPTIONS))
    except Exception as e:
        await ctx.send(f"播放失败:{str(e)}")
        return
else:
    await ctx.send("当前正在播放歌曲")
    return

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:20:42