discord.py и youtube_dl воспроизведение аудио без скачки
как можно воспроизвести аудио в боте при помощи библиотеки youtube_dl, но без установки самого аудио в директорию бота (из-за этой установки невозможно запустить стримы с музыкой по типу lo-fi) и если ни как нельзя, то какую библиотеку можно для этого использовать (существуют же боты по типу MEE6, Rythm, Groove, которые играют стримы спокойно и моментально, а с учётом что запуск аудио моментальный, да и боты очень популярны, то явно это происходит без скачки видео)
Ответы (2 шт):
Делается это так:
from youtube_dl import YoutubeDL
from asyncio import sleep
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'False'}
FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
@bot.command()
async def play(ctx, arg):
global vc
try:
voice_channel = ctx.message.author.voice.channel
vc = await voice_channel.connect()
except:
print('Уже подключен или не удалось подключиться')
if vc.is_playing():
await ctx.send(f'{ctx.message.author.mention}, музыка уже проигрывается.')
else:
with YoutubeDL(YDL_OPTIONS) as ydl:
info = ydl.extract_info(arg, download=False)
URL = info['formats'][0]['url']
vc.play(discord.FFmpegPCMAudio(executable="ffmpeg\\ffmpeg.exe", source = URL, **FFMPEG_OPTIONS))
while vc.is_playing():
await sleep(1)
if not vc.is_paused():
await vc.disconnect()
Для реализации такой команды нужен FFMPEG - .exe файл, необходимый для запуска звука. Этот экзешник запускается через Discord API.
Скачать его можно здесь. Также можете скачать архив (Загрузка начнется сразу)
В папке должно быть 3 файла: ffmpeg.exe, ffplay.exe, ffprobe.exe.
Запускам с явным указанием исполняемого файла ffmpeg.exe:
voice.play(discord.FFmpegPCMAudio(executable="путь\\к\\файлу\\ffmpeg.exe", source = URL, **FFMPEG_OPTIONS))
Я понял, как решить это, достаточно в параметрах указать:
YDL_OPTIONS = {'format': 'worstaudio/best',
'noplaylist': 'True', 'simulate': 'True', 'preferredquality': '192', 'preferredcodec': 'mp3', 'key': 'FFmpegExtractAudio'}