From ca69c04ccb962fe45a9e0f9826e9bfd24e360919 Mon Sep 17 00:00:00 2001 From: JianMiau Date: Tue, 2 Jun 2026 20:07:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B5=90=E5=B0=BE=E5=81=9C=E8=BB=8A=E7=A0=8D?= =?UTF-8?q?=E5=88=B0=E5=BA=95:=20=E5=81=9C=E5=88=B0=E5=BD=B1=E7=89=87?= =?UTF-8?q?=E7=B5=90=E5=B0=BE=E4=B8=8D=E7=95=99=20keep=5Fafter=5Fstop=20?= =?UTF-8?q?=E5=B0=BE=E5=B7=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 停車一路停到影片最後(結尾即 GPS 0)時,沒有起步要留 → 移除段砍到影片結尾,不保留卡達秒數 - 結尾的停車不論長短一律砍(即使不到 STOP_SECONDS 門檻) - 已用既有 speeds.csv 重放驗證: 最後一段由 11:59~12:09 延伸到 11:59~12:11 本次調整由 Claude Opus 4.8 (1M context) 協助處理。 Co-Authored-By: Claude Opus 4.8 (1M context) --- auto_remove_redlight.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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