使用YouTube上的机器人播放音乐而无需下载文件

时间:2019-08-28 09:09:14

标签: python-3.x discord.py-rewrite

我如何使用Youtube上的Discord机器人播放音乐而不将歌曲下载为文件?

我已经查看了discord.py文档中包含的音乐bot,但是该机器人将文件下载到该目录中。有什么办法可以避免这种情况?文档示例中的代码:

{...handleDevalue = fun this -> <some implementation code here>

1 个答案:

答案 0 :(得分:3)

要播放音乐而不下载音乐,只需在play函数中使用以下代码即可:

ydl_opts = {'format': 'bestaudio'}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    info = ydl.extract_info(video_link, download=False)
    URL = info['formats'][0]['url']
voice = get(self.bot.voice_clients, guild=ctx.guild)
voice.play(discord.FFmpegPCMAudio(URL))

这是每一行的用途:

  • ydl_opts = {'format': 'bestaudio'}:获得最佳音频
  • with youtube_dl.YoutubeDL(ydl_opts) as ydl::初始化youtube-dl
  • info = ydl.extract_info(video_link, download=False):获取一个名为info的字典,其中包含所有视频信息(标题,时长,上传者,描述等)。
  • URL = info['formats'][0]['url']:获取指向视频音频文件的URL
  • voice = get(self.bot.voice_clients, guild=ctx.guild):初始化一个新的音频播放器
  • voice.play(discord.FFmpegPCMAudio(URL)):播放正确的音乐


但是,从URL播放音频而不下载音频会导致一个已知问题,here解释了
要修复它,只需添加一个变量,例如FFMPEG_OPTIONS,它将包含FFMPEG的选项:

FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}

创建变量后,只需在FFmpegPCMAudio方法中添加一个参数:

voice.play(discord.FFmpegPCMAudio(URL, **FFMPEG_OPTIONS))