我想让我的软件定期(每 5 分钟左右)截取当前正在发生的直播的屏幕截图。我在 Youtube 和 Twitch 上都标记了这个问题,因为这两个网站都在直播,所以适用于其中任何一个的答案都是完美的。
我研究了一些较旧的库,例如 youtube-dl 和 livestreamer,但它们是 CLI,下载文件然后需要使用视频播放器读取。
使用 yt-dlp 和 ffmpeg,您可以通过执行以下命令来获取 YouTube 上直播的最后一帧:
ffmpeg -i "$(yt-dlp -g VIDEO_ID | head -n 1)" -vframes 1 last.jpg
将从 Google 服务器检索实际视频 URL。yt-dlp -g VIDEO_ID | head -n 1
ydYDqZQpim8
测试,检索到的帧比直播上显示的时间晚了不到2秒。
对于 Twitch,您可以使用获取流 API 来获取流的当前缩略图。
Twitch 已经为您完成了提供屏幕截图的工作,因此您只需使用缩略图即可。
例如对
Get Streams
的回应
{
"data": [
{
"id": "41375541868",
"user_id": "459331509",
"user_login": "auronplay",
"user_name": "auronplay",
"game_id": "494131",
"game_name": "Little Nightmares",
"type": "live",
"title": "hablamos y le damos a Little Nightmares 1",
"viewer_count": 78365,
"started_at": "2021-03-10T15:04:21Z",
"language": "es",
"thumbnail_url": "https://static-cdn.jtvnw.net/previews-ttv/live_user_auronplay-{width}x{height}.jpg",
"tag_ids": [
"d4bb9c58-2141-4881-bcdc-3fe0505457d1"
],
"is_mature": false
},
只要抓住
thumbnail_url
并在末端扔一个缓存破坏器,你就得到了一张图像。不需要 FFMPEG 或 yt-dl schnanigans