使用Nextcord开发Discord机器人播放MP3失败:FFmpeg未找到
解决Nextcord机器人无法播放MP3的问题
问题根源
错误日志里明确显示nextcord.errors.ClientException: ffmpeg was not found——系统找不到FFmpeg可执行文件,导致无法解码生成的MP3音频,自然没法播放。
解决步骤
1. 安装FFmpeg
- Windows:下载FFmpeg编译好的二进制包,解压后把
ffmpeg.exe所在的文件夹路径添加到系统环境变量PATH中。 - macOS:打开终端执行
brew install ffmpeg(需先安装Homebrew) - Linux:Debian/Ubuntu系执行
sudo apt install ffmpeg,其他发行版用对应包管理器安装。
2. 验证安装
打开终端/命令提示符,输入ffmpeg -version,能显示版本信息就说明安装成功。
3. 代码优化(可选但推荐)
原代码存在文件名冲突、错误处理宽泛等问题,以下是优化版本:
import os import tempfile from gtts import gTTS import nextcord from nextcord.ext import commands @bot.command(name="bottalk") async def bottalk(ctx, *args): text = " ".join(args) user = ctx.message.author # 检查用户是否在语音频道 if not user.voice: await ctx.send("先加入语音频道啊!") return # 连接语音频道 try: vc = await user.voice.channel.connect() except nextcord.ClientException: # 已连接则复用现有客户端 vc = ctx.voice_client if not vc: await ctx.send("连不上语音频道哦") return # 用临时文件存储音频,避免文件名冲突 with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as temp_file: temp_filename = temp_file.name # 生成TTS音频 sound = gTTS(text=text, lang="en", slow=False) sound.save(temp_filename) # 停止当前播放的音频 if vc.is_playing(): vc.stop() # 如果环境变量未生效,可填写FFmpeg绝对路径,比如Windows的"C:/ffmpeg/bin/ffmpeg.exe" source = await nextcord.FFmpegOpusAudio.from_probe( temp_filename, method="fallback", executable="ffmpeg" ) # 播放完成后清理临时文件并断开连接(可按需调整) def on_play_end(error): if error: print(f"播放出错:{error}") vc.disconnect() if os.path.exists(temp_filename): os.remove(temp_filename) vc.play(source, after=on_play_end)
额外提示
若添加环境变量后仍找不到FFmpeg,直接在executable参数中填写FFmpeg的绝对路径即可。
内容的提问来源于stack exchange,提问作者hihihi hihihi
相关产品推荐
相关产品推荐

