问题描述
我不想一次又一次地从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
我希望这表明了这一点。