VideoWriter で設定する FPS は動画を出力する際の FPS です。
つまり、ビデオプレイヤーが再生するときの FPS です。
25FPS で実際より早く再生されるということは、カメラの撮影 FPS が25より低い値なのだと思います。
カメラの撮影 FPS は VideoCapture のプロパティを取得することで確認できます。
python
1print(cap.get(cv2.CAP_PROP_FPS))
これと同じ値を VideoCapture に設定すれば、おそらく、撮影 FPS と同じ速度で再生できるようになると思います。
追記
すいません。質問内容を勘違いしてました。
撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、まずその処理を含めてループを回したときにどのくらいのFPSが出るのか計測し、その FPS を VideoWriter に設定して、ループ内では 1 / FPS - 処理にかかった秒
分だけスリープすればよいと思います。
python
1import time
2import cv2
3
4filepath = "vtest.avi"
5cap = cv2.VideoCapture(filepath)
6
7FPS = 10
8while True:
9 start = time.time()
10 ret, frame = cap.read()
11 if not ret:
12 break
13 sleep_secs = 1 / fps - (time.time() - start)
14 assert sleep_secs > 0 # マイナスになるようなら、FPS はもっと低い値にする
15 time.sleep(sleep_secs)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/17 07:17 編集
2020/04/16 02:20 編集
2020/04/17 07:17 編集
2020/04/16 03:05
2020/04/16 03:07 編集
2020/04/16 03:41