Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

パソコンの画面を録画する

 パソコンの画面を録画して動画ファイルに保存します。ライブラリPyAutoGUIを使うとパソコン画面のスクリーンショットを取得できます。スクリーンショット画像を連続して取得し、OpenCVで動画ファイルに書き込むことで画面操作を録画します。PyAutoGUIのスクリーンショットではマウスカーソルが消えてしまうので 、PyAutoGUIでマウスの現在位置を取得しその位置にマウスカーソルの絵を描いています。

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 6.4.6
  • Python 3.8.12
  • pyautogui 0.9.53
  • numpy 1.21.5
  • OpenCV 4.5.5
コード

 パソコンの画面サイズは1920x1080ですが画面下のタスクバーを消したいのでキャプチャーサイズを1920x1030としています。動画のレートは15FPS、録画時間を10秒に設定しています。画像一枚ごとの取得時間を計測しそれが1/FPS(15FPSの場合は0.0667秒)よりも小さい場合、時間合わせのためスリープを入れています。環境によると思いますが私のパソコンでは15FPSで実際の処理時間とトントン(スリープが入ったり入らなかったり)、25FPSでは処理が間に合いませんでした。間に合わない場合、例えば20秒の録画時間が10秒の動画となり早送りになってしまいます。
 また、プログラムを実行して少し経ってから録画を開始するため初めに3秒間スリープしています。  

import time
import pyautogui
import cv2
import numpy as np

# 3秒スリープ
time.sleep(3)

# 動画のフレームレート
fps=15 

# 録画時間(秒)
rec_sec = 10 

# キャプチャー領域
cap_region = (0,0, 1920, 1030)

# キャプチャー画像を格納するリスト
frames = []

#画面をキャプチャーし
for i in range(int(fps*rec_sec)):
    # 処理開始時間の取得
    start = time.perf_counter()
    
    # 画面をキャプチャー
    cap = pyautogui.screenshot(region = cap_region)
    
    # pillow形式からOpenCV形式に変換
    img = cv2.cvtColor(np.array(cap), cv2.COLOR_RGB2BGR)

    # マウス位置を取得しマウスの絵を描画
    mx, my = pyautogui.position()
    pts = np.array([[mx, my], [mx, my+25], [mx+5, my+20],
                    [mx+10, my+28],[mx+14, my+27],[mx+11, my+20],
                    [mx+20, my+20]])
    cv2.polylines(img, [pts], True, 30, thickness=1)
    
    # リストにキャプチャー画像を追加
    frames.append(img)
    
    # 処理終了時間の取得
    end = time.perf_counter()
    
    # 1回の処理時間が1フレームより短い場合、不足分スリープ
    if end-start<1/fps:
        time.sleep(1/fps-(end-start))
        
# 保存用動画ファイルのフォーマット設定
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 
out = cv2.VideoWriter('capture.mp4', fourcc, fps, (1920, 1030))         

# キャプチャー画像を読み出して出力動画ファイルに追記
for img in frames:        
    out.write(img) 
    
out.release() # 出力動画ファイルをクローズ   
実行結果

画面を録画した動画ファイルが保存されます。
(下はサイズを縮小してアニメーションGIFに変換したもの)
f:id:T_A_T:20220215223547g:plain

以下のサイトを参考にさせていただきました

機械系エンジニアの備忘録 > 【python】デスクトップ画面をキャプチャ(録画)する簡易ソフトを作る
白猫学生のブログ > マウスカーソルの現在の座標の取得方法

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村