PythonでWindowsキャプチャ(スクリーンショット)と画面録画を実現する方法【Pillowとcv2の活用】

この記事は約4分で読めます。
スポンサーリンク

会社で画面キャプチャを録画したかったのですが、勝手にツール等をインストールできない環境でなんとかできないかなと考えた結果、Pythonで画面キャプチャをする方法を選択して作ってみたので今回はその方法をシェアします。

ちなみに、自由にインストールできるよって方は、以下で紹介されていました。
ゲームバーというアプリをインストールすればよいようです。
Windowsの標準アプリ?のようで、ショートカットキーで起動できるようです。

Windows 10 の標準機能で画面録画の動画とキャプチャを撮る方法「スクリーンショット」
Windows10/11の標準機能のスクリーンショットが強化され、簡単にパソコンの画面を動画で録画するこができま...

使用ライブラリ

まずは、今回使用したライブラリです。

  • opencv
  • numpy
  • Pillow

それぞれの説明とインストールは方法は、以下の通りです。

opencvのインストール

画像処理をするための有名なライブラリで、Pythonで使用できるようになっています。
インストールは以下のコマンドです。

pip install opencv-python

numpyのインストール

numpyについては以前に記事にしていますので、以下を参照ください。

Pillowのインストール

こちらも画像処理のためのライブラリです。

pip install Pillow

今回使用するライブラリでインストールが必要なものは以上です。

スポンサーリンク
スポンサーリンク

サンプルコード

ではプログラム全体です。

import cv2
import threading
import numpy
import time
import sys
from logging import NullHandler
from PIL import ImageGrab

# 幅
W = 1920
# 高さ
H = 1080
# FPS(Frame Per Second:1秒間に表示するFrame数)
CLIP_FPS = 1.0

stop_flg=False
video = NullHandler

def main( directory ):
    global stop_flg
    global video
    
    record_thread  = threading.Thread( target = record )
    codec = cv2.VideoWriter_fourcc(*'mp4v')
    print("save to " + directory + "/capture.mp4")
    video = cv2.VideoWriter(directory + "/capture.mp4", codec, CLIP_FPS, (W, H))
    record_thread.start()
    while True:
        try:
            time.sleep(1)
        except KeyboardInterrupt:
            stop_flg = True
            print("rec Stop")
            break   
        
    video.release()
    record_thread.join()     
        
def record():
    global stop_flg
    global video
    print("rec Start")
    while stop_flg == False:
        image = ImageGrab.grab()
        image = numpy.array(image) 
        # Convert RGB to BGR 
        image = image[:, :, ::-1].copy()
        cv2.imshow('image',image)
        cv2.waitKey(int(1000/CLIP_FPS)) 
        video.write(image)
        del image
    cv2.destroyAllWindows()

if __name__ == '__main__':
    args = sys.argv
    
    if len(args) != 1:
        main( args[1] )

プログラム実行

プログラムの実行は以下の通り実行します。
capture.pyは今回のプログラムのファイル名で、「DirectoryPath」は録画データを保存するディレクトリです。

python capture.py 「DirectoryPath」

これで実行すると、「DirectoryPath」で指定したディレクトリに”capture.mp4”という名前のファイルが生成されます。

スポンサーリンク

コメント

タイトルとURLをコピーしました