あらきけいすけのメモ帳

あらきけいすけの雑記帳2

OpenCV+Pythonで動画を録画/再生する(音声はなし, Windows 10/Raspberry Pi 共通)

自分用の覚書。OpenCV*1で動画を録画するためのPythonミニマル・コード*2
サンプル1:PC/ラズパイに接続されたUSBカメラ*3の動画像を表示する。終了はCtrl+C. VideoCapture()の引数の0はビデオデバイスの番号。

import cv2
cap = cv2.VideoCapture(0)
try:
    while True:
        ret, frame = cap.read()
        if ret == True:
            cv2.imshow('a',frame)
        cv2.waitKey(1)

except KeyboardInterrupt:
    cap.release()
    cv2.destroyAllWindows()

サンプル2:PCに接続されたカメラの動画像をディスプレイに表示し、ファイル'test.m4v'に録画する。終了はCtrl+C.([2019.6.24追記]手元のRPiではデスクトップ環境上の Python3(IDLE)を使って実行すると、出力した動画ファイルが常に壊れていた。LXTerminal上で実行すると、再生可能な動画ファイルを出力した。)低速度撮影(time lapse)は2, 12, 20行頭の#を取る

import cv2
#import time

cap = cv2.VideoCapture(0)
fps    = cap.get(cv2.CAP_PROP_FPS)
width  = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

fname  = 'test.m4v'
fmt    = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
size   = (width,height)
writer = cv2.VideoWriter(fname, fmt, fps, size)
#intrvl = 1 #[sec] set time interval of time-lapse recording

try:
    while True:
        ret, frame = cap.read()
        if ret == True:
            cv2.imshow('a',frame)
            writer.write(frame)
            #time.sleep(intrvl) # waiting (for time-lapse)
        cv2.waitKey(1)

except KeyboardInterrupt:
    cap.release()
    cv2.destroyAllWindows()

サンプル3:サンプル2で録画したファイル'test.m4v'を再生する。終了はCtrl+C.

import cv2
import time

vFile  = 'test.m4v'
cap    = cv2.VideoCapture(vFile)
fps    = cap.get(cv2.CAP_PROP_FPS)

try:
    while cap.isOpened():
        ret, frame = cap.read()
        if ret == True:
            cv2.imshow('a',frame)
            time.sleep(1/fps)
        cv2.waitKey(1)

except KeyboardInterrupt:
    cap.release()
    cv2.destroyAllWindows()