動画像からリストの中にある指定の時間にフレームを切り出して保存したい(Python)

実現したいこと

動画像をリストの中にある指定の時間にフレームを切り出して保存したいです。リストには時間が入っており、その時間に合わせてフレームを切り出して保存したいのですがやり方がよく分からないです。動画はおよそ30秒ほどでリストは5744行の時間のデータが入っています。
リストには以下のようにpd.to_datetimeで計算されたデータが入っています。
00:00:02.088479
00:00:02.092518
00:00:02.096479
00:00:02.100536
00:00:02.108487



00:00:34.047792

発生している問題・分からないこと

時間(秒数)で指定
のプログラムを参考に自分なりに変更したのですが実行はできるのですがずっとループを繰り返しています。

time_listは(pd.to_datetime(時刻)-pd.to_datetime(時刻)).dt.timeで計算された時刻が入っています

該当のソースコード

Python

1import cv2 2import os 3 4 5def save_frame_range_sec(video_path, start_sec, stop_sec,6 dir_path, basename, ext='jpg'):7 cap = cv2.VideoCapture(video_path)8 9 if not cap.isOpened():10 return11 12 os.makedirs(dir_path, exist_ok=True)13 base_path = os.path.join(dir_path, basename)14 15 digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))))16 17 fps = cap.get(cv2.CAP_PROP_FPS)18 fps_inv = 1 / fps 19 20 sec = start_sec 21 while sec < stop_sec:22 n = round(fps * sec)23 cap.set(cv2.CAP_PROP_POS_FRAMES, n)24 ret, frame = cap.read()25 if ret:26 cv2.imwrite(27 '{}_{}_{:.9f}.{}'.format(28 base_path, str(n).zfill(digit), n * fps_inv, ext 29 ),30 frame 31 )32 else:33 return34 for i in time_list:35 sec = time_list[i]#time_listは切り取りたい時間のリスト36 37 38 39save_frame_range_sec('動画像のパス',40 2.00000, 34.047792997,41 '保存するファイルのパス', 'sample_video_img')

time_listの中身

10 00:00:02.088479 21 00:00:02.092518 32 00:00:02.096479 43 00:00:02.100536 54 00:00:02.108487 6 ... 75739 00:00:34.027862 85740 00:00:34.035859 95741 00:00:34.039845 105742 00:00:34.043849 115743 00:00:34.047792 12#0から5743は行数ですリストの中には入っていません

試したこと・調べたこと

上記の詳細・結果

while文をずっとループしています

補足

google colaboratoryで実行しました。

コメントを投稿

0 コメント