今回はPythonのライブラリ「OpenCV」を使って、Webカメラで撮影した動画をMP4形式で保存する方法を紹介する。
Contents
Video I/Oの確認
OpenCVからWebカメラにアクセスする場合、Video I/Oが有効化されている必要があるため、まずは設定値を確認しておこう。
下記のPythonコードを実行すると、設定値の一覧が返される。
print(cv2.getBuildInformation())

Video I/Oの「FFMPEG」がYESとなっていればOK。
コード全文
まずはコード全文を見てもらう。
import cv2 import numpy as np # 0=内蔵カメラ cap = cv2.VideoCapture(0) fps = int(cap.get(cv2.CAP_PROP_FPS)) w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('output.mp4', fourcc, fps, (w, h)) while True: ret, frame = cap.read() cv2.imshow('frame', frame) out.write(frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() out.release() cv2.destroyAllWindows()
ライブラリの読み込み
まず、最初の2行は今回使用するライブラリの読み込み。
import cv2 import numpy as np
Webカメラで取得した映像はNumpy配列として扱われるので、Numpyも読み込んでおく。
内蔵カメラを呼び出し映像を読み込む
OpenCVのVideoCaptureクラスを呼び出す。
引数の0はWebカメラを意味する。
# 0=Webカメラ cap = cv2.VideoCapture(0)
動画の保存形式の設定
変数fps、w、hは名前のとおり、保存する動画のFPS、サイズを意味し、VideoWriterの引数にそれぞれの値を渡す。
fps = int(cap.get(cv2.CAP_PROP_FPS)) w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('output.mp4', fourcc, fps, (w, h))
Webカメラで撮影した映像を表示・保存
映像はwhile文を使って、フレーム単位で取得する。
capオブジェクトのread関数は、正常に読み込めたかどうかをbool値で、そして読み込んだフレームの画像の配列をndarrayで返す。
cv2.imshowで読み込んだフレームを表示し、out.writeで保存をおこなっている。
while True: ret, frame = cap.read() cv2.imshow('frame', frame) out.write(frame) if cv2.waitKey(1) & 0xFF == ord('q'): break
if文のところでは「q」が入力された時点で、while文を抜けるようにしている。
Webカメラを閉じる
処理が終了したら、開いていたWebカメラや動画オブジェクトを閉じて終了。
cap.release() out.release() cv2.destroyAllWindows()
完成したコードを実行すると、Webカメラが起動し映像が表示される。
終了する時は「q」を押す。
するとWebカメラが閉じられ、ディレクトリ内に「output.mp4」が保存されているはずだ。