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

Discord机器人FFmpegPCMAudio报错:找不到程序及_process属性缺失

问题描述

开发Python Discord机器人时,执行join命令后机器人能成功连接语音频道,但报错找不到指定路径的ffmpeg.exe,后续还触发'FFmpegPCMAudio'对象没有'_process'属性的错误。已尝试重装FFmpeg、检查语法,问题仍未解决。

相关代码

@bot.command()
async def join(ctx):
    if ctx.author.voice is None:
        await ctx.reply("You are not connected to a voice channel.")
        return
    channel = ctx.author.voice.channel
    voice = await channel.connect()
    voice.play(discord.FFmpegPCMAudio(executable="C:/Path_Program/ffmpeg.exe", source=r"example.mp3"))

报错信息

Ignoring exception in command join:
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 178, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\user\Desktop\HoDeC-bot\bot.py", line 64, in join
    voice.play(discord.FFmpegPCMAudio(executable="C:/Path_Program/ffmpeg.exe", source=r"example.mp3"))
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\player.py", line 312, in __init__
    super().__init__(source, executable=executable, args=args, **subprocess_kwargs)
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\player.py", line 165, in __init__
    self._process: subprocess.Popen = self._spawn_process(args, **kwargs)
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\player.py", line 185, in _spawn_process
    raise ClientException(f"{executable} was not found.") from None
discord.errors.ClientException: C:/Path_Program/ffmpeg.exe was not found.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\bot.py", line 347, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 950, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 187, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ClientException: C:/Path_Program/ffmpeg.exe was not found.
Exception ignored in: <function AudioSource.__del__ at 0x000001D17D222B00>
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\player.py", line 115, in __del__
    self.cleanup()
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\player.py", line 245, in cleanup
    self._kill_process()
  File "C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\player.py", line 194, in _kill_process
    proc = self._process
AttributeError: 'FFmpegPCMAudio' object has no attribute '_process'
解决方案

核心问题说明

C:/Path_Program/ffmpeg.exe was not found是根源错误,_process属性缺失是FFmpeg初始化失败后,对象清理时触发的连锁问题,解决前者后后者会自动消失。

步骤1:确认FFmpeg路径绝对正确

  • 打开文件资源管理器,找到FFmpeg安装文件夹的bin目录,定位ffmpeg.exe
  • 右键ffmpeg.exe→属性→安全→复制完整对象名称(路径可用/或双反斜杠\\,比如C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe)
  • 替换代码中executable参数的路径值,确保完全匹配

步骤2:将FFmpeg加入系统环境变量(推荐)

  • 右键「此电脑」→属性→高级系统设置→环境变量
  • 在系统变量的Path中添加FFmpeg的bin目录路径(如C:\Program Files\ffmpeg\bin)
  • 重启Python编辑器/终端,之后代码可直接写executable="ffmpeg.exe",甚至省略该参数(discord.py会自动查找系统路径中的FFmpeg)

步骤3:验证FFmpeg可用性

  • 打开CMD,输入ffmpeg -version,能输出版本信息说明路径配置正确;若提示「不是内部或外部命令」,则环境变量未配置到位或路径错误

步骤4:检查音频文件路径

  • 确保example.mp3与机器人脚本在同一目录,或使用完整绝对路径(如r"C:\Users\user\Desktop\HoDeC-bot\example.mp3")

修正后示例代码

@bot.command()
async def join(ctx):
    if ctx.author.voice is None:
        await ctx.reply("你未连接到语音频道。")
        return
    channel = ctx.author.voice.channel
    voice = await channel.connect()
    # FFmpeg已加入环境变量时可直接省略executable参数
    voice.play(discord.FFmpegPCMAudio(source=r"example.mp3"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:25:22