質問編集履歴
7
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
|
22
22
|
from datetime import timedelta
|
23
23
|
time_list=time_list/timedelta(seconds=1)#1秒を基準
|
24
|
+
print(time_list)
|
24
25
|
print(type(time_list))
|
25
26
|
|
26
27
|
#実行結果
|
6
プログラムを間違えたため
test
CHANGED
File without changes
|
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
#0 days 00:00:02.088479997 この時のtime_listの中身のデータ,一部他の行は省略
|
21
21
|
|
22
22
|
from datetime import timedelta
|
23
|
-
|
23
|
+
time_list=time_list/timedelta(seconds=1)#1秒を基準
|
24
24
|
print(type(time_list))
|
25
25
|
|
26
26
|
#実行結果
|
5
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
```time_listの中身
|
18
18
|
#time_listの作成
|
19
19
|
#time_list= pd.to_datetime(UNIX TIME)で計算されたデータ
|
20
|
-
#0 days 00:00:02.088479997 この時のtime_listの中身のデータ
|
20
|
+
#0 days 00:00:02.088479997 この時のtime_listの中身のデータ,一部他の行は省略
|
21
21
|
|
22
22
|
from datetime import timedelta
|
23
23
|
print(time_list/timedelta(seconds=1))#1秒を基準
|
4
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
```time_listの中身
|
18
18
|
#time_listの作成
|
19
19
|
#time_list= pd.to_datetime(UNIX TIME)で計算されたデータ
|
20
|
-
#0 days 00:00:02.088479997 この時のtime_listの中身の
|
20
|
+
#0 days 00:00:02.088479997 この時のtime_listの中身のデータの一部他の行は省略
|
21
21
|
|
22
22
|
from datetime import timedelta
|
23
23
|
print(time_list/timedelta(seconds=1))#1秒を基準
|
@@ -39,7 +39,7 @@
|
|
39
39
|
<class 'pandas.core.series.Series'>
|
40
40
|
|
41
41
|
#0から5743は行数ですリストの中には入っていません
|
42
|
-
#0day などが邪魔だったため消しました、ここまではエラーは出ていません。
|
42
|
+
#0days 00:00 などが邪魔だったため消しました、ここまではエラーは出ていません。
|
43
43
|
|
44
44
|
|
45
45
|
|
3
質問とコードの変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
### 実現したいこと
|
2
|
-
動画像をリストの中にある指定の時間にフレームを切り出して保存したいです。リストには時間が入っており、その時間に合わせてフレームを切り出して保存したいのですが
|
2
|
+
動画像をリストの中にある指定の時間にフレームを切り出して保存したいです。リストには時間が入っており、その時間に合わせてフレームを切り出して保存したいのですがリストの小数関連?のエラーの対処がよく分からないです。動画はおよそ30秒ほどでリストは5744行の時間のデータが入っています。また、小数点以下の時刻も守ってフレームを切り出して保存したいです。
|
3
|
+
|
3
4
|
リストには以下のように計算されたデータが入っています。
|
4
5
|
0 2.088480
|
5
6
|
1 2.092519
|
@@ -9,6 +10,39 @@
|
|
9
10
|
...
|
10
11
|
|
11
12
|
```
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
```time_listの中身
|
18
|
+
#time_listの作成
|
19
|
+
#time_list= pd.to_datetime(UNIX TIME)で計算されたデータ
|
20
|
+
#0 days 00:00:02.088479997 この時のtime_listの中身の最初のデータ、次のデータ以降は省略
|
21
|
+
|
22
|
+
from datetime import timedelta
|
23
|
+
print(time_list/timedelta(seconds=1))#1秒を基準
|
24
|
+
print(type(time_list))
|
25
|
+
|
26
|
+
#実行結果
|
27
|
+
0 2.088480
|
28
|
+
1 2.092519
|
29
|
+
2 2.096480
|
30
|
+
3 2.100537
|
31
|
+
4 2.108488
|
32
|
+
...
|
33
|
+
5739 34.027863
|
34
|
+
5740 34.035860
|
35
|
+
5741 34.039846
|
36
|
+
5742 34.043850
|
37
|
+
5743 34.047793
|
38
|
+
Name: time_list Length: 5744, dtype: float64
|
39
|
+
<class 'pandas.core.series.Series'>
|
40
|
+
|
41
|
+
#0から5743は行数ですリストの中には入っていません
|
42
|
+
#0day などが邪魔だったため消しました、ここまではエラーは出ていません。
|
43
|
+
|
44
|
+
|
45
|
+
|
12
46
|
#変更したプログラム
|
13
47
|
import cv2
|
14
48
|
import os
|
@@ -44,30 +78,6 @@
|
|
44
78
|
save_frame_range_sec('動画のパス',
|
45
79
|
'保存先のパス', 'sample_img')
|
46
80
|
|
47
|
-
|
48
|
-
|
49
|
-
```time_listの中身
|
50
|
-
#time_listの作成
|
51
|
-
#time_list= pd.to_datetime(UNIX TIME)で計算されたデータ
|
52
|
-
#0 days 00:00:02.088479997 この時のtime_listの中身の最初のデータ、次のデータはほとんど同じ為省略
|
53
|
-
|
54
|
-
from datetime import timedelta
|
55
|
-
print(time_list/timedelta(seconds=1))#1秒を基準
|
56
|
-
print(type(time_list))
|
57
|
-
|
58
|
-
0 2.088480
|
59
|
-
1 2.092519
|
60
|
-
2 2.096480
|
61
|
-
3 2.100537
|
62
|
-
4 2.108488
|
63
|
-
...
|
64
|
-
5739 34.027863
|
65
|
-
5740 34.035860
|
66
|
-
5741 34.039846
|
67
|
-
5742 34.043850
|
68
|
-
5743 34.047793
|
69
|
-
#0から5743は行数ですリストの中には入っていません
|
70
|
-
#0day などが邪魔だったため消した
|
71
81
|
```
|
72
82
|
|
73
83
|
### 試したこと・調べたこと
|
2
実現したいことの文章の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
### 実現したいこと
|
2
2
|
動画像をリストの中にある指定の時間にフレームを切り出して保存したいです。リストには時間が入っており、その時間に合わせてフレームを切り出して保存したいのですがやり方がよく分からないです。動画はおよそ30秒ほどでリストは5744行の時間のデータが入っています。
|
3
|
-
リストには以下のように
|
3
|
+
リストには以下のように計算されたデータが入っています。
|
4
4
|
0 2.088480
|
5
5
|
1 2.092519
|
6
6
|
2 2.096480
|
1
time_listの中身を変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,34 +1,19 @@
|
|
1
1
|
### 実現したいこと
|
2
2
|
動画像をリストの中にある指定の時間にフレームを切り出して保存したいです。リストには時間が入っており、その時間に合わせてフレームを切り出して保存したいのですがやり方がよく分からないです。動画はおよそ30秒ほどでリストは5744行の時間のデータが入っています。
|
3
3
|
リストには以下のようにpd.to_datetimeで計算されたデータが入っています。
|
4
|
-
0
|
4
|
+
0 2.088480
|
5
|
-
|
5
|
+
1 2.092519
|
6
|
-
|
6
|
+
2 2.096480
|
7
|
-
|
7
|
+
3 2.100537
|
8
|
-
|
8
|
+
4 2.108488
|
9
|
-
|
9
|
+
...
|
10
|
-
:
|
11
|
-
:
|
12
|
-
00:00:34.047792
|
13
10
|
|
14
|
-
### 発生している問題・分からないこと
|
15
|
-
[時間(秒数)で指定](https://note.nkmk.me/python-opencv-video-to-still-image/)
|
16
|
-
のプログラムを参考に自分なりに変更したのですが実行はできるのですがずっとループを繰り返しています。
|
17
|
-
|
18
|
-
time_listは(pd.to_datetime(時刻)-pd.to_datetime(時刻)).dt.timeで計算された時刻が入っています
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
### 該当のソースコード
|
24
|
-
|
25
|
-
```
|
11
|
+
```
|
12
|
+
#変更したプログラム
|
26
13
|
import cv2
|
27
14
|
import os
|
28
15
|
|
29
|
-
|
30
|
-
def save_frame_range_sec(video_path,
|
16
|
+
def save_frame_range_sec(video_path, dir_path, basename, ext='jpg'):
|
31
|
-
dir_path, basename, ext='jpg'):
|
32
17
|
cap = cv2.VideoCapture(video_path)
|
33
18
|
|
34
19
|
if not cap.isOpened():
|
@@ -42,43 +27,47 @@
|
|
42
27
|
fps = cap.get(cv2.CAP_PROP_FPS)
|
43
28
|
fps_inv = 1 / fps
|
44
29
|
|
45
|
-
sec = start_sec
|
46
|
-
|
30
|
+
for sec in time_list:
|
47
|
-
|
31
|
+
n = round(fps * sec)
|
48
|
-
|
32
|
+
cap.set(cv2.CAP_PROP_POS_FRAMES, n)
|
49
|
-
|
33
|
+
ret, frame = cap.read()
|
50
|
-
|
34
|
+
if ret:
|
51
|
-
|
35
|
+
cv2.imwrite(
|
52
|
-
|
36
|
+
'{}_{}_{:.9f}.{}'.format(
|
53
|
-
|
37
|
+
base_path, str(n).zfill(digit), n * fps_inv, ext
|
54
38
|
),
|
55
39
|
frame
|
56
40
|
)
|
57
|
-
|
41
|
+
else:
|
58
|
-
|
42
|
+
return
|
59
|
-
|
43
|
+
|
60
|
-
|
44
|
+
save_frame_range_sec('動画のパス',
|
45
|
+
'保存先のパス', 'sample_img')
|
61
46
|
|
62
47
|
|
63
48
|
|
49
|
+
```time_listの中身
|
50
|
+
#time_listの作成
|
64
|
-
|
51
|
+
#time_list= pd.to_datetime(UNIX TIME)で計算されたデータ
|
65
|
-
2.00000, 34.047792997,
|
66
|
-
|
52
|
+
#0 days 00:00:02.088479997 この時のtime_listの中身の最初のデータ、次のデータはほとんど同じ為省略
|
67
|
-
```
|
68
53
|
|
54
|
+
from datetime import timedelta
|
55
|
+
print(time_list/timedelta(seconds=1))#1秒を基準
|
69
|
-
|
56
|
+
print(type(time_list))
|
57
|
+
|
70
|
-
0
|
58
|
+
0 2.088480
|
71
|
-
1
|
59
|
+
1 2.092519
|
72
|
-
2
|
60
|
+
2 2.096480
|
73
|
-
3
|
61
|
+
3 2.100537
|
74
|
-
4
|
62
|
+
4 2.108488
|
75
|
-
|
63
|
+
...
|
76
|
-
5739
|
64
|
+
5739 34.027863
|
77
|
-
5740
|
65
|
+
5740 34.035860
|
78
|
-
5741
|
66
|
+
5741 34.039846
|
79
|
-
5742
|
67
|
+
5742 34.043850
|
80
|
-
5743
|
68
|
+
5743 34.047793
|
81
69
|
#0から5743は行数ですリストの中には入っていません
|
70
|
+
#0day などが邪魔だったため消した
|
82
71
|
```
|
83
72
|
|
84
73
|
### 試したこと・調べたこと
|
@@ -88,9 +77,25 @@
|
|
88
77
|
- [ ] その他
|
89
78
|
|
90
79
|
##### 上記の詳細・結果
|
80
|
+
エラー文
|
81
|
+
TypeError Traceback (most recent call last)
|
82
|
+
<ipython-input-3-fbffaa21dda2> in <cell line: 32>()
|
91
|
-
|
83
|
+
30 return
|
84
|
+
31
|
85
|
+
---> 32 save_frame_range_sec('動画のパス',
|
86
|
+
33 '保存先のファイルのパス', 'sample_img')
|
87
|
+
|
88
|
+
<ipython-input-3-fbffaa21dda2> in save_frame_range_sec(video_path, dir_path, basename, ext)
|
89
|
+
17
|
90
|
+
18 for sec in time_list:
|
91
|
+
---> 19 n = round(fps * sec)
|
92
|
+
20 cap.set(cv2.CAP_PROP_POS_FRAMES, n)
|
93
|
+
21 ret, frame = cap.read()
|
94
|
+
|
95
|
+
TypeError: type Timedelta doesn't define __round__ method
|
92
96
|
|
93
97
|
### 補足
|
94
98
|
google colaboratoryで実行しました。
|
99
|
+
動画とファイルのパスに問題はなかったです。
|
95
100
|
|
96
101
|
|