基於Potplayer類播放器或Action!類錄屏軟件調取攝像頭方式的定時抓拍保存圖像方法小結


前面已經總結了基於Maxmspjitter的相關方法,還有基於Unity的,還有基於Openframeworks的,今天來一篇基於普通軟件的:
1.專業播放器類的軟件,如Potplayer、vlc、obs等
2.專業錄屏軟件,如Action!
要想用他們做自定義式抓拍功能,除了尋找自帶的功能外,要自己手動搭建邏輯,下面就以兩種思路來闡述。


 

基於按鍵精靈類軟件

像按鍵精靈這種軟件就可以輔助我們完成特定邏輯任務,我在B站稍稍總結了一些類似的工具,請參考:
【軟件推薦】有關輔助開發創作的工具小結
在專業播放器類似的軟件中都會有截圖功能,並且設置了對應快捷鍵觸發(也可自定義)。那么可以這樣設想:我用腳本封裝這一操作,即每隔一定時間觸發一次截圖操作,這樣,攝像頭畫面就可以連續得被抓拍到磁盤上了。
使用按鍵精靈就可以輕松封裝該腳本,即模擬操作
針對Potplayer,截圖是【Ctrl+E】,那么在按鍵精靈中可設置腳本如下:

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

中文描述:
image
接着配置該腳本,右鍵屬性,設置循環次數,如果不想針對次數,也可直接設為【循環到按中止鍵為止】,然后確定開啟中止熱鍵(可自定義,默認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程序的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM