前面已经总结了基于Maxmspjitter的相关方法,还有基于Unity的,还有基于Openframeworks的,今天来一篇基于普通软件的:

1.专业播放器类的软件,如Potplayer、vlc、obs等

2.专业录屏软件,如Action!

要想用他们做自定义式抓拍功能,除了寻找自带的功能外,要自己手动搭建逻辑,下面就以两种思路来阐述。


基于按键精灵类软件

像按键精灵这种软件就可以辅助我们完成特定逻辑任务,我在B站稍稍总结了一些类似的工具,请参考:

【软件推荐】有关辅助开发创作的工具小结

在专业播放器类似的软件中都会有截图功能,并且设置了对应快捷键触发(也可自定义)。那么可以这样设想:我用脚本封装这一操作,即每隔一定时间触发一次截图操作,这样,摄像头画面就可以连续得被抓拍到磁盘上了。

使用按键精灵就可以轻松封装该脚本,即模拟操作

针对Potplayer,截图是【Ctrl+E】,那么在按键精灵中可设置脚本如下:

Delay 2000
KeyDown "Ctrl", 1
KeyPress "E", 1
KeyUp "Ctrl", 1

中文描述:



接着配置该脚本,右键属性,设置循环次数,如果不想针对次数,也可直接设为【循环到按中止键为止】,然后确定开启中止热键(可自定义,默认F10开启,F12中止)

接下来的工作是打开摄像头采集实时画面,回到Potplayer,打开菜单,点击[打开 - 摄像头\其他设备]即可!当然最好看一看配置参数,同样也在[打开 - 设备设置]中可查看【PS:Potplayer有自带的[连续截图]功能,可以实现此篇文章探讨的功能】。之后试一试【Ctrl+E】组合键功能,检查截图功能是否正常。等一切就绪,按下热键【F10】即可激活脚本作相应操作----相隔2秒截图一次!

类似的做法套用在录屏软件上也同样适用,如专业录屏软件Action!,设定好了热键,开启采集外置设备(webcam),接着就可激活按键精灵脚本,实现功能!

基于VBScript类脚本

VBScript可以很快捷得模拟键鼠操作,当然不只vbs有,很多脚本也可实现,甚至是编译出来的程序只要能实现脚本化按键模拟就可参考该方法。

编辑脚本.vbs:

Dim objws
Set objws=WScript.CreateObject("wscript.shell")
objws.SendKeys "^e"

意为模拟按下组合键【Ctrl+E】一次。这是一个一次性的脚本,执行完毕自动释放,如果想要实现重复,那么还得在外头循环调用它。当然可以再次使用vbs做循环操作,本人暂且对此不熟悉,所以接下来借Processing框架来搭建,这样也能功能模块化,适应之前的知识体系。

编辑.pde:

import java.io.*;

void setup()
{
frameRate(60); //帧速率60
} void draw()
{
if(frameCount % 120 == 0) //帧数检测,每计满120帧调用一次,即为相隔2秒执行一次
Do();
} public static String executeCmd(String command) throws IOException {
//log.info("Execute command : " + command);
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("cmd /c " + command);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
String line = null;
StringBuilder build = new StringBuilder();
while ((line = br.readLine()) != null) {
//log.info(line);
build.append(line);
}
return build.toString();
} void Do()
{
println("try !");
// Runtime rt = Runtime.getRuntime();
// Process p = null;
try
{
executeCmd("start C:\\Users\\Administrator\\Desktop\\1.vbs");
// p =rt.exec(new String[]{"C:\\Users\\Administrator\\Desktop\\1.vbs"});
println("done !"); }catch (Exception e) {
e.printStackTrace();
}
}

相当于使用java语言来封装cmd命令执行,相隔2秒发送一次命令,即执行vbs脚本。剩下的操作跟基于按键精灵的是相似的。这种方法更灵活,更容易拓展,可加更多的逻辑。也同样适用于其他软件(Action!)。

总结

实际上带有快捷键方式控制的相关抓拍录像软件都是可以的,甚至对于按钮抓拍也未尝不可,同样可以把它当成脚本录制然后播放,相隔固定时间点击抓拍。。。这很好地拓宽了解决问题的思路,值得提倡。因为终究目的是实现其逻辑,获得想要的数据,过程没有那么严谨。

而像vlc等软件是自带有相关脚本批处理功能的,它自己就能扩展、实现想要的功能,还有很多稀奇的、特殊的逻辑可以尝试DIY,这也是一大乐趣~


至此,针对自定义抓拍摄像头画面的实现已经基本做完,下面就是几个思路及方法的文章汇总,感谢大家阅读和支持!

【1】Maxmspjitter实现实时抓取摄像头画面并制成序列图 (定时抓拍)

【2】基于Unity调取摄像头方式的定时抓拍保存图像方法小结

【3】基于Openframeworks调取摄像头方式的定时抓拍保存图像方法小结

【4】基于Potplayer类播放器或Action!类录屏软件调取摄像头方式的定时抓拍保存图像方法小结 (此篇)

实质上这些文章只是引出思考问题的道路,点出思路,有相关的方法都可参考并应用和实践,而且不单单是针对摄像头,任何外置设备的录制相关任务都可借类似的思路、方法来自定义控制、获得数据,希望能给予读者一些思考和参考,感谢!

参考文献

[1] https://www.jb51.net/article/80829.html Windows系统中Java调用cmd命令及执行exe程序的方法

基于Potplayer类播放器或Action!类录屏软件调取摄像头方式的定时抓拍保存图像方法小结的更多相关文章

  1. 一个简单的基于 DirectShow 的播放器 2(对话框类)

    上篇文章分析了一个封装DirectShow各种接口的封装类(CDXGraph):一个简单的基于 DirectShow 的播放器  1(封装类) 本文继续上篇文章,分析一下调用这个封装类(CDXGrap ...

  2. Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用

     Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...

  3. 一个简单的基于 DirectShow 的播放器 1(封装类)

    DirectShow最主要的功能就是播放视频,在这里介绍一个简单的基于DirectShow的播放器的例子,是用MFC做的,今后有机会可以基于该播放器开发更复杂的播放器软件. 注:该例子取自于<D ...

  4. 基于ffmpeg网络播放器的教程与总结

    基于ffmpeg网络播放器的教程与总结   一.         概述 为了解决在线无广告播放youku网上的视频.(youku把每个视频切换成若干个小视频). 视频资源解析可以从www.flvcd. ...

  5. vlc播放器设置开机自动全屏播放网络视频流

    因工作需要,要用vlc视频播放器实现开机自动全屏播放某个网络视频流.百度了下,说的都很模糊,经过整理,设置方法如下: 一,添加视频流地址:rtsp://wowzaec2demo.streamlock. ...

  6. 基于 AVPlayer 自定义播放器

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  7. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

    '''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...

  8. 基于VLC的播放器开发

    VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作 ...

  9. 项目源码--Android聚合视频类播放器

    下载源码 技术要点:  1.高效支持主流的视音频格式 2.本地视频的播放与管理 3.聚合电视在线直播 4.聚合优酷.搜狐.乐视.爱奇艺等多种在线视频 5.优质播放,包含播放.暂停,声音.亮度调整等功能 ...

  10. python基础===基于cv2的播放器

    import cv2 import threading import win32gui,win32con class Producer(threading.Thread): ""& ...

随机推荐

  1. 中电金信:加快企业 AI 平台升级,构建金融智能业务新引擎

    ​ 在当今数字化时代的浪潮下,人工智能(AI)技术的蓬勃发展正为各行业带来前所未有的变革与创新契机.尤其是在金融领域,AI 模型的广泛应用已然成为提升竞争力.优化业务流程以及实现智能化转型的关键驱动力 ...

  2. 【Python】【爬虫】【爬狼】002_自定义获取网页源码的函数

    在上一篇笔记([Python][爬虫系列][爬狼]001_urllib_get_获取响应结果页面代码 - 萌狼蓝天 - 博客园 (cnblogs.com/mllt))我们将一个网页,解析为了文档(源码 ...

  3. 抛出 NoClassDefFoundError: javax/validation/constraints/Size 问题的解决方法

    Error:java: java.lang.NoClassDefFoundError: javax/validation/constraints/Size 问题很明显,找不到相关类.我们可以在 pom ...

  4. Qt加载天地图离线api开发包/从官网趴地图js代码/费了九牛二虎之力终于搞定

    一.前言说明 网上关于如何趴天地图离线api文件的文章,只有少量的两三篇,而且几乎没有说全和说对,搞得评论也是一片懵逼,这里不行那你不行,思路可以借鉴就是.索性花了点时间,自己研究了如何从官网一步步趴 ...

  5. Qt编写地图综合应用33-雨量分布

    一.前言 雨量分布图是在区域地图基础上,针对区域中的每个最小单位区域比如县城点位不同颜色显示,最开始做这个封装的时候,并没有提供单独设置每个点颜色的接口,后面经过几个客户的强烈建议,咬咬牙把每个点都可 ...

  6. Qt编写安防视频监控系统42-用户权限

    一.前言 前几年写这个视频监控系统的时候,就规划过要加入用户权限管理,因为不属于急需要的功能一直耽搁至今,近期刚好其他几个项目要需要这个功能,和秘钥认证一样,于是一鼓作气就把这几个功能一块干掉,本次完 ...

  7. Gitea搭建

    关闭注册 找到gitea的配置文件gitea/conf/app.ini,把下面的设置改为true即可: [service] DISABLE_REGISTRATION = true 关闭openid [ ...

  8. Java网约车项目实战:实现抢单功能详解

    在网约车项目中,抢单功能是非常关键的一部分,它决定了司机能否及时响应乘客的订单,提高整个平台的运营效率.本文将详细介绍如何使用Java来实现网约车项目的抢单功能,并提供一个完整的代码示例,以便读者能够 ...

  9. spark (三) hadoop上传文件并运行spark

    目录 1. 上传文件到hdfs 2. 运行wordCount 2.1 spark-shell运行 2.2 spark-submit运行example(stand-alone) 2.3 spark-su ...

  10. spark (二) spark wordCount示例

    目录 实现思路 实现1: scala 基本集合操作方式获取结果 实现2: scala map reduce方式获取结果 实现3: spark 提供的map reduce方式获取结果 FAQ: 实现思路 ...