Community程式設計與開發github.com

jiajunzeng789/cantonese-subtitle-skill

將粵語汽車音視頻經本地雙模型辨識與語言模型校準,生成按橫豎屏畫幅斷句、單行且無句讀標點的簡體中文書面語 SRT,保留數值及專名必需符號並核對原媒體時間軸。

cantonese-subtitle-skill 是什麼?

此技能專為處理粵語汽車內容的音視頻設計,能完全在本地透過 Whisper large-v3 和 Qwen3-ASR-1.7B 雙模型進行語音辨識,並利用語言模型進行文字校準。它會根據橫屏或豎屏的畫幅設定,將辨識結果斷句為單行、無句讀標點的簡體中文書面語,同時保留數值、單位及專有名稱所需的必要符號(如「1.8米」、「CX-5」)。最終產出標準的 UTF-8 SRT 字幕檔案,時間軸與原始媒體精確對齊。此技能支援 Claude Code 等具備本地執行能力的 AI 助手,並透過詳盡的任務進度追蹤與環境恢復機制,確保流程穩定且可中斷續接。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jiajunzeng789/cantonese-subtitle-skill/tree/HEAD/skills/auto-cantonese-subtitles

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

汽車粵語書面語單行字幕

執行邊界

  • 語音辨識與媒體處理在本機完成,不上傳音視訊到辨識 API。準備時可下載公開模型和依賴;離線處理時不自動下載或改用雲端。
  • 由當前助手進行文字校準。助手使用線上模型時,轉寫文字會交給線上模型,不得描述為全鏈路離線。若使用者要求文字也離線,則使用本地文字模型,缺少時說明實際限制。
  • 最終交付 UTF-8 .srt,每條恰好一行文字,帶對應原媒體的時間軸,不以純文字稿代替。
  • 預設無句讀標點,保留數值、單位及正式名稱必需符號,例如 1.8米、30%、-5℃、0—100km/h、CX-5。不能把「無標點」理解為刪除所有非漢字字元。
  • 輸入、原始辨識結果、校準記錄和最終字幕分別儲存,不覆蓋原檔案。

環境與任務反饋

  • 先展示清單,再執行。 使用 references/task-progress.md 的狀態約定,每步驗證通過後打勾;進入步驟、完成、失敗或等待使用者時立即更新。長任務在有執行機會時約每60秒報告當前步驟、耗時和最近進展,不編造百分比,不承諾軟體不支援的背景推送。
  • 統一腳本準備與自檢。 首次準備或環境故障先按 references/runtime-setup.md 執行 scripts/setup_runtime.py,不要臨場拼裝安裝命令或隨意改依賴版本。腳本先唯讀檢查本機記錄、已知環境和使用者指定直譯器,通過則復用,否則分步建立專用環境;安裝日誌和進度落盤。音訊解碼、模型載入、短樣本推理分別驗證。依賴故障的進一步處理見 references/environment-recovery.md。不修改系統Python,不硬編碼開發者電腦路徑。
  • 國內網路先檢查下載來源。 確需安裝依賴時,優先檢查國內可信HTTPS鏡像的可達性及所需版本,再為本次命令臨時指定;不修改全域pip設定。提醒應顯示實際套件名稱、來源及可獲得的下載進度,不能只說「PyTorch較大,請等待」,也不能把全部依賴的體積算成PyTorch大小。詳見環境恢復說明。
  • 先有證據,再修故障。 保留完整錯誤和退出碼,區分網路、建構/版本、權限及已證實的安全攔截。僅憑pip失敗、臨時目錄或刪除檔案字樣不能判定安全攔截;不預設要求關閉防護、放行未知檔案或重新啟動。需使用者操作時說明具體依據、目標操作、影響及恢復方式。
  • 失敗可續接。 基礎工具、Whisper、Qwen分步準備並儲存日誌。針對同一錯誤,有依據修復後最多自動重試一次;仍失敗則停止該步驟,報告中斷點,繼續不依賴它的工作。使用者說「繼續」時先核對記錄及執行中任務,從仍有效的中斷點恢復,不重複啟動安裝或下載。

工作流程

  1. 確定成片畫幅。 視訊用 scripts/subtitle_profile.py 探測顯示尺寸,考慮旋轉和畫素寬高比,忽略MP3封面等附圖。最終剪輯尺寸優先於來源視訊,使用者指定豎屏時不能按橫屏來源檔案套橫屏預設。音訊沒有畫幅:使用使用者已給的成片設定;未知時詢問橫屏或豎屏,也可在使用者需要時各出一套,不把猜測稱為自動辨識。詳見 references/subtitle-layout.md。
  2. 本地辨識與交叉檢查。 檢查模型完整性,使用 Whisper large-v3 與 Qwen3-ASR-1.7B,保留原文和時間資料。Qwen預設輸出文字用於交叉校準,時間定位參考Whisper及原音訊;只有需要額外對齊且驗證通過時才載入可選ForcedAligner,不把對齊模型作為基礎執行的必需下載。相同素材、相同背景詞做比較。短樣本依次執行;超過180秒使用scripts/transcribe_long.py管理重疊視窗、唯一檔名、時間偏移和已完成結果復用,不臨時寫shell迴圈。腳本只保守去除時間和文字均匹配的重複片段,其餘接縫進入待審;須結合雙模型和原音訊完成語義去重,不直接拼接視窗正文當成終稿。執行說明見 references/local-testing.md。首次對比以無提示詞結果為基線。漏段、重複、可疑額外內容須用原音訊短片複測,不能只憑一個模型認定正確。
  3. 先校準、後斷句。 當前助手對照兩模型原文、相鄰語境和本地術語資料,依據 references/editorial-rules.md 修正專名及同音候選,並生成保留標點的簡體書面語工作稿。保留條件、否定、數字、推測和立場。語言推斷只生成候選,不等於聽音或外部核驗。
  4. 按畫幅拆成單行語義單元。 不再要求一整句獨佔一條字幕。允許將長句改寫為連續、自然的語義短句,每條能表達一個清楚的小意思。不能按固定字數硬切,不能拆開品牌車型、姓名、固定術語、數字與單位,不能產生孤立連線詞或半截主謂/動賓結構。盡量落入畫幅建議長度,短回答不為湊字補內容。不要為了縮短而丟條件、數字或改觀點。超過長度上限時重新改寫或分句,不折行、不截斷。
  5. 多人發言分別處理。 不將不同人的問答拼成一句或同一行,不再用兩行對話同屏規避短字幕。短回應使用實際語音區間,可在靜音間隙適當延長顯示,但不越過下一位發言。無說話人分離時不憑文字編造人物身份,輪次不清或重疊人聲進入待審,不保證已經解決串人。
  6. 逐語義單元匹配時間。 使用對應原始詞/片段的起止點,保留來源映射及媒體偏移。拆出新的短句必須重新定位聲音,不把舊長句的時間按字數均分。只能用原始粵語轉寫做強制對齊,不能用改寫後的普通話文字對齊粵語發音。對齊失敗時復聽/重對齊,不偽造精確時間。
  7. 最後清標點並匯出。 斷句和時間確定後,匯出器清理句讀、合併多餘空格並轉換簡體,保護必要符號;清理後再驗單行、寬度、速度、重疊和越界。字幕 JSON 包含 media_duration、subtitle_profile、cues,可選 protected_terms,schema與呼叫見畫幅說明。scripts/export_srt.py 遇換行、超寬或明顯粵語殘留會拒絕匯出,須修正語義/時間後重試,不繞過檢查。
  8. 預覽與驗收。 配置成片字型、字型大小、安全區時優先測量字型寬度;只用漢字寬度估計時明確其局限。SRT不可靠攜帶畫幅或樣式,剪輯軟體仍可能自動換行,必須匹配同一字幕預設並在最終畫幅預覽。有實際回聽/播放才報告已驗證同步;只有結構檢查不能視為準確或聲畫同步合格。

交付

  • <素材名>_橫屏.srt / <素材名>_豎屏.srt;未決專名、內容、輪次或時間疑點則用 .review.srt 標識待審稿。
  • 疑點清單獨立記錄時間位置、原辨識、候選、依據和未決原因,不把說明塞進發布字幕正文。
  • 同步記錄成片預設來源:實際探測、使用者指定或僅畫幅選項,不能把原視訊尺寸等同於最終成片尺寸。
  • 測試保留各模型原始結果及綜合校準記錄,區分辨識、改寫、分句和時間軸問題。不把綜合校準稿當作單一模型獨立準確率,不給沒有人工參考稿支援的準確率。

相關技能