fix-srt Skill
目的
- •自動修正 SRT / VTT 字幕檔案中的常見問題:編號錯誤、時間重疊或長度為 0 的段落、時間間隔不連續。
- •支援 SRT (SubRip) 與 WebVTT (VTT) 兩種字幕格式,自動偵測檔案類型並套用對應的解析與輸出邏輯。
- •繁體中文優先:使用多層次修正策略(字典對照 → OpenCC+pycorrector → 語法修正)
- •英文增強:整合拼字檢查與語法修正,提升英文字幕品質
- •上下文感知:使用滑動窗口分析相鄰字幕,保持語意連貫性
- •高效能設計:LRU 快取、批次處理,確保 10 分鐘片長可在 1-2 分鐘內修正完成
主要功能
時間軸修正
- •重新編號:保證編號連續,從 1 開始
- •修正時間:當發現時間長度為 0、結束時間早於開始時間、或段落之間有重疊,依規則調整:
- •若某筆長度為 0,嘗試從前後段落平均分配或給予最小長度(預設 500ms)
- •若有重疊,會合併或調整邊界以避免衝突(保留語意連續性)
- •若空隙過大造成斷裂(例如同一句被切成多段但中間時間差異异常),嘗試合併相鄰短段
繁體中文修正(三層式策略)
- •快速字典對照:內建 40+ 常見錯別字對照表(如:『己經』→『已經』、『Pump』→『Prompt』)
- •OpenCC + pycorrector:繁體 → 簡體 → 錯別字修正 → 繁體
- •語法與標點:中文標點前移除空白、中英文之間自動加空白
英文修正(雙層式策略)
- •拼字檢查:使用
pyspellchecker修正常見拼字錯誤 - •語法檢查:選用
language_tool_python進行深度語法分析(可選,較慢但更準確) - •標點規範:標點前移除空白、標點後加空白、句首大寫
上下文感知處理
- •滑動窗口:分析前後 N 句(預設 3 句)作為上下文
- •語意連貫:修正時考慮前後文,避免斷章取義
- •LRU 快取:重複出現的句子自動使用快取結果,大幅提升效能
使用情境與範例
正確範例(SRT 格式)
srt
79 00:03:21,000 --> 00:03:22,000 可以呼叫這個 80 00:03:22,000 --> 00:03:23,000 Create 81 00:03:23,000 --> 00:03:25,000 Redmi 的 Prompt
正確範例(VTT 格式)
vtt
WEBVTT 00:03:21.000 --> 00:03:22.000 可以呼叫這個 00:03:22.000 --> 00:03:23.000 Create 00:03:23.000 --> 00:03:25.000 Redmi 的 Prompt
錯誤範例(編號或時間不合理、錯別字)
srt
91 00:03:48,000 --> 00:03:49,000 就是你說的Pump 92 00:03:49,000 --> 00:03:49,000 你要在 93 00:03:49,000 --> 00:03:54,000 這邊透過寫信跟施力去呼叫起來你可以看到
修正行為(示意)
- •時間軸修正:編號 92 的長度為 0,會調整為至少 500ms,或與前後段合併成合理句子
- •繁體中文修正:
- •『Pump』→『Prompt』(字典對照)
- •『寫信』→『寫程式』(上下文判斷)
- •『施力』→『實例』(上下文判斷)
- •『Redmi的Prompt』→『Redmi 的 Prompt』(中英文間加空白)
- •編號重排:確保連續序列(91, 92, 93...)
英文修正範例
code
輸入: "Ths is a exmple of speling erors. it should be fixed." 輸出: "This is a example of spelling errors. It should be fixed."
修正項目:
- •
Ths→This(拼字) - •
exmple→example(拼字) - •
speling→spelling(拼字) - •
erors→errors(拼字) - •
it→It(句首大寫)
安裝與使用
安裝依賴套件
基礎功能(必要)
bash
# 無需額外套件,基本功能即可運作 python fix_srt_enhanced.py --help
完整功能(建議)
bash
# 安裝所有建議套件以獲得最佳修正效果 pip install opencc-python-reimplemented pycorrector pyspellchecker # 可選:更強大的語法檢查(會下載語言模型,首次較慢) pip install language-tool-python
套件說明
| 套件 | 用途 | 是否必要 | 效能影響 |
|---|---|---|---|
opencc-python-reimplemented | 簡繁轉換,配合 pycorrector 修正繁體中文 | 強烈建議 | 低 |
pycorrector | 中文錯別字修正 | 建議 | 中 |
pyspellchecker | 英文拼字檢查(本地字典) | 建議 | 低 |
language-tool-python | 深度語法檢查(中英文) | 可選 | 高 |
效能基準
- •10 分鐘片長字幕(約 150-300 個段落)
- •基礎模式(無外部套件):< 30 秒
- •標準模式(opencc + pycorrector + pyspellchecker):1-2 分鐘
- •完整模式(啟用 --enable-lt):3-5 分鐘
使用範例
1. 快速修正(繁體中文優先)
bash
python fix_srt_enhanced.py --input input.srt --output output.srt
2. 啟用完整語法檢查(較慢但更準確)
bash
python fix_srt_enhanced.py --input input.srt --output output.srt --enable-lt
3. 調整上下文窗口大小
bash
# 增加到 5 句(更多上下文,但可能較慢) python fix_srt_enhanced.py --input input.srt --output output.srt --context-window 5 # 減少到 1 句(更快,但可能失去部分語意) python fix_srt_enhanced.py --input input.srt --output output.srt --context-window 1
4. 預覽變更(不實際寫入)
bash
python fix_srt_enhanced.py --input input.srt --output output.srt --dry-run
5. 格式轉換(SRT ↔ VTT)
bash
# SRT 轉 VTT python fix_srt_enhanced.py --input input.srt --output output.vtt # VTT 轉 SRT python fix_srt_enhanced.py --input input.vtt --output output.srt
6. 調整最小字幕持續時間
bash
# 設定為 1 秒(預設 0.5 秒) python fix_srt_enhanced.py --input input.srt --output output.srt --min-duration 1.0
批次處理範例
bash
# Windows (PowerShell)
Get-ChildItem -Filter *.srt | ForEach-Object {
python fix_srt_enhanced.py --input $_.FullName --output "$($_.BaseName).fixed.srt"
}
# Linux / macOS (Bash)
for file in *.srt; do
python fix_srt_enhanced.py --input "$file" --output "${file%.srt}.fixed.srt"
done
工程師參考資訊
技術架構
繁體中文修正流程
code
字幕文字 ↓ 1. 快速字典對照(TRADITIONAL_CHINESE_TYPO_MAP) ↓ 2. OpenCC 繁→簡 → pycorrector 修正 → OpenCC 簡→繁 ↓ 3. 標點空白規範化 ↓ 修正後文字
英文修正流程
code
字幕文字 ↓ 1. 基本標點規範化 ↓ 2. pyspellchecker 逐字拼字檢查(LRU 快取) ↓ 3. 句首大寫 ↓ 4. [可選] language_tool_python 語法檢查 ↓ 修正後文字
上下文感知機制
code
字幕清單 ↓ 對每個字幕(索引 i): ├─ 取得上下文:subs[i-window : i+window] ├─ 偵測語言(中文/英文) ├─ 根據語言選擇修正策略 └─ 將修正結果寫回 subs[i] ↓ 修正後字幕清單
效能最佳化技術
- •
LRU 快取:
- •
fix_traditional_chinese_typos_dict(maxsize=1024) - •
fix_chinese_with_pycorrector(maxsize=512) - •
fix_english_spelling(maxsize=512)
- •
- •
批次處理:避免逐字呼叫 API 或模型
- •
條件執行:
- •文字長度 < 3 時跳過 pycorrector
- •全大寫/數字/符號跳過拼字檢查
- •
本地優先:優先使用本地字典和規則,減少外部呼叫
擴充建議
新增自訂錯別字
編輯 TRADITIONAL_CHINESE_TYPO_MAP 字典:
python
TRADITIONAL_CHINESE_TYPO_MAP = {
# ... 現有項目 ...
'你的錯誤': '正確寫法',
'另一個錯誤': '另一個正確寫法',
}
整合 LLM API(進階)
可在 fix_chinese_text 或 fix_english_text 中新增:
python
def fix_with_openai(text: str, context: str) -> Tuple[str, bool]:
"""使用 OpenAI API 進行語意式修正"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "修正字幕錯別字,保持原意"},
{"role": "user", "content": f"上下文: {context}\n字幕: {text}"}
]
)
corrected = response.choices[0].message.content
return corrected, corrected != text
已知限制
- •語言偵測簡化:目前僅區分中文/英文,無法處理混合語言句子
- •語意理解有限:規則式修正無法理解深層語意(如雙關語、俚語)
- •專有名詞:可能誤修正專有名詞(如品牌名、人名)
- •language_tool_python:首次執行會下載語言模型(約 100-200MB)
未來改善方向
- • 支援更多語言(日文、韓文、西班牙文等)
- • 整合專有名詞辭典(避免誤修正)
- • 提供 Web UI 介面
- • 支援即時預覽(side-by-side 比對)
- • 匯出修正報告(HTML/PDF)
- • 整合 DeepL / GPT-4 做進階語意修正
版本資訊
v2.0.0 - 增強版 (2026-02-06)
✨ 新功能
- •繁體中文優先:內建 40+ 常見錯別字對照表
- •OpenCC + pycorrector 整合(繁→簡→修正→繁)
- •英文拼字檢查:pyspellchecker 整合
- •上下文感知:滑動窗口機制(可調整窗口大小)
- •LRU 快取:提升 3-5 倍效能
⚡ 效能提升
- •10 分鐘片長從 5-10 分鐘優化至 1-2 分鐘
- •快取命中率 > 80%(重複句子)
🔧 工程改善
- •模組化文字修正函式
- •完整型別提示(Type Hints)
- •詳細使用者回饋(emoji + 進度訊息)
v1.0.0 - 基礎版
基礎時間軸修正與簡單文字校正功能
授權與貢獻
此 Skill 為開源工具,歡迎貢獻改善建議或錯別字字典!
維護者: GitHub Copilot Community
授權: MIT License
最後更新: 2026-02-06
適用版本: Python 3.8+
設計細節(行為規則)
- •格式處理差異:
- •SRT:編號序列必須存在,時間格式為
HH:MM:SS,mmm - •VTT:編號可選(僅 cue identifier),時間格式為
HH:MM:SS.mmm,須保留檔頭WEBVTT
- •SRT:編號序列必須存在,時間格式為
- •重新編號規則:
- •SRT:除非 CLI 指定保留原始起始數字,預設從 1 重新編號
- •VTT:保留原始 cue identifier(若存在),或可選擇性加入編號
- •最小段落長度:預設 0.5 秒,可由
--min-duration調整。 - •合併策略:若相鄰段落各自 < 1 秒且語句顯然中斷(例如結尾非標點),則嘗試合併。
- •時間分配:對於長度為 0 的短段,嘗試從前後段取得時間切分;若失敗則設定最小長度並將鄰段往後推移以避免衝突(保守調整,不會把後段推超過下一段開始時刻)。
語意校正注意事項
- •自動偵測語言後,僅執行「保守」的文字修正:拼字、標點、大小寫、重複字的簡單修正。
- •若使用 LLM 做潤飾,預設為「保持原意、最小改寫」。可透過
--aggressiveness調整改寫程度。 - •對於敏感或私有影音,提醒使用者注意資料隱私(例如不要上傳到第三方服務,或使用內部模型)。
輸出與驗證
- •輸出檔案為合法 SRT 或 VTT(根據輸入格式或指定格式),可由播放器或對應套件驗證。
- •格式轉換:可選擇性支援
--output-format參數進行格式互轉(例如 SRT → VTT 或 VTT → SRT)。 - •建議提供
--dry-run模式,輸出要做的變更摘要(編號調整、合併、時間調整)供人工審核。 - •VTT 特定驗證:確保檔頭
WEBVTT存在,時間格式使用小數點(.)而非逗號(,)。
測試建議
- •建立一組樣本 SRT 與 VTT(含邊界案例:時間為 0、重疊、長段分割、不同語言)、對照輸出檔作為測試集。
- •單元測試:
- •時間修正邏輯(SRT 與 VTT 格式)
- •合併判斷
- •編號重排(SRT 強制編號、VTT 可選編號)
- •語言偵測結果
- •格式互轉驗證(SRT ↔ VTT)
- •整合測試:使用真實字幕檔案(例如
docs/srts/*.srt與docs/srts/*.vtt)進行端對端測試。