動画をキャプチャーしてタイムラプス動画を作成する
動画をキャプチャーしてタイムラプス動画を作成します。ライブラリPyAutoGUIを使うとパソコン画面のスクリーンショットを取得できます。動画を再生しているパソコンのスクリーンショット画像を一定間隔で取得し、OpenCVで動画ファイルに書き込むことでタイムラプス動画を作成します。
関連記事
環境
- windows10 home
- Anaconda 3/ jupyter notebook 6.4.6
- Python 3.10.4
- pyautogui 0.9.53
- numpy 1.21.5
- OpenCV 4.5.5
コード
コードを実行すると、まず12秒間スリープします。その間に取り込みたい動画を全画面表示します。その後0.5秒おきに全画面(ここでは1920x1080ピクセル)をキャプチャーしリストに格納します。360画面をキャプチャーした後、リストから1画像ずつ取り出しmp4形式で1920x1080、30fpsの動画を作成します。
なお、作成したタイムラプス動画の用途によりますが元動画の著作権には注意が必要です。このプログラムの動作確認にはYoutubeの
Unbelievable Most Beautiful Waterfalls | Drone | Free stock footage | Free HD Videos - no copyright
を用いています。こちらは「動画そのものを売る以外は自由に使用してかまわない」と説明されており著作権の点で問題がありません。
import time import pyautogui import cv2 import numpy as np # 12秒スリープ time.sleep(12) # 動画のフレームレート fps=30 # キャプチャー領域 cap_region = (0,0, 1920, 1080) # キャプチャー画像を格納するリスト frames = [] # 0.5秒おきに画面をキャプチャーしリストに保存 for i in range(360): # 画面をキャプチャー cap = pyautogui.screenshot(region = cap_region) # pillow形式からOpenCV形式に変換 img = cv2.cvtColor(np.array(cap), cv2.COLOR_RGB2BGR) # リストにキャプチャー画像を追加 frames.append(img) # 0.5秒スリープ time.sleep(0.5) # 保存用動画ファイルのフォーマット設定 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('timelapse.mp4', fourcc, fps, (1920, 1080)) # キャプチャー画像を読み出して出力動画ファイルに追記 for img in frames: out.write(img) # 出力動画ファイルをクローズ out.release()
実行結果
動画からタイムラプス動画が作成されます。
以下のサイトを参考にさせていただきました
機械系エンジニアの備忘録 > 【python】デスクトップ画面をキャプチャ(録画)する簡易ソフトを作る