前提
OpenCVを使用してリアルタイムでwebカメラから撮影した動画を途切れることなく10秒間の動画として保存するプログラムを作ろうとしています。
しかし、現状では一度撮影した動画を出力をした後にウィンドウが閉じてから再度開くまでに大きなタイムラグが生じているため、連続してクリップを保存できていません。
皆さんのお力を貸してください。
実現したいこと
- 10秒の動画を途切れることなく連続で撮影したい
動作環境
Windows10
Python3.6
Pycharm
試したこと
Python
1import cv2 2import time 3 4for i in range(2): 5 cap = cv2.VideoCapture(0) # カメラCh.(ここでは0)を指定 6 start = time.time() 7 8 # 動画ファイル保存用の設定 9 fps = int(cap.get(cv2.CAP_PROP_FPS)) # カメラのFPSを取得 10 w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # カメラの横幅を取得 11 h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # カメラの縦幅を取得 12 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') # 動画保存時のfourcc設定(mp4用) 13 OUTPUT_VIDEO_NAME = 'video' + str(i)+'.mp4' 14 video = cv2.VideoWriter(OUTPUT_VIDEO_NAME, fourcc, fps, (w, h)) # 動画の仕様(ファイル名、fourcc, FPS, サイズ) 15 16 # 撮影=ループ中にフレームを1枚ずつ取得 17 while True: 18 ret, frame = cap.read() # フレームを取得 19 cv2.imshow('frame', frame) # フレームを画面に表示 20 21 lap = time.time() 22 23 video.write(frame) # 動画を1フレームずつ保存する 24 25 # キー操作があればwhileループを抜ける 26 if cv2.waitKey(1) & 0xFF == ord('q'): 27 break 28 29 # 10s後にループを抜ける 30 if lap - start >= 10: 31 lap = 0 32 break 33 34 # 撮影用オブジェクトとウィンドウの解放 35 cap.release() 36 cv2.destroyAllWindows()
上記のコードを作成して試してみましたが、次の動画の撮影までに待ち時間が発生してしまい動画間のつながりがありませんでした。
cap.release()とcv2.destroyAllWindows()のインデントを詰めてみても、ウィンドウは開いたままですが動画ファイルを書き出すときは固まってしまって結局待ち時間が発生しました。
どのようにすればこの問題を解決できるのか教えてください。