audio - 有没有办法在 python 3.7 中使用 youtube-dl 或 pafy 库直接从 youtube 视频流式传输音频?
问题描述
我不想一次又一次地从 youtube 视频下载音频,而是想流式传输音频并直接从缓冲区访问原始音频字节。换句话说,我想将原始音频字节存储在 RAM 中并在我的 python 脚本中使用它们,而不需要在系统上完全下载和保存音频文件以减少内存写入周期。youtube-dl 库或 pafy 库中是否有任何解决方法可以做同样的事情?
解决方案
是的,有,我刚刚发现它是如何工作的。在重写时,您可以使用discord.FFmpegPCMAudio(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 和 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
我希望这清楚了。
推荐阅读
- python - Python中破折号的计时器事件
- python - 如何使用 read_sql 为列匹配和不匹配插入标志
- c# - 试图在两个日期之间显示数据。数据存在是数据库表,它仍然显示没有找到记录
- python - 每天只运行一次的方法
- r - 在 R 中读取 shapefile 时出错
- javascript - 在 chrome 控制台中使用 underscore.js
- bash - 如何在linux中通过两列的组合过滤两列的组合
- .net - 为什么图像不能自己调用 Dispose?
- mysql - json_table 不正确的参数
- ios - 为什么 UIViewPropertyAnimator 没有初始化?