PythonとOpenCVを使用して2台のwebカメラの映像をほぼ同期した状態で保存したいと考えています.
そのために,以下のプログラムを作成したのですが,作成された動画が早送りになってしまいうまくいきません.
Python
1import cv2 2from datetime import date, datetime 3import time 4import os 5 6save_path = "./data/"+str(date.today())+"/two_capture/"+str(datetime.now().hour)+"-"+str(datetime.now().minute) 7 8def main(): 9 10 fps = 30 11 os.makedirs(save_path,exist_ok=True) 12 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 13 14 15 #cap1 = cv2.VideoCapture(0, cv2.CAP_DSHOW) 16 cap1 = cv2.VideoCapture(1) 17 cap1.set(3,1280) 18 cap1.set(4,720) 19 #cap1.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) 20 width1 = int(cap1.get(cv2.CAP_PROP_FRAME_WIDTH)) 21 height1 = int(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT)) 22 writer1 = cv2.VideoWriter(save_path+'/capture1.mp4', fourcc ,fps, (width1, height1)) 23 24 #cap2 = cv2.VideoCapture(1, cv2.CAP_DSHOW) 25 cap2 = cv2.VideoCapture(2) 26 cap2.set(3,1280) 27 cap2.set(4,720) 28 #cap2.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) 29 width2 = int(cap2.get(cv2.CAP_PROP_FRAME_WIDTH)) 30 height2 = int(cap2.get(cv2.CAP_PROP_FRAME_HEIGHT)) 31 writer2 = cv2.VideoWriter(save_path+'/capture2.mp4', fourcc ,fps, (width2, height2)) 32 33 while True: 34 a = time.time() 35 ret1, frame1 = cap1.read() 36 ret2, frame2 = cap2.read() 37 38 cv2.imshow('frame1',frame1) 39 cv2.imshow('frame2',frame2) 40 41 b = 1/(time.time()-a) 42 print("frame1:"+str(b)) 43 44 45 writer1.write(frame1) 46 writer2.write(frame2) 47 48 if time.time()-t0 > 30: 49 break 50 51 52 cap1.release() 53 cap2.release() 54 writer1.release() 55 writer2.release() 56 cv2.destroyAllWindows() 57 58 59if __name__ == "__main__": 60 main()
fpsは次のような値が出力されています.
fpsがフレームごとにかなり異なっているのと,30fpsを超えているのがおかしいと思うので,
こちらも原因を教えていただきたいです.
frame1:47.79452351379377 frame1:43.89229690557666 frame1:50.365090420038904 frame1:17.900279538228453 frame1:18.680455531356753 frame1:18.08872059825595 frame1:18.79875938973449 frame1:17.27081591896399 frame1:19.356598949632186 frame1:16.990962305807052 frame1:19.031626328351166 frame1:20.539673367449378 frame1:18.401962031703132 frame1:18.698860495390267 frame1:18.304627322280364 frame1:18.229208951396647 frame1:17.588245160857458 frame1:17.923380325024677 frame1:19.165112336703967
追記
別の方法として,subprocessでカメラの動画保存プログラムを2つ動かすという方法を試しましたが,
こちらではfpsが100を超えて表示されるにも関わらず,30fpsで早送りになっていました.
しかし,まずfps100になることがおかしいと思うので,こちらも同じ原因だと思います.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。