def test_get_frame(): with toolbox.video_capture(VIDEO_PATH) as cap: first = 5 second = 8 toolbox.video_jump(cap, first) actual = toolbox.get_frame_time(cap, first) should = toolbox.get_current_frame_time(cap) # should be frame 5 assert actual == should assert actual - 0.16 < 0.01 # 5 -> 8 -> 5 frame = toolbox.get_frame(cap, second, True) assert frame is not None # grab, and recover # the next frame will be 5 # the current frame is 4 assert toolbox.get_current_frame_id(cap) == first - 1 # 5 -> 8 frame = toolbox.get_frame(cap, second) assert frame is not None assert toolbox.get_current_frame_id(cap) == second # cur_time = toolbox.get_current_frame_time(cap) toolbox.get_frame_time(cap, second, True) assert toolbox.get_current_frame_time(cap) == cur_time
def get_frames(self, frame_id_list: typing.List[int], *_, **__) -> typing.List[toolbox.VideoFrame]: """ return a list of VideoFrame, usually works with pick """ out = list() with toolbox.video_capture(self.video.path) as cap: for each_id in frame_id_list: timestamp = toolbox.get_frame_time(cap, each_id) frame = toolbox.get_frame(cap, each_id) out.append(toolbox.VideoFrame(each_id, timestamp, frame)) return out
def test_get_frame(): with toolbox.video_capture(VIDEO_PATH) as cap: first = 5 second = 8 actual = toolbox.get_frame_time(cap, first) should = toolbox.get_current_frame_time(cap) # should be frame 5 assert actual == should # 5 -> 8 -> 5 frame = toolbox.get_frame(cap, second, True) assert frame is not None assert toolbox.get_current_frame_id(cap) == first # 5 -> 8 frame = toolbox.get_frame(cap, second) assert frame is not None assert toolbox.get_current_frame_id(cap) == second # cur_time = toolbox.get_current_frame_time(cap) toolbox.get_frame_time(cap, 10, recover=True) assert cur_time == toolbox.get_current_frame_time(cap)