有没有一种方法可以使用youtube-dl或python3.7中的pafy库直接从YouTube视频中传输音频?

人气:1,012 发布:2022-10-16 标签: stream audio buffer youtube-dl pafy

问题描述

我不想一次又一次地从YouTube视频下载音频,而是希望流式传输音频并直接访问缓冲区中的原始音频字节。换句话说,我希望将原始音频字节存储在RAM中,并在我的Python脚本中使用它们,而不需要完全下载并将音频文件保存在系统上,以减少内存写入周期。YouTube-dl库或pafy库中是否有解决办法来执行相同的操作?

推荐答案

有,我刚刚了解了它的工作原理。 在重写时,您可以使用discord.FFmpegPCMAudio(Url)来执行此操作。您必须记住,您放入到中的URL不一致。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和Async 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

我希望这表明了这一点。

175