OpenCVを用いてRasberry Pi 4にUSB接続したwebカメラから動画を撮影しようとしています。解像度を変更せず、デフォルトの640, 360で撮影したところ、問題なくスムーズな動画を得ることができました(実際の時間と同じ時間で録画できている)。一方で、capture.setやcv2.VideoWriterで以下のように1280, 720の解像度に変更すると10秒程度録画したとしても動画ファイルとしては数秒に圧縮され、早送りしたような動画になってしまいました。調べたところ、カメラの設定であるcapture.setと出力する動画の設定であるcv2.VideoWriterでのFPSに乖離があることでこのような早送り動画になっているとのことですが、同じFPS 30で設定しているにも関わらず、なぜこのようなことが起きているのかわかりません。webカメラを用いて高解像度の動画を撮影したいので、もし解決方法をご存知であれば、教えていただけると大変助かります。
よろしくお願いいたします。
import cv2 capture = cv2.VideoCapture(0, cv2.CAP_V4L) WIDTH = 1280 HEIGHT = 720 FPS = 30 capture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) capture.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH) capture.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT) capture.set(cv2.CAP_PROP_FPS, FPS) fourcc = cv2.VideoWriter_fourcc('M','J','P','G') videoWriter = cv2.VideoWriter('test.avi', fourcc, 30, (1280, 720)) while (True): ret, frame = capture.read() videoWriter.write(frame) if cv2.waitKey(1) == 27: break capture.release() videoWriter.release() cv2.destroyAllWindows()
