从youtube直播中捕获当前图像

时间:2016-09-09 09:17:57

标签: youtube video-capture image-capture

我想每隔几秒处理一次youtube直播流的输出。在其他人的帮助下,我想出了一个解决方案来捕获图像以便以后处理,但它往往会破坏并且太慢:

youtube-dl --prefer-ffmpeg -f worst "https://www.youtube.com/watch?v=Gy5PC5Auoak" -o - | dd count=32 bs=4096 | ffmpeg -i - -f image2 -frames:v 1 img22.jpeg

(抓取128 KB的流数据并从中提取一帧到jpg)。最快的运行大约需要30秒。其他尝试涉及将youtube-dl管道化为mplayer,但上面显示的方法似乎更有意义,因为它明确限制了接收的数据量。

  • 为什么这么长时间?此外,可能有一些广告出现在前25秒左右的时候?
  • 有更快的解决方案吗?
  • 通过ustream可以获得相等的流,如果这样可以更容易。

我希望结果在树莓派上运行。

1 个答案:

答案 0 :(得分:1)

youtube-dl命令首先将流解析为.m3u8。每当您运行youtube-dl命令时,就会发生这种情况。如果您按一定间隔处理图像,则保存已解析的.m3u8 URL并将其直接与ffmpeg结合使用会更快。

首先,使用-g标志解析.m3u8流并将其保存到文件中,例如stream-url。您只需要执行一次。

youtube-dl -g -f worst "https://www.youtube.com/watch?v=Gy5PC5Auoak" > stream-url

然后,您可以简单地在ffmpeg中使用URL。这是您将按一定间隔运行的命令:

ffmpeg -i $(cat stream-url) -f image2 -frames:v 1 img22.jpeg

我发现.m3u8流也有到期时间。这意味着您必须每隔几个小时更新一次URL。您可以在stream-url的一部分中看到它,并说.../expire/1559856313/...,其中1559856313只是该流将到期的Unix时间。可以使用一个简单的bash脚本进行检查并根据需要进行更新。

我已经在我的Raspberry Pi 2上每10秒运行一次高清流(即'without -f worst'),它似乎工作正常。