OpenCV.jsを使って、ブラウザに表示されている動画をコマ送りします。
OpenCV.jsのインストール
次のコマンドを使用して、OpenCV.jsのバージョン4.3.0をインストールします。OpenCV.jsの使い方については「Getting Started with Videos」を参照します。
C:\Users\xx>curl https://docs.opencv.org/4.3.0/opencv.js -o opencv.js % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 7890k 100 7890k 0 0 9630k 0 --:--:-- --:--:-- --:--:-- 9633k
コマ送り動画アプリの作成
OpenCVを使って動画をコマ送りするコマ送り動画アプリ「video.html」を作成します。
- 11行目で動画ファイル「TOPSECRET.mp4」を設定します。
- 35行目のstartメソッドで、動画ファイル「TOPSECRET.mp4」の再生を開始します。
- 51行目の一定時間ごとに呼び出されるprocessVideoメソッドで、動画フレームごとの処理を行います。
video.html
<!doctype html> <html> <head> <title>OpenCV Video Examples - Video</title> <link href="app.css" rel="stylesheet"> </head> <body> <h1>OpenCV Video</h1> <video id="video" src="TOPSECRET.mp4" muted width="320" height="240"></video> <canvas id="canvasOutput" width="320" height="240"></canvas> <script async src="opencv.js" type="text/javascript" onload="onCvLoaded();"></script> <script> function onCvLoaded() { console.log('cv', cv); cv.onRuntimeInitialized = onReady; } const video = document.getElementById('video'); const actionBtn = document.getElementById('actionBtn'); const FPS = 30; let stream; let streaming = false; function onReady() { console.log('ready'); let src; let dst; let cap; video.controls = true; video.addEventListener('play', start); video.addEventListener('pause', stop); video.addEventListener('ended', stop); function start() { console.log('playing...'); streaming = true; const width = video.width; const height = video.height; src = new cv.Mat(height, width, cv.CV_8UC4); dst = new cv.Mat(height, width, cv.CV_8UC1); cap = new cv.VideoCapture(video); setTimeout(processVideo, 0); } function stop() { console.log('paused or ended'); streaming = false; } function processVideo() { if (!streaming) { src.delete(); dst.delete(); return; } const begin = Date.now(); cap.read(src) cv.cvtColor(src, dst, cv.COLOR_RGBA2GRAY); cv.imshow('canvasOutput', dst); //const delay = 1000 / (FPS * 1) - (Date.now() - begin); const delay = 1000 / (1) - (Date.now() - begin); setTimeout(processVideo, delay); } } </script> </body> </html>
コマ送り動画アプリの実行
「http://localhost//opencvvideo/video.html」をアクセスして、プレーヤーの再生ボタンをクリックします。プレーヤーの横にコマ送りの動画が再生されます。