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

如何使用Discord.py将在线MP3音频URL播放至语音频道?

解决Discord.py播放远程MP3到语音频道的问题

先处理核心错误:ffmpeg未找到

你遇到的ClientException: ffmpeg was not found是因为Discord.py找不到FFmpeg程序——FFmpeg是处理音频解码/转换的工具,FFmpegPCMAudio依赖它把MP3这类压缩格式转成Discord能识别的原始PCM音频。

解决方法分两种:

  • 全局安装FFmpeg并配置环境变量:
    • Windows:从FFmpeg官网下载压缩包,解压后找到bin目录(里面有ffmpeg.exe),把这个路径添加到系统的PATH环境变量里,重启你的Python编辑器/终端。
    • macOS:用Homebrew执行brew install ffmpeg
    • Linux:用包管理器,比如Ubuntu/Debian用sudo apt install ffmpeg
  • 代码里指定FFmpeg路径:
    如果不想配置环境变量,可以直接在代码里写FFmpeg的绝对路径:
    voiceclient.play(discord.FFmpegPCMAudio(
        "https://onlyconnect.s3.eu-west-2.amazonaws.com/Audio/s16e2-11-Toyah-Brave+New+World.mp3",
        executable="C:/path/to/ffmpeg.exe"  # Windows示例,其他系统写对应路径
    ))
    

关于音频源的说明

你提到的PCMAudio是最底层的音频源,它要求输入原始PCM字节数据——这是未经压缩的音频原始格式,一般不会直接用它处理MP3,因为需要自己做解码工作,非常麻烦。

而FFmpegPCMAudio是Discord.py专门封装的工具,它会自动调用FFmpeg,把MP3(包括远程URL的MP3)解码、转换成Discord语音频道需要的PCM流,完全不需要你手动处理格式转换,这才是你应该用的音频源。

完整的播放示例代码

下面是一个完整的命令示例,让机器人加入语音频道并播放指定MP3:

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command()
async def play(ctx):
    # 检查用户是否在语音频道
    if not ctx.author.voice:
        await ctx.send("你得先加入一个语音频道!")
        return
    voice_channel = ctx.author.voice.channel
    
    # 连接到语音频道
    try:
        voice_client = await voice_channel.connect()
    except discord.ClientException:
        # 如果已经连接,直接获取已存在的voice_client
        voice_client = ctx.guild.voice_client
    
    # 播放远程MP3
    try:
        audio_source = discord.FFmpegPCMAudio(
            "https://onlyconnect.s3.eu-west-2.amazonaws.com/Audio/s16e2-11-Toyah-Brave+New+World.mp3"
            # 如果需要指定FFmpeg路径,加上executable参数
            # executable="/usr/bin/ffmpeg"  # Linux示例
        )
        voice_client.play(audio_source)
        await ctx.send("正在播放音频!")
    except Exception as e:
        await ctx.send(f"播放失败:{str(e)}")
        await voice_client.disconnect()

bot.run("你的机器人Token")

额外注意事项

  • 确保你的机器人有VoiceMembers等相关权限,能加入语音频道并播放音频。
  • 如果播放时出现卡顿,可能是网络问题,或者可以给FFmpeg添加参数优化,比如加上options="-vn -b:a 128k"来禁用视频流、指定音频比特率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:25:15