回答編集履歴

5

修正

2020/04/16 01:50

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -29,3 +29,39 @@
29
29
  すいません。質問内容を勘違いしてました。
30
30
 
31
31
  撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、まずその処理を含めてループを回したときにどのくらいのFPSが出るのか計測し、その FPS を VideoWriter に設定して、ループ内では `1 / FPS - 処理にかかった秒` 分だけスリープすればよいと思います。
32
+
33
+
34
+
35
+ ```python
36
+
37
+ import time
38
+
39
+ import cv2
40
+
41
+
42
+
43
+ filepath = "vtest.avi"
44
+
45
+ cap = cv2.VideoCapture(filepath)
46
+
47
+
48
+
49
+ FPS = 10
50
+
51
+ while True:
52
+
53
+ start = time.time()
54
+
55
+ ret, frame = cap.read()
56
+
57
+ if not ret:
58
+
59
+ break
60
+
61
+ sleep_secs = 1 / fps - (time.time() - start)
62
+
63
+ assert sleep_secs > 0 # マイナスになるようなら、FPS はもっと低い値にする
64
+
65
+ time.sleep(sleep_secs)
66
+
67
+ ```

4

修正

2020/04/16 01:50

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -28,6 +28,4 @@
28
28
 
29
29
  すいません。質問内容を勘違いしてました。
30
30
 
31
- 撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、
32
-
33
- `1 / FPS - 処理にかかった秒` 分だけスリープすればよいと思います。
31
+ 撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、まずその処理を含めてループを回したときにどのくらいのFPSが出るのか計測し、その FPS を VideoWriter に設定して、ループ内では `1 / FPS - 処理にかかった秒` 分だけスリープすればよいと思います。

3

修正

2020/04/16 01:41

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -24,6 +24,8 @@
24
24
 
25
25
 
26
26
 
27
+
28
+
27
29
  すいません。質問内容を勘違いしてました。
28
30
 
29
31
  撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、

2

修正

2020/04/16 01:40

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -17,3 +17,15 @@
17
17
 
18
18
 
19
19
  これと同じ値を VideoCapture に設定すれば、おそらく、撮影 FPS と同じ速度で再生できるようになると思います。
20
+
21
+
22
+
23
+ ## 追記
24
+
25
+
26
+
27
+ すいません。質問内容を勘違いしてました。
28
+
29
+ 撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、
30
+
31
+ `1 / FPS - 処理にかかった秒` 分だけスリープすればよいと思います。

1

修正

2020/04/16 01:40

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -13,3 +13,7 @@
13
13
  print(cap.get(cv2.CAP_PROP_FPS))
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+ これと同じ値を VideoCapture に設定すれば、おそらく、撮影 FPS と同じ速度で再生できるようになると思います。