diff --git a/auto_remove_redlight.py b/auto_remove_redlight.py index d119a99..8bf9ded 100644 --- a/auto_remove_redlight.py +++ b/auto_remove_redlight.py @@ -361,12 +361,19 @@ def find_keep_intervals(samples: List[Sample], duration: float, interval: float run_end = min(samples[j].t + interval, duration) run_dur = run_end - run_start - # 連續停止超過門檻 → 列為移除(等紅燈) - if run_dur >= STOP_SECONDS: - # 進入紅燈端往前多砍 CUT_BEFORE_STOP 秒(連減速進站一起砍); - # 綠燈起步端提早 KEEP_AFTER_STOP 秒結束(多留卡達起步畫面)。 + # 是否一路停到「影片結尾」(結尾就是 GPS 0) + at_end = run_end >= duration - 1e-3 + + # 列為移除的條件: 達到紅燈門檻,或停到影片結尾(結尾停車一律砍掉) + if run_dur >= STOP_SECONDS or at_end: + # 進入紅燈端往前多砍 CUT_BEFORE_STOP 秒(連減速進站一起砍)。 rstart = max(0.0, run_start - CUT_BEFORE_STOP) - rend = run_end - KEEP_AFTER_STOP + if at_end: + # 停到影片結尾: 沒有起步要留 → 砍到底,不保留 KEEP_AFTER_STOP + rend = run_end + else: + # 一般紅燈: 綠燈起步端提早 KEEP_AFTER_STOP 秒結束(多留卡達起步) + rend = run_end - KEEP_AFTER_STOP if rend > rstart: removals.append((rstart, rend)) i = j + 1