From f3aad8afaac0f0b71bbad5c59dc7b3bb5e5d724d Mon Sep 17 00:00:00 2001 From: Nathan Dan Date: Mon, 3 Aug 2026 12:13:42 -0700 Subject: [PATCH] fix: update progress bar accuracy for VFR --- scenedetect/scene_manager.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scenedetect/scene_manager.py b/scenedetect/scene_manager.py index 5cb46189..e143560e 100644 --- a/scenedetect/scene_manager.py +++ b/scenedetect/scene_manager.py @@ -571,6 +571,7 @@ def detect_scenes( ) decode_thread.start() frame_im = None + prev_position = None logger.info("Detecting scenes...") try: @@ -581,13 +582,22 @@ def detect_scenes( if next_frame is not None: frame_im = next_frame assert frame_im is not None + if prev_position is None: + prev_position = self._start_pos + assert prev_position is not None new_cuts = self._process_frame(position, frame_im, callback) if progress_bar is not None: if new_cuts: progress_bar.set_description( PROGRESS_BAR_DESCRIPTION % len(self._cutting_list), refresh=False ) - progress_bar.update(1 + frame_skip) + # Increment progress bar by delta of position.frame_num instead of 1 + # to handle VFR video where frame count is an approximation. + # First frame increments by 1 as base case. + delta_pos = position.frame_num - prev_position.frame_num + is_first_frame = position.frame_num == 0 + progress_bar.update((1 if is_first_frame else delta_pos) + frame_skip) + prev_position = position finally: if progress_bar is not None: progress_bar.set_description(