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
相关产品推荐
相关产品推荐

