讀不到當0 + 起步門檻8秒 + 剪輯log + 轉場改1秒
- smooth_speeds 改為「讀不到(None/??)一律當 GPS=0」,不再前向補值。 停車時 OCR 常讀不到或把 0 誤讀成小數字,當 0 後孤立誤讀會被中位數吃掉, 根本解決假性『起步』把一整段紅燈切兩半的問題(實測 02 的 05:18~07:45 已合為一段) - depart_seconds 5 -> 8(起步要持續超過 8 秒才算真起步) - transition_duration 0.5 -> 1.0(淡出淡入改 1 秒) - 新增剪輯紀錄 <檔名>_cut_log.txt: 列出每段被剪掉的時間範圍與原因、保留片段 - find_keep_intervals 的 removals 改帶原因(dict),process_one 同步更新 - 移除先前嘗試的 depart_min_speed(改用讀不到當0更乾淨) 本次調整由 Claude Opus 4.8 (1M context) 協助開發與處理。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -87,14 +87,14 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||
| `speed_threshold` | `0` | 時速 ≤ 此值視為停止 |
|
||||
| `min_confidence` | `0.5` | OCR 信心低於此值視為雜訊 |
|
||||
| `smooth_window` | `5` | 中位數濾波視窗(取樣點數) |
|
||||
| `depart_seconds` | `5.0` | 起步門檻(秒):兩段停車間「持續行駛」需超過此秒數才算真正起步而保留;否則(起步 N 秒內又停)視為仍在等待,連同短暫蠕動一起剪掉(處理車陣走走停停),也順便吸收 OCR 雜訊斷點 |
|
||||
| `depart_seconds` | `8.0` | 起步門檻(秒):兩段停車間「持續行駛」需超過此秒數才算真正起步而保留;否則(起步 N 秒內又停)視為仍在等待,連同短暫蠕動一起剪掉(處理車陣走走停停) |
|
||||
| `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` = 重新編碼,切點精準到幀但較慢 |
|
||||
| `transition` | `true` | 剪接點是否加轉場(淡出淡入 + 恆定功率交叉淡化)。**開啟會強制重新編碼**,有 NVIDIA 顯卡時自動用 NVENC 加速 |
|
||||
| `transition_duration` | `0.5` | 轉場長度(秒),畫面與聲音共用以維持同步 |
|
||||
| `transition_duration` | `1.0` | 轉場長度(秒),畫面與聲音共用以維持同步 |
|
||||
| `video_transition` | `fadeblack` | 畫面轉場類型:`fadeblack`=淡出到黑再淡入;`fade`=交叉溶接;其餘見 FFmpeg `xfade` 文件 |
|
||||
| `video_quality` | `30` | 重新編碼畫質(NVENC `-rc vbr -cq`/x264 `-crf`)。數字越大檔案越小、畫質越低。參考(4K 來源約 54Mbps):`28`≈高畫質(檔大)/`30`≈接近原檔/`33`≈省空間/`36`≈更小 |
|
||||
| `volume_boost` | `true` | **音量增益**(Adobe PR「增益/音量」):是否放大音量 |
|
||||
@@ -126,9 +126,12 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||
<影片資料夾>\no_redlight\
|
||||
├─ 01_no_redlight.MOV ← 去紅燈後的成品
|
||||
├─ 01_speeds.csv ← 每秒辨識時速紀錄(檢查用)
|
||||
├─ 01_cut_log.txt ← 剪輯紀錄:哪些片段被剪掉、各自原因
|
||||
└─ ...
|
||||
```
|
||||
|
||||
> `*_cut_log.txt` 會列出每段被剪掉的時間範圍與原因(例如「等紅燈/停車約 42 秒」「停車至影片結尾」),以及保留下來的行駛片段,方便核對。
|
||||
|
||||
---
|
||||
|
||||
## 運作原理
|
||||
@@ -136,9 +139,10 @@ python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||
1. 用 OpenCV 每隔 N 秒抽一幀
|
||||
2. 裁切出畫面上時速表的固定像素區域(ROI)
|
||||
3. 用 EasyOCR 只辨識數字,讀出當下時速
|
||||
4. 對逐秒時速做平滑濾波(補空值 + 中位數),壓掉跳動雜訊
|
||||
5. 時速持續為 0 超過門檻 → 判定為等紅燈,標記移除
|
||||
6. 用 FFmpeg 無損切割保留片段並拼接,輸出去紅燈影片
|
||||
4. 對逐秒時速做平滑濾波(**讀不到一律當 0** + 中位數),壓掉停車時的跳動雜訊與誤讀
|
||||
5. 時速持續為 0 超過門檻 → 判定為等紅燈,標記移除(走走停停會合併、結尾停車砍到底)
|
||||
6. 用 FFmpeg 切割保留片段並拼接(可選淡出淡入轉場 + 音量處理),輸出去紅燈影片
|
||||
7. 另輸出 `*_cut_log.txt` 剪輯紀錄,記下哪些片段被剪、原因
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user