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

Video I/Oの「FFMPEG」がYESとなっていればOK。
コード全文
まずはコード全文を見てもらう。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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行は今回使用するライブラリの読み込み。
1 2 | import cv2 import numpy as np |
Webカメラで取得した映像はNumpy配列として扱われるので、Numpyも読み込んでおく。
内蔵カメラを呼び出し映像を読み込む
OpenCVのVideoCaptureクラスを呼び出す。
引数の0はWebカメラを意味する。
1 2 | # 0=Webカメラ cap = cv2.VideoCapture( 0 ) |
動画の保存形式の設定
変数fps、w、hは名前のとおり、保存する動画のFPS、サイズを意味し、VideoWriterの引数にそれぞれの値を渡す。
1 2 3 4 5 | 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で保存をおこなっている。
1 2 3 4 5 6 7 | 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カメラや動画オブジェクトを閉じて終了。
1 2 3 | cap.release() out.release() cv2.destroyAllWindows() |
完成したコードを実行すると、Webカメラが起動し映像が表示される。
終了する時は「q」を押す。
するとWebカメラが閉じられ、ディレクトリ内に「output.mp4」が保存されているはずだ。
