discord.py и youtube_dl воспроизведение аудио без скачки

как можно воспроизвести аудио в боте при помощи библиотеки youtube_dl, но без установки самого аудио в директорию бота (из-за этой установки невозможно запустить стримы с музыкой по типу lo-fi) и если ни как нельзя, то какую библиотеку можно для этого использовать (существуют же боты по типу MEE6, Rythm, Groove, которые играют стримы спокойно и моментально, а с учётом что запуск аудио моментальный, да и боты очень популярны, то явно это происходит без скачки видео)


Ответы (2 шт):

Автор решения: denisnumb

Делается это так:

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))
→ Ссылка
Автор решения: Maxim Filonenko

Я понял, как решить это, достаточно в параметрах указать:

YDL_OPTIONS = {'format': 'worstaudio/best',
               'noplaylist': 'True', 'simulate': 'True', 'preferredquality': '192', 'preferredcodec': 'mp3', 'key': 'FFmpegExtractAudio'}
→ Ссылка