Есть ли способ прямой потоковой передачи аудио из видео YouTube с использованием библиотеки youtube-dl или pafy в python 3.7? - PullRequest
0 голосов
/ 18 марта 2020

Вместо того, чтобы снова и снова загружать аудио из видео на YouTube, я хочу транслировать аудио и напрямую получать доступ к необработанным аудио-байтам из буфера. Другими словами, я хочу сохранить необработанные аудиобайты в ОЗУ и использовать их в моем python сценарии без необходимости полной загрузки и сохранения аудиофайла в системе, чтобы сократить циклы записи в память. Есть ли обходной путь в библиотеке youtube-dl или pafy, чтобы сделать то же самое?

1 Ответ

0 голосов
/ 24 марта 2020

Да, я только что узнал, как это работает. При перезаписи вы можете использовать discord.FFmpegPCMAudio (url) , чтобы сделать это. Следует помнить, что URL, который вы поместили в discord.FFmpegPCMAudio () не ссылка YouTube, которую вы можете скопировать из браузера, например https://www.youtube.com/watch?v=videoid . Из этого кода вы получаете огромный словарь json, в котором содержится «реальный» URL:

# Get a json library with general video information, as well as the url we need to stream the audio.

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
     song_info = ydl.extract_info("https://www.youtube.com/watch?v=INPUTYTLINKHERE", download=False)

Если вы хотите, вы можете распечатать song_info, чтобы увидеть больше информации о видео, например количество просмотров, лайков и многое другое:

print(song_info)

А вот и последний код: (я использую @client и asyn c def on_message (message))

# The "real" url is in song_info["formats"][0]["url].

message.guild.voice_client.play(discord.FFmpegPCMAudio(song_info["formats"][0]["url"]))
message.guild.voice_client.source = discord.PCMVolumeTransformer(message.guild.voice_client.source)
message.guild.voice_client.source.volume = 1

Надеюсь, это прояснилось.

...