実現したいこと
動画像をリストの中にある指定の時間にフレームを切り出して保存したいです。リストには時間が入っており、その時間に合わせてフレームを切り出して保存したいのですがリストの小数関連?のエラーの対処がよく分からないです。動画はおよそ30秒ほどでリストは5744行の時間のデータが入っています。また、小数点以下の時刻も守ってフレームを切り出して保存したいです。
リストには以下のように計算されたデータが入っています。
0 2.088480
1 2.092519
2 2.096480
3 2.100537
4 2.108488
...
```time_listの中身 #time_listの作成 #time_list= pd.to_datetime(UNIX TIME)で計算されたデータ #0 days 00:00:02.088479997 この時のtime_listの中身のデータ,一部他の行は省略 from datetime import timedelta time_list=time_list/timedelta(seconds=1)#1秒を基準 print(time_list) print(type(time_list)) #実行結果 0 2.088480 1 2.092519 2 2.096480 3 2.100537 4 2.108488 ... 5739 34.027863 5740 34.035860 5741 34.039846 5742 34.043850 5743 34.047793 Name: time_list Length: 5744, dtype: float64 <class 'pandas.core.series.Series'> #0から5743は行数ですリストの中には入っていません #0days 00:00 などが邪魔だったため消しました、ここまではエラーは出ていません。 #変更したプログラム import cv2 import os def save_frame_range_sec(video_path, dir_path, basename, ext='jpg'): cap = cv2.VideoCapture(video_path) if not cap.isOpened(): return os.makedirs(dir_path, exist_ok=True) base_path = os.path.join(dir_path, basename) digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT)))) fps = cap.get(cv2.CAP_PROP_FPS) fps_inv = 1 / fps for sec in time_list: n = round(fps * sec) cap.set(cv2.CAP_PROP_POS_FRAMES, n) ret, frame = cap.read() if ret: cv2.imwrite( '{}_{}_{:.9f}.{}'.format( base_path, str(n).zfill(digit), n * fps_inv, ext ), frame ) else: return save_frame_range_sec('動画のパス', '保存先のパス', 'sample_img')
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
エラー文
TypeError Traceback (most recent call last)
<ipython-input-3-fbffaa21dda2> in <cell line: 32>()
30 return
31
---> 32 save_frame_range_sec('動画のパス',
33 '保存先のファイルのパス', 'sample_img')
<ipython-input-3-fbffaa21dda2> in save_frame_range_sec(video_path, dir_path, basename, ext)
17
18 for sec in time_list:
---> 19 n = round(fps * sec)
20 cap.set(cv2.CAP_PROP_POS_FRAMES, n)
21 ret, frame = cap.read()
TypeError: type Timedelta doesn't define round method
補足
google colaboratoryで実行しました。
動画とファイルのパスに問題はなかったです。
回答1件
あなたの回答
tips
プレビュー