初版: 機車第一人稱影片自動去紅燈工具
- OCR 辨識畫面上的 GPS 時速表,連續停車超過門檻即判定為紅燈並無損剪除 - 中位數平滑濾波 + 補空值 + 相鄰段合併,抗 OCR 在 0 與雜訊間跳動的問題 - 支援 GPU(CUDA) 加速、互動式選單(空白鍵多選)、config.json 設定檔 - 附中文 README 與互動啟動批次檔 本工具由 Claude Opus 4.8 (1M context) 協助開發與處理。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+21
@@ -0,0 +1,21 @@
|
|||||||
|
# 測試暫存(內含大型測試影片,切勿上傳)
|
||||||
|
_test_tmp/
|
||||||
|
|
||||||
|
# Python 快取
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# 預覽圖
|
||||||
|
preview_*.png
|
||||||
|
|
||||||
|
# 輸出成品與紀錄
|
||||||
|
no_redlight/
|
||||||
|
*_speeds.csv
|
||||||
|
|
||||||
|
# 影片檔
|
||||||
|
*.MOV
|
||||||
|
*.mov
|
||||||
|
*.mp4
|
||||||
|
*.MP4
|
||||||
|
*.wav
|
||||||
|
*.WAV
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
# Redlight Remover — 機車第一人稱影片自動去紅燈工具
|
||||||
|
|
||||||
|
針對「安全帽第一人稱機車影片」,自動偵測等紅燈的停車片段並剪掉,輸出無損的去紅燈影片。
|
||||||
|
程式用 OCR 讀取畫面上的 GPS 時速表,當時速持續為 0 超過設定秒數即判定為紅燈,再用 FFmpeg 無損切割拼接。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 功能特色
|
||||||
|
|
||||||
|
- 🎯 **自動偵測紅燈**:逐秒 OCR 辨識時速,連續停車超過門檻即視為等紅燈
|
||||||
|
- ✂️ **無損剪輯**:用 FFmpeg `-c copy` 串流複製,畫質零損失、速度快
|
||||||
|
- 🧹 **抗雜訊平滑**:中位數濾波 + 補空值 + 相鄰段合併,解決停車時 OCR 在 0 與雜訊間跳動的問題
|
||||||
|
- ⚡ **GPU 加速**:支援 NVIDIA CUDA,OCR 大幅加速
|
||||||
|
- 🖱️ **互動選單**:批次檔啟動,↑↓ 選資料夾、空白鍵勾選影片
|
||||||
|
- ⚙️ **設定檔**:所有參數集中在 `config.json`,免改程式碼
|
||||||
|
- 📊 **辨識紀錄**:每支影片輸出 `*_speeds.csv`,方便檢查 OCR 結果
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 環境需求
|
||||||
|
|
||||||
|
- **Python 3.x**
|
||||||
|
- **FFmpeg / ffprobe**(需加入系統 PATH)
|
||||||
|
- Python 套件:`easyocr`、`opencv-python`、`numpy`
|
||||||
|
- (選用)NVIDIA 顯卡 + CUDA 版 PyTorch 以啟用 GPU
|
||||||
|
|
||||||
|
### 安裝
|
||||||
|
|
||||||
|
```bat
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
FFmpeg 可用 winget 安裝:
|
||||||
|
|
||||||
|
```bat
|
||||||
|
winget install Gyan.FFmpeg
|
||||||
|
```
|
||||||
|
|
||||||
|
啟用 GPU(需 NVIDIA 顯卡),安裝對應 CUDA 版 PyTorch,例如:
|
||||||
|
|
||||||
|
```bat
|
||||||
|
pip install --force-reinstall torch torchvision --index-url https://download.pytorch.org/whl/cu128
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
### 方式一:互動批次檔(推薦)
|
||||||
|
|
||||||
|
雙擊 `啟動.bat`,依選單操作:
|
||||||
|
|
||||||
|
1. 選 `[1]` 預覽 ROI:先確認時速表框選位置(第一次使用建議先做)
|
||||||
|
2. 選 `[2]` 開始處理:
|
||||||
|
- ↑↓ 移動、Enter 選擇要處理的資料夾
|
||||||
|
- ↑↓ 移動、**空白鍵勾選**要去紅燈的影片、Enter 開始
|
||||||
|
- 處理完成,成品輸出到該資料夾的 `no_redlight\` 子資料夾
|
||||||
|
|
||||||
|
### 方式二:命令列
|
||||||
|
|
||||||
|
```bat
|
||||||
|
:: 預覽 ROI(確認時速表位置)
|
||||||
|
python auto_remove_redlight.py 20260516 --preview
|
||||||
|
|
||||||
|
:: 處理整個資料夾
|
||||||
|
python auto_remove_redlight.py 20260516
|
||||||
|
|
||||||
|
:: 處理單一影片
|
||||||
|
python auto_remove_redlight.py E:\videos\20260516\01.MOV
|
||||||
|
|
||||||
|
:: 處理多支指定影片
|
||||||
|
python auto_remove_redlight.py 01.MOV 03.MOV 05.MOV
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 設定檔 `config.json`
|
||||||
|
|
||||||
|
所有常用參數集中於此,每次執行會自動讀取(檔案不存在時會自動產生預設值)。
|
||||||
|
|
||||||
|
| 參數 | 預設值 | 說明 |
|
||||||
|
|------|--------|------|
|
||||||
|
| `roi` | `[3300, 1770, 300, 140]` | 時速表在畫面上的位置 `[x, y, 寬, 高]` |
|
||||||
|
| `sample_interval` | `1.0` | 取樣間隔(秒),每幾秒辨識一次;越小越精準但越慢 |
|
||||||
|
| `progress_every` | `60` | 進度回報間隔(秒),純顯示用,不影響效能 |
|
||||||
|
| `stop_seconds` | `4.0` | 連續停車超過幾秒判定為紅燈 |
|
||||||
|
| `speed_threshold` | `0` | 時速 ≤ 此值視為停止 |
|
||||||
|
| `min_confidence` | `0.5` | OCR 信心低於此值視為雜訊 |
|
||||||
|
| `smooth_window` | `5` | 中位數濾波視窗(取樣點數) |
|
||||||
|
| `merge_gap` | `3.0` | 相鄰紅燈段間隔小於此秒數即合併 |
|
||||||
|
| `stop_padding` | `0.0` | 紅燈段頭尾各保留幾秒(讓剪接柔和) |
|
||||||
|
| `min_keep` | `0.8` | 保留片段短於此秒數即丟棄 |
|
||||||
|
| `use_gpu` | `true` | 是否使用 GPU(無 CUDA 時自動退回 CPU) |
|
||||||
|
| `reencode` | `false` | `false` = 無損快剪;`true` = 重新編碼,切點精準到幀但較慢 |
|
||||||
|
| `base_dir` | `E:\\videos` | 影片根目錄 |
|
||||||
|
|
||||||
|
> 參數優先順序:**命令列參數 > config.json > 程式內建預設**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 輸出結果
|
||||||
|
|
||||||
|
成品放在來源資料夾的 `no_redlight\` 子資料夾,原始影片不會被改動:
|
||||||
|
|
||||||
|
```
|
||||||
|
<影片資料夾>\no_redlight\
|
||||||
|
├─ 01_no_redlight.MOV ← 去紅燈後的成品
|
||||||
|
├─ 01_speeds.csv ← 每秒辨識時速紀錄(檢查用)
|
||||||
|
└─ ...
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 運作原理
|
||||||
|
|
||||||
|
1. 用 OpenCV 每隔 N 秒抽一幀
|
||||||
|
2. 裁切出畫面上時速表的固定像素區域(ROI)
|
||||||
|
3. 用 EasyOCR 只辨識數字,讀出當下時速
|
||||||
|
4. 對逐秒時速做平滑濾波(補空值 + 中位數),壓掉跳動雜訊
|
||||||
|
5. 時速持續為 0 超過門檻 → 判定為等紅燈,標記移除
|
||||||
|
6. 用 FFmpeg 無損切割保留片段並拼接,輸出去紅燈影片
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 注意事項
|
||||||
|
|
||||||
|
- 不同影片的儀表疊加位置可能不同,換來源時請先用 `--preview` 確認並調整 `roi`
|
||||||
|
- 無損模式切點會對齊最近的關鍵幀,實際剪接點可能 ±1~2 秒(對去紅燈用途通常足夠)
|
||||||
|
- 程式只處理資料夾第一層的影片,不會遞迴子資料夾
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 檔案說明
|
||||||
|
|
||||||
|
| 檔案 | 用途 |
|
||||||
|
|------|------|
|
||||||
|
| `auto_remove_redlight.py` | 主程式 |
|
||||||
|
| `啟動.bat` | 互動式啟動器(Big5 編碼) |
|
||||||
|
| `_bat_src.txt` | 啟動器的 UTF-8 原始碼 |
|
||||||
|
| `_convert.ps1` | 把 `_bat_src.txt` 轉成 Big5 的 `啟動.bat` |
|
||||||
|
| `config.json` | 參數設定檔 |
|
||||||
|
| `requirements.txt` | Python 套件清單 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> 本工具由 **Claude Opus 4.8 (1M context)** 協助開發與處理。
|
||||||
+134
@@ -0,0 +1,134 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 950 >nul
|
||||||
|
title 機車影片 自動去紅燈工具
|
||||||
|
cd /d "%~dp0"
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
|
||||||
|
rem === 偵測 Python(優先用已知安裝路徑,避開 Microsoft Store 假捷徑)===
|
||||||
|
set "PYEXE="
|
||||||
|
if exist "C:\Python314\python.exe" set "PYEXE=C:\Python314\python.exe"
|
||||||
|
if not defined PYEXE (
|
||||||
|
where py >nul 2>nul && set "PYEXE=py"
|
||||||
|
)
|
||||||
|
if not defined PYEXE (
|
||||||
|
where python >nul 2>nul && set "PYEXE=python"
|
||||||
|
)
|
||||||
|
if not defined PYEXE goto no_python
|
||||||
|
"%PYEXE%" --version >nul 2>nul
|
||||||
|
if errorlevel 1 goto no_python
|
||||||
|
|
||||||
|
|
||||||
|
:menu
|
||||||
|
cls
|
||||||
|
echo ============================================================
|
||||||
|
echo 機車影片 自動去紅燈工具
|
||||||
|
echo ============================================================
|
||||||
|
echo.
|
||||||
|
echo 影片根目錄(BASE_DIR): E:\videos
|
||||||
|
echo 只要輸入資料夾名稱(例如 20260502),程式會自動到上面找。
|
||||||
|
echo.
|
||||||
|
echo [1] 預覽 ROI 先確認時速表的框選位置(第一次建議先做)
|
||||||
|
echo [2] 開始處理 批次去紅燈(資料夾內每支影片各自輸出一支)
|
||||||
|
echo [3] 離開
|
||||||
|
echo.
|
||||||
|
set "mode="
|
||||||
|
set /p mode=請輸入選項並按 Enter (1/2/3):
|
||||||
|
if "%mode%"=="1" goto preview
|
||||||
|
if "%mode%"=="2" goto process
|
||||||
|
if "%mode%"=="3" goto end
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
|
||||||
|
:preview
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo 預覽 ROI:抽一張畫面、畫紅框,確認有沒有框住時速表
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
set "folder="
|
||||||
|
set /p folder=請輸入資料夾名稱或路徑(例如 20260502):
|
||||||
|
if "%folder%"=="" goto preview
|
||||||
|
set "ROIARG="
|
||||||
|
set "roi="
|
||||||
|
set /p roi=自訂時速表座標 x y w h(用空格分隔;直接 Enter 用程式預設):
|
||||||
|
if not "%roi%"=="" set "ROIARG=--roi %roi%"
|
||||||
|
set "ATARG="
|
||||||
|
set "at="
|
||||||
|
set /p at=要抽第幾秒的畫面當預覽(直接 Enter 用第 0 秒):
|
||||||
|
if not "%at%"=="" set "ATARG=--preview-at %at%"
|
||||||
|
echo.
|
||||||
|
echo 執行預覽中,請稍候...
|
||||||
|
"%PYEXE%" "%~dp0auto_remove_redlight.py" "%folder%" --preview %ROIARG% %ATARG%
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo 預覽圖已輸出到本資料夾:
|
||||||
|
echo preview_roi.png 開這張看紅框有沒有框住時速表
|
||||||
|
echo preview_crop.png 裁切出來的時速表區域
|
||||||
|
echo preview_crop_processed.png 送進 OCR 前的影像
|
||||||
|
echo.
|
||||||
|
echo 若框得不準: 記下正確的 x y w h,下次預覽輸入即可重試;
|
||||||
|
echo 確定後建議把座標填進 auto_remove_redlight.py 最上面的 ROI。
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
|
||||||
|
:process
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo 開始處理:選資料夾 - 勾選影片 - 自動去紅燈
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
set "LIST=%TEMP%\redlight_sel.txt"
|
||||||
|
del "%LIST%" >nul 2>nul
|
||||||
|
rem (1) 互動選擇器:選資料夾 + 空白鍵勾選影片,選好寫出清單檔
|
||||||
|
"%PYEXE%" "%~dp0auto_remove_redlight.py" --select --base-dir "E:\videos" --out-list "%LIST%"
|
||||||
|
if not exist "%LIST%" (
|
||||||
|
echo.
|
||||||
|
echo 已取消或未選擇任何影片,返回選單。
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
)
|
||||||
|
rem (2) 讀清單,組成帶引號的參數字串
|
||||||
|
set "FILES="
|
||||||
|
for /f "usebackq delims=" %%L in ("%LIST%") do set "FILES=!FILES! "%%L""
|
||||||
|
del "%LIST%" >nul 2>nul
|
||||||
|
if not defined FILES (
|
||||||
|
echo 清單為空,返回選單。
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
)
|
||||||
|
echo.
|
||||||
|
echo ============================================================
|
||||||
|
echo 即將開始去紅燈(4K 逐秒 OCR + 無損切割,請勿關閉視窗)。
|
||||||
|
echo 輸出會放在影片所在資料夾的 no_redlight 子資料夾。
|
||||||
|
echo ============================================================
|
||||||
|
echo.
|
||||||
|
rem (3) 帶著勾選好的影片檔當參數,呼叫主程式處理
|
||||||
|
"%PYEXE%" "%~dp0auto_remove_redlight.py"!FILES!
|
||||||
|
echo.
|
||||||
|
echo ============================================================
|
||||||
|
echo 處理結束。請到該資料夾的 no_redlight 子資料夾查看成果,
|
||||||
|
echo 並可開啟各支的 *_speeds.csv 檢查 OCR 是否正確。
|
||||||
|
echo ============================================================
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
|
||||||
|
:no_python
|
||||||
|
echo.
|
||||||
|
echo [錯誤] 找不到可用的 Python。
|
||||||
|
echo.
|
||||||
|
echo 這台電腦目前只有 Microsoft Store 假捷徑,不是真的 Python。
|
||||||
|
echo 請到 https://www.python.org/downloads/ 安裝 Python 3,
|
||||||
|
echo 安裝時務必勾選 Add python.exe to PATH。
|
||||||
|
echo.
|
||||||
|
echo 裝好後在命令列執行: pip install -r "%~dp0requirements.txt"
|
||||||
|
echo 並安裝 FFmpeg(https://ffmpeg.org/download.html)且加入 PATH。
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
goto end
|
||||||
|
|
||||||
|
|
||||||
|
:end
|
||||||
|
endlocal
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# 把 UTF-8 的 bat 內容轉成 Big5(cp950)+ CRLF,輸出成「啟動.bat」
|
||||||
|
# 啟=U+555F 動=U+52D5(用碼位組檔名,避免中文在命令列被破壞)
|
||||||
|
$dir = 'E:\videos\redlight_remover'
|
||||||
|
$src = Join-Path $dir '_bat_src.txt'
|
||||||
|
$dst = Join-Path $dir ([string][char]0x555F + [string][char]0x52D5 + '.bat')
|
||||||
|
|
||||||
|
$lines = Get-Content -Encoding UTF8 $src
|
||||||
|
$t = [string]::Join([char]13 + [char]10, $lines) + [char]13 + [char]10
|
||||||
|
|
||||||
|
$enc = [Text.Encoding]::GetEncoding(950)
|
||||||
|
[IO.File]::WriteAllText($dst, $t, $enc)
|
||||||
|
|
||||||
|
# 回讀驗證:若有字元無法以 Big5 表示會變成 '?',回讀就不會相等
|
||||||
|
$b = [IO.File]::ReadAllText($dst, $enc)
|
||||||
|
$bytes = [IO.File]::ReadAllBytes($dst).Length
|
||||||
|
|
||||||
|
Write-Output ("DST=" + $dst)
|
||||||
|
Write-Output ("BYTES=" + $bytes)
|
||||||
|
if ($t -eq $b) { Write-Output 'ROUNDTRIP_OK' } else { Write-Output 'ROUNDTRIP_MISMATCH' }
|
||||||
File diff suppressed because it is too large
Load Diff
+20
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"roi": [
|
||||||
|
3300,
|
||||||
|
1770,
|
||||||
|
300,
|
||||||
|
140
|
||||||
|
],
|
||||||
|
"sample_interval": 1.0,
|
||||||
|
"progress_every": 60,
|
||||||
|
"stop_seconds": 4.0,
|
||||||
|
"speed_threshold": 0,
|
||||||
|
"min_confidence": 0.5,
|
||||||
|
"smooth_window": 5,
|
||||||
|
"merge_gap": 3.0,
|
||||||
|
"stop_padding": 0.0,
|
||||||
|
"min_keep": 0.8,
|
||||||
|
"use_gpu": true,
|
||||||
|
"reencode": false,
|
||||||
|
"base_dir": "E:\\videos"
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# 安裝: pip install -r requirements.txt
|
||||||
|
# 另外需自行安裝 FFmpeg 並加入 PATH (https://ffmpeg.org/download.html)
|
||||||
|
easyocr
|
||||||
|
opencv-python
|
||||||
|
numpy
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 950 >nul
|
||||||
|
title 機車影片 自動去紅燈工具
|
||||||
|
cd /d "%~dp0"
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
|
||||||
|
rem === 偵測 Python(優先用已知安裝路徑,避開 Microsoft Store 假捷徑)===
|
||||||
|
set "PYEXE="
|
||||||
|
if exist "C:\Python314\python.exe" set "PYEXE=C:\Python314\python.exe"
|
||||||
|
if not defined PYEXE (
|
||||||
|
where py >nul 2>nul && set "PYEXE=py"
|
||||||
|
)
|
||||||
|
if not defined PYEXE (
|
||||||
|
where python >nul 2>nul && set "PYEXE=python"
|
||||||
|
)
|
||||||
|
if not defined PYEXE goto no_python
|
||||||
|
"%PYEXE%" --version >nul 2>nul
|
||||||
|
if errorlevel 1 goto no_python
|
||||||
|
|
||||||
|
|
||||||
|
:menu
|
||||||
|
cls
|
||||||
|
echo ============================================================
|
||||||
|
echo 機車影片 自動去紅燈工具
|
||||||
|
echo ============================================================
|
||||||
|
echo.
|
||||||
|
echo 影片根目錄(BASE_DIR): E:\videos
|
||||||
|
echo 只要輸入資料夾名稱(例如 20260502),程式會自動到上面找。
|
||||||
|
echo.
|
||||||
|
echo [1] 預覽 ROI 先確認時速表的框選位置(第一次建議先做)
|
||||||
|
echo [2] 開始處理 批次去紅燈(資料夾內每支影片各自輸出一支)
|
||||||
|
echo [3] 離開
|
||||||
|
echo.
|
||||||
|
set "mode="
|
||||||
|
set /p mode=請輸入選項並按 Enter (1/2/3):
|
||||||
|
if "%mode%"=="1" goto preview
|
||||||
|
if "%mode%"=="2" goto process
|
||||||
|
if "%mode%"=="3" goto end
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
|
||||||
|
:preview
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo 預覽 ROI:抽一張畫面、畫紅框,確認有沒有框住時速表
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
set "folder="
|
||||||
|
set /p folder=請輸入資料夾名稱或路徑(例如 20260502):
|
||||||
|
if "%folder%"=="" goto preview
|
||||||
|
set "ROIARG="
|
||||||
|
set "roi="
|
||||||
|
set /p roi=自訂時速表座標 x y w h(用空格分隔;直接 Enter 用程式預設):
|
||||||
|
if not "%roi%"=="" set "ROIARG=--roi %roi%"
|
||||||
|
set "ATARG="
|
||||||
|
set "at="
|
||||||
|
set /p at=要抽第幾秒的畫面當預覽(直接 Enter 用第 0 秒):
|
||||||
|
if not "%at%"=="" set "ATARG=--preview-at %at%"
|
||||||
|
echo.
|
||||||
|
echo 執行預覽中,請稍候...
|
||||||
|
"%PYEXE%" "%~dp0auto_remove_redlight.py" "%folder%" --preview %ROIARG% %ATARG%
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo 預覽圖已輸出到本資料夾:
|
||||||
|
echo preview_roi.png 開這張看紅框有沒有框住時速表
|
||||||
|
echo preview_crop.png 裁切出來的時速表區域
|
||||||
|
echo preview_crop_processed.png 送進 OCR 前的影像
|
||||||
|
echo.
|
||||||
|
echo 若框得不準: 記下正確的 x y w h,下次預覽輸入即可重試;
|
||||||
|
echo 確定後建議把座標填進 auto_remove_redlight.py 最上面的 ROI。
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
|
||||||
|
:process
|
||||||
|
echo.
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
echo 開始處理:選資料夾 - 勾選影片 - 自動去紅燈
|
||||||
|
echo ------------------------------------------------------------
|
||||||
|
set "LIST=%TEMP%\redlight_sel.txt"
|
||||||
|
del "%LIST%" >nul 2>nul
|
||||||
|
rem (1) 互動選擇器:選資料夾 + 空白鍵勾選影片,選好寫出清單檔
|
||||||
|
"%PYEXE%" "%~dp0auto_remove_redlight.py" --select --base-dir "E:\videos" --out-list "%LIST%"
|
||||||
|
if not exist "%LIST%" (
|
||||||
|
echo.
|
||||||
|
echo 已取消或未選擇任何影片,返回選單。
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
)
|
||||||
|
rem (2) 讀清單,組成帶引號的參數字串
|
||||||
|
set "FILES="
|
||||||
|
for /f "usebackq delims=" %%L in ("%LIST%") do set "FILES=!FILES! "%%L""
|
||||||
|
del "%LIST%" >nul 2>nul
|
||||||
|
if not defined FILES (
|
||||||
|
echo 清單為空,返回選單。
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
)
|
||||||
|
echo.
|
||||||
|
echo ============================================================
|
||||||
|
echo 即將開始去紅燈(4K 逐秒 OCR + 無損切割,請勿關閉視窗)。
|
||||||
|
echo 輸出會放在影片所在資料夾的 no_redlight 子資料夾。
|
||||||
|
echo ============================================================
|
||||||
|
echo.
|
||||||
|
rem (3) 帶著勾選好的影片檔當參數,呼叫主程式處理
|
||||||
|
"%PYEXE%" "%~dp0auto_remove_redlight.py"!FILES!
|
||||||
|
echo.
|
||||||
|
echo ============================================================
|
||||||
|
echo 處理結束。請到該資料夾的 no_redlight 子資料夾查看成果,
|
||||||
|
echo 並可開啟各支的 *_speeds.csv 檢查 OCR 是否正確。
|
||||||
|
echo ============================================================
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
goto menu
|
||||||
|
|
||||||
|
|
||||||
|
:no_python
|
||||||
|
echo.
|
||||||
|
echo [錯誤] 找不到可用的 Python。
|
||||||
|
echo.
|
||||||
|
echo 這台電腦目前只有 Microsoft Store 假捷徑,不是真的 Python。
|
||||||
|
echo 請到 https://www.python.org/downloads/ 安裝 Python 3,
|
||||||
|
echo 安裝時務必勾選 Add python.exe to PATH。
|
||||||
|
echo.
|
||||||
|
echo 裝好後在命令列執行: pip install -r "%~dp0requirements.txt"
|
||||||
|
echo 並安裝 FFmpeg(https://ffmpeg.org/download.html)且加入 PATH。
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
goto end
|
||||||
|
|
||||||
|
|
||||||
|
:end
|
||||||
|
endlocal
|
||||||
Reference in New Issue
Block a user