From cc2d5def94cd6df5656e8d0e21edb0129180b191 Mon Sep 17 00:00:00 2001 From: Nathan Dan Date: Mon, 3 Aug 2026 12:13:42 -0700 Subject: [PATCH 1/3] 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( From 246ee7dff48cd0486f33e590ad1be243ad285f10 Mon Sep 17 00:00:00 2001 From: Nathan Dan Date: Sun, 16 Aug 2026 19:22:53 -0700 Subject: [PATCH 2/3] fix: update progress bar for frame skips --- scenedetect/scene_manager.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/scenedetect/scene_manager.py b/scenedetect/scene_manager.py index e143560e..1097d6c7 100644 --- a/scenedetect/scene_manager.py +++ b/scenedetect/scene_manager.py @@ -582,9 +582,6 @@ 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: @@ -593,10 +590,8 @@ def detect_scenes( ) # 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) + delta = 1 if prev_position is None else position.frame_num - prev_position.frame_num + progress_bar.update(delta) prev_position = position finally: if progress_bar is not None: From 8a6029fe65fd93a92428598be5a417c28c0b2972 Mon Sep 17 00:00:00 2001 From: Nathan <129796746+nathanmdan@users.noreply.github.com> Date: Sun, 16 Aug 2026 19:31:28 -0700 Subject: [PATCH 3/3] Update scenedetect/scene_manager.py Co-authored-by: Brandon Castellano --- scenedetect/scene_manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scenedetect/scene_manager.py b/scenedetect/scene_manager.py index 1097d6c7..05ba8dc1 100644 --- a/scenedetect/scene_manager.py +++ b/scenedetect/scene_manager.py @@ -590,7 +590,9 @@ def detect_scenes( ) # Increment progress bar by delta of position.frame_num instead of 1 # to handle VFR video where frame count is an approximation. - delta = 1 if prev_position is None else position.frame_num - prev_position.frame_num + delta = ( + 1 if prev_position is None else position.frame_num - prev_position.frame_num + ) progress_bar.update(delta) prev_position = position finally: