From 8f5c01b56c198095c44a3de0eed7cd044c102800 Mon Sep 17 00:00:00 2001 From: JianMiau Date: Tue, 2 Jun 2026 18:46:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B4=85=E7=87=88=E7=A7=BB=E9=99=A4=E6=AE=B5?= =?UTF-8?q?=E6=94=B9=E7=82=BA=E4=B8=8D=E5=B0=8D=E7=A8=B1=E5=81=8F=E7=A7=BB?= =?UTF-8?q?(=E5=89=8D=E7=A0=8D=E5=BE=8C=E7=95=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 cut_before_stop: 進入紅燈端(速度到 0)移除起點再往前砍,連減速進站一起去掉 - 新增 keep_after_stop: 綠燈起步端(速度從 0 開始跑)移除終點提早結束,多留卡達起步畫面 - 取代原本對稱的 stop_padding;兩者預設皆 2 秒,可於 config.json 調整 - 同步更新 README 參數說明 本次調整由 Claude Opus 4.8 (1M context) 協助處理。 Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 3 ++- auto_remove_redlight.py | 16 +++++++++++----- config.json | 3 ++- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 311376a..f8bef0e 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,8 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV | `min_confidence` | `0.5` | OCR 信心低於此值視為雜訊 | | `smooth_window` | `5` | 中位數濾波視窗(取樣點數) | | `merge_gap` | `3.0` | 相鄰紅燈段間隔小於此秒數即合併 | -| `stop_padding` | `0.0` | 紅燈段頭尾各保留幾秒(讓剪接柔和) | +| `cut_before_stop` | `2.0` | 進入紅燈端(速度到 0)移除起點再往前幾秒,連減速進站一起砍 | +| `keep_after_stop` | `2.0` | 綠燈起步端(速度從 0 開始跑)移除終點提早幾秒,多留卡達起步畫面 | | `min_keep` | `0.8` | 保留片段短於此秒數即丟棄 | | `use_gpu` | `true` | 是否使用 GPU(無 CUDA 時自動退回 CPU) | | `reencode` | `false` | `false` = 無損快剪;`true` = 重新編碼,切點精準到幀但較慢 | diff --git a/auto_remove_redlight.py b/auto_remove_redlight.py index 8f25a82..140eee7 100644 --- a/auto_remove_redlight.py +++ b/auto_remove_redlight.py @@ -104,8 +104,11 @@ SMOOTH_WINDOW = 5 # 中位數濾波視窗(取樣點數,奇數) MERGE_GAP = 3.0 # 兩個紅燈移除段若間隔小於此秒數,視為同一段並合併 (秒) # --- 剪輯 / 輸出參數 ---------------------------------------- -STOP_PADDING = 0.0 # 移除紅燈區段時,頭尾各「保留」幾秒停止畫面 (秒) - # 0 = 完整移除整段停等;設成 0.5 可讓剪接點稍微柔和 +# 紅燈移除段的頭尾「不對稱」微調: +CUT_BEFORE_STOP = 2.0 # 進入紅燈端(速度到 0 那邊): 移除起點再往前幾秒, + # 連減速進站那段也一起砍掉 (秒) +KEEP_AFTER_STOP = 2.0 # 綠燈起步端(速度從 0 開始跑): 移除終點提早幾秒, + # 多留幾秒「卡達起步」的畫面 (秒) MIN_KEEP = 0.8 # 保留片段若短於此秒數就丟棄,避免產生超碎片段 (秒) USE_GPU = True # EasyOCR 是否用 GPU。需 CUDA + GPU 版 PyTorch。 # 設 True 時若沒有 CUDA,EasyOCR 會自動退回 CPU(不會壞) @@ -341,8 +344,10 @@ def find_keep_intervals(samples: List[Sample], duration: float, interval: float # 連續停止超過門檻 → 列為移除(等紅燈) if run_dur >= STOP_SECONDS: - rstart = run_start + STOP_PADDING - rend = run_end - STOP_PADDING + # 進入紅燈端往前多砍 CUT_BEFORE_STOP 秒(連減速進站一起砍); + # 綠燈起步端提早 KEEP_AFTER_STOP 秒結束(多留卡達起步畫面)。 + rstart = max(0.0, run_start - CUT_BEFORE_STOP) + rend = run_end - KEEP_AFTER_STOP if rend > rstart: removals.append((rstart, rend)) i = j + 1 @@ -777,7 +782,8 @@ _CONFIG_KEYS = { "min_confidence": "MIN_CONFIDENCE", "smooth_window": "SMOOTH_WINDOW", "merge_gap": "MERGE_GAP", - "stop_padding": "STOP_PADDING", + "cut_before_stop": "CUT_BEFORE_STOP", + "keep_after_stop": "KEEP_AFTER_STOP", "min_keep": "MIN_KEEP", "use_gpu": "USE_GPU", "reencode": "REENCODE", diff --git a/config.json b/config.json index 735c01c..e40169c 100644 --- a/config.json +++ b/config.json @@ -12,7 +12,8 @@ "min_confidence": 0.5, "smooth_window": 5, "merge_gap": 3.0, - "stop_padding": 0.0, + "cut_before_stop": 2.0, + "keep_after_stop": 2.0, "min_keep": 0.8, "use_gpu": true, "reencode": false,