我想从视频流中每隔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文件。我应该这样做
我应该使用OpenCV还是有更简单的解决方案?
使用OpencV
这是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_0002.jpg
等等...每60一次“
笔记:
invest.ru_0002.jpg
正好在invest.ru_0001.jpg
之后60英寸,正如您在右上方的时间戳中看到的那样。-vf
表示ffmpeg
使用视频滤镜fps=1/60
,因此它将每60英寸(src)提取一帧。%Y-%m-%d_%H-%M-%S.jpg
)。请查看ffmpeg
image2 docs以获取可用选项。我想你可以使用VLC来做到这一点。
编辑:看起来非常类似于https://superuser.com/questions/1379361/vlc-and-m3u8-file。以下答案可能不适用于您的文件格式(除非更高版本的VLC正常工作...)。可以看看this question,这可能会给你更多的见解
据我所知,VLC使用TS文件/流进行罚款
获得TS文件后,您应该可以使用vlc来执行屏幕截图。
根据this link和this SO question and answers,可以启动VLC并使其执行屏幕捕获。根据VLC documentation,似乎有可能。
应该在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
如果你想摆脱声音你可以在“--out = 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”的文件,其中包含视频第一帧的图像。