如何从 TS 视频流中截屏?
Posted
技术标签:
【中文标题】如何从 TS 视频流中截屏?【英文标题】:How to make screenshots from TS video stream? 【发布时间】:2019-08-10 07:29:04 【问题描述】:我想每 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 文件。 我应该这样做吗
-
下载TS文件
找到需要的框架
解压
删除 ts 文件?
我应该使用OpenCV 还是有更简单的解决方案?
使用 OpenV
【问题讨论】:
您想要视频中的每张图片,还是只需要一张图片? 每分钟一张图片 【参考方案1】:这是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 了解可用选项。
【讨论】:
谢谢!我可以对 ffmpeg 2.0.2 版做同样的事情吗?这是我的旧 Synology NAS 上预装的版本。它不支持 hide_banner 参数,如果我删除它,它会显示Unable to find a suitable output format for 'invest.ru_%04d.jpg'. invest.ru_%04d.jpg: Invalid argument
。
不客气@LA_。我用于答案的 ffmpeg (windows) 版本是 4.1:ffmpeg -v ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
。您可以在ffmpeg.org/download.html 获取最新版本。如果可能,请使用最新的,它应该可以按预期工作。
恐怕无法升级内置实用程序。或者,如果可以的话,我将不得不为我的 NAS 编译它。但无论如何 - 你帮了我很多,非常感谢!
ffmpeg
在安装方面非常灵活,我的意思是您可以使用所需的 plugins 从源代码编译它,这样它就不会变得沉重在系统上,同样,因为您没有转换为另一种格式,cpu 负载应该是微不足道的。总帐。【参考方案2】:
我认为你可以使用 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
如果您想摆脱声音,可以在“--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”的文件,其中包含第一帧的图像视频。
【讨论】:
以上是关于如何从 TS 视频流中截屏?的主要内容,如果未能解决你的问题,请参考以下文章