OpenCVを使用して動画をリアルタイムで10秒ずつに分割して保存したい

前提

OpenCVを使用してリアルタイムでwebカメラから撮影した動画を途切れることなく10秒間の動画として保存するプログラムを作ろうとしています。

しかし、現状では一度撮影した動画を出力をした後にウィンドウが閉じてから再度開くまでに大きなタイムラグが生じているため、連続してクリップを保存できていません。

皆さんのお力を貸してください。

実現したいこと

試したこと

Python

import cv2 import time for i in range(2): cap = cv2.VideoCapture(0) # カメラCh.(ここでは0)を指定 start = time.time() # 動画ファイル保存用の設定 fps = int(cap.get(cv2.CAP_PROP_FPS)) # カメラの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') # 動画保存時のfourcc設定(mp4用) OUTPUT_VIDEO_NAME = 'video' + str(i)+'.mp4' video = cv2.VideoWriter(OUTPUT_VIDEO_NAME, fourcc, fps, (w, h)) # 動画の仕様(ファイル名、fourcc, FPS, サイズ) # 撮影=ループ中にフレームを1枚ずつ取得 while True: ret, frame = cap.read() # フレームを取得 cv2.imshow('frame', frame) # フレームを画面に表示 lap = time.time() video.write(frame) # 動画を1フレームずつ保存する # キー操作があればwhileループを抜ける if cv2.waitKey(1) & 0xFF == ord('q'): break # 10s後にループを抜ける if lap - start >= 10: lap = 0 break # 撮影用オブジェクトとウィンドウの解放 cap.release() cv2.destroyAllWindows()

上記のコードを作成して試してみましたが、次の動画の撮影までに待ち時間が発生してしまい動画間のつながりがありませんでした。
cap.release()とcv2.destroyAllWindows()のインデントを詰めてみても、ウィンドウは開いたままですが動画ファイルを書き出すときは固まってしまって結局待ち時間が発生しました。

どのようにすればこの問題を解決できるのか教えてください。

コメントを投稿

0 コメント