Beispiel #1
0
def _find_voids(
    clip: VideoClip, diff_threshold: float, repetition_threshold: int
) -> List[Tuple[float, float]]:
    cuts: List[Tuple[float, float]] = []
    last_used_frame = None
    last_used_frame_t = 0

    num_similar = 0

    with ui.ProgressBar(f"{clip.filename} - Processing frames", 1) as progress:
        for frame_t, frame in clip.iter_frames(with_times=True, logger=progress):
            if last_used_frame is None:
                last_used_frame = frame
                last_used_frame_t = frame_t
                continue

            diff = np.mean((frame - last_used_frame) ** 2)

            if diff < diff_threshold:
                # there are no signficant differences between this frame and the
                # last used frame

                num_similar += (
                    1  # Count the number of frames in a row which are similar
                )

            else:
                # there was a significant difference between the frames
                if num_similar > repetition_threshold:
                    # there were enough differences in a row
                    cuts.append((last_used_frame_t, frame_t))

                # take note of this frame, and use it as reference for comparison
                last_used_frame = frame
                last_used_frame_t = frame_t
                num_similar = 0

    return cuts