def process(self): ''' Process video ''' video_clip = VideoFileClip(self.video_path) if self.start or self.end: video_clip = video_clip.subclip(self.start, self.end) video_clip = video_clip.set_fps(video_clip.fps // 10) total_frames = round(video_clip.fps * video_clip.duration) print( f'Processing video {self.video_path}, {total_frames} frames, size: {video_clip.size}' ) for frame in tqdm(video_clip.iter_frames()): # It's better if we resizing before crop to keep the image looks more 'scene' h, w, _ = frame.shape aspect_ratio = w / h ratio = h / (self.image_size * 2) w /= ratio h = w / aspect_ratio frame = cv2.resize(frame[..., ::-1], (int(h), int(w))) if self.crop_and_save(frame): break print(f'Saved {self.counter} images to {self.save_dir}')
def test_setfps_withchangeduration(): clip = VideoFileClip("media/big_buck_bunny_432_433.webm").subclip(0, 1) # The sum is unique for each frame, so we can use it as a frame-ID # to check which frames are being preserved clip_sums = [f.sum() for f in clip.iter_frames()] clip2 = clip.set_fps(48, change_duration=True) clip2_sums = [f.sum() for f in clip2.iter_frames()] assert clip2_sums == clip_sums assert clip2.duration == clip.duration / 2 close_all_clips(locals())