Bilingual Video Subtitles 培訓影片雙語字幕
完整流水線在 scripts/pipeline.py(單一入口,階段有快取、可斷點續跑)。
宿主環境注意:本 skill 已做跨環境適配,轉寫後端自動選擇(原生沙箱的 Omni 網關 / OpenAI 兼容 api / whisper 橋接)。無 Omni 網關且未配 api 後端時走 agent 模式——transcribe/translate 階段以退出碼 3 掛起並寫出 manifest, 完成對應轉寫/翻譯後重跑 build 續跑。操作協議與後端配置必讀 references/host-adaptation.md。 遇到 pipeline exit 3 不是失敗,按 manifest 完成對應工作再重跑即可。
標準工作流
- 獲取輸入:影片檔案 + 對應的規章制度/參考文件(.docx/.txt/.md)。
- 讀取參考文件,為其編寫術語表
glossary.txt(每行中文 = English,10~40 條)。 術語表決定全片翻譯一致性,務必覆蓋:制度/規範名稱、角色與縮寫 (如 PM=Project Manager)、業務單據或表單名稱、內部系統名。 - 執行建置(前台運行,預留充足 timeout;50 分鐘影片全流程約 15~25 分鐘):
python3 scripts/pipeline.py build \
--video <影片路徑> --doc <制度文件路徑> \
--work <工作目錄> --out <輸出目錄> \
--glossary <glossary.txt> \
--hotwords "安全紅線,需求單,變更單,PM,QA,SRE" \
--preview 90
- 生成順序(每步有快取,失敗後重跑同命令即續跑): setup(切分音頻)→ transcribe(Qwen3-Omni 逐字稿)→ timing(whisper 時間軸) → align(拼音對齊)→ clean(去口語/切句)→ translate(批量中譯英) → package(工程文件+SRT+ASS)→ render(預覽片+完整版)。
- 先用
--preview輸出的預覽片給用戶確認效果(可用 media-read 抽幀檢查字幕渲染), 再交付完整版影片、SRT、字幕工程文件。
交付物說明
| 檔案 | 用途 |
|---|---|
<名稱>_中英雙語字幕_完整版.mp4 | 硬字幕成片(中文上行白字、英文下行淺藍字,均帶半透明黑底背景條,任何背景下可讀) |
<名稱>_中英雙語字幕.srt | 雙語字幕文件(可導入播放器/平台) |
<名稱>_字幕工程.json | 主數據:含全部時間軸+中英對照文字。年度微調只改它 |
--work 目錄 | 中間產物快取(轉寫稿、whisper 時間軸)。保留可避免重複轉寫 |
年度微調(制度修訂後更新字幕)
制度微調只影響少量句子時,不要重新轉寫:
- 讓用戶指出需修改的時間段/內容,或直接在上一年
<名稱>_字幕工程.json上修改zh/en文字(時間軸不變時不動 start/end)。 - 重新渲染:
python3 scripts/pipeline.py render --project <工程.json> [--video <新影片>] [--srt-only]
若新影片對應章節有增刪語句:對新影片跑 build --stage transcribe 取新逐字稿,
人工比對後用新文字替換工程文件中對應條目,再 render。
按主題/角色拆分短影片(碎片化學習)
在已加字幕的完整版影片基礎上拆分(保留雙語字幕)。
- 從字幕數據中定位章節邊界:用參考文件的角色/章節清單作為關鍵詞, 在 zh_lines.json(工作目錄)中檢索章節過渡語,典型模式: "第N個角色是X"、"上面是X的職責,要求是"、"X的違規情形是"等過渡句式。 以過渡句的開始時間為切分點(該句歸入下一集)。
- 約束:單集 ≤10 分鐘(硬上限 15 分鐘);章節超限時在章節內部自然分界 (如"職責/違規行為/認定方法"之間)二次切分;不合併不同角色。
- 寫切分計劃 JSON 並執行:
{"base": "影片名", "lead_in": 0.35,
"chapters": [{"start": 0, "end": 288.4,
"title": "01_開篇_目的與概述", "note": "內容說明"}]}
python3 scripts/pipeline.py split --plan plan.json \
--video <帶字幕完整版.mp4> --out <輸出目錄>
- 輸出到
<輸出目錄>/<影片名>_拆分影片/:自動命名的各集 +00_拆分目錄.txt(片名、時間段、時長、內容說明)。 - 抽查驗證:每集開頭抽幀(ffmpeg 截 PNG 後查看)確認切分點正落在對應主題開場句。
關鍵實現約定(不要偏離)
- qwen-omni 後端必須把參考文件全文注入 prompt 作為術語上下文,且
--timeout 900 --max-tokens 8192(腳本已內置);api 後端中專用 ASR (如 mimo-asr)不吃文字 prompt,術語糾錯依賴 clean 階段對照文件校對。 - whisper 只用於時間軸,其辨識文字一律丟棄(中文文字品質差,但時間戳精準)。
- 對齊必須用拼音串全局對齊(同音字錯誤在拼音層自動消解);逐句貪心對齊會整體漂移。
- 對齊品質:
align輸出 qual mean ≥0.75 屬正常;<0.6 時先查 whisper 語音覆蓋率 (見 references/troubleshooting.md)。 - 長時 CPU 任務(whisper/render)注意宿主對後台任務的清理策略,必要時前台跑。
- 網路限制:HuggingFace 需鏡像,腳本已內置
HF_ENDPOINT=hf-mirror.com與HF_HUB_DISABLE_XET=1,勿刪。
排障
見 references/troubleshooting.md:上傳超時、轉寫單長行、 對齊品質低、字體亂碼、渲染失敗等場景的處理。