如何从TS视频流制作屏幕截图?

时间:2019-03-19 17:15:53

标签: python opencv video-streaming screenshot

我想从视频流中每1分钟制作一次屏幕截图。视频流以m3u8 file的形式提供:

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:112076
#EXT-X-PROGRAM-DATE-TIME:2019-03-19T16:16:53Z
#EXTINF:6.000, 2019/03/19/16/16/53-06000.ts
#EXTINF:6.000, 2019/03/19/16/16/59-06000.ts
#EXTINF:6.000, 2019/03/19/16/17/05-06000.ts
#EXTINF:6.000, 2019/03/19/16/17/11-06000.ts

我找到了一个库来解析它-https://github.com/globocom/m3u8。但是我不明白如何将TS视频流转换为单个jpeg文件。 我应该

  1. 下载TS文件
  2. 找到所需的框架
  3. 提取
  4. 删除ts文件?

我应该使用OpenCV还是有更简单的解决方案?

使用OpenV

2 个答案:

答案 0 :(得分:2)

这是ffmpeg的工作。
要每分钟从playlist捕获一帧,可以使用:

ffmpeg -i "http://cam.l-invest.ru/nagatinskaya4/tracks-v1/index.m3u8" -vf fps=1/60 invest.ru_%04d.jpg -hide_banner

以上内容将产生:

invest.ru_0001.jpg

invest.ru_0001.jpg

invest.ru_0002.jpg

invest.ru_0002.jpg

以此类推...每60英寸一次


注释

    如您在右上角的时间戳所示,
  1. invest.ru_0002.jpg恰好在invest.ru_0001.jpg之后60英寸处拍摄。

  2. -vf表示ffmpeg使用视频滤镜fps=1/60,因此它将每60英寸(src)提取一帧。

    < / li>
  3. 如果需要,可以更改输出格式和文件名结构(例如:%Y-%m-%d_%H-%M-%S.jpg)。请检查ffmpeg image2 docs中的可用选项。

答案 1 :(得分:0)

我认为您可以使用VLC来做到这一点。

编辑:看起来与https://superuser.com/questions/1379361/vlc-and-m3u8-file非常相似。 以下答案可能不适用于您的文件格式(除非更高版本的VLC正常工作...)。可以看看this question,这可能会给您带来更多的见识

据我所知,VLC可与TS文件/流一起正常工作


拥有TS文件后,您应该可以使用vlc来执行屏幕截图。

根据this linkthis SO question and answers,可以启动VLC并使其执行屏幕捕获。 根据{{​​3}},这似乎是可能的。

应该在win / linux / mac上工作。

我已经测试过了,我需要联系我的个人计算机才能做到这一点。

报价:

  

在新的VLC版本(VLC 1.1.0及更高版本)中,缩略图是通过场景视频过滤器生成的。

     

vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit

     

如果要消除声音,可以在“ --vout = dummy”旁边添加“ --aout = dummy”。

     

对于较旧的VLC版本(1.0.0及更低版本),可以使用图像输出模块来完成

     

vlc C:\video\to\process.mp4 -V image --start-time 0 --stop-time 1 --image-out-format jpg --image-out-ratio 24 --image-out-prefix snap vlc://quit

     

它的作用:

     

运行VLC媒体播放器时,它会“播放”视频一秒钟,而实际上并未在屏幕上显示视频,然后退出,留下名为“ snap000000.jpg”的文件,其中包含该视频第一帧的图像。视频。