用本地模型跑一整套字幕轉錄與翻譯流程
前言
我很偶爾會有「外文影片 → 中文字幕」的需求。
這通常分成兩塊執行:
- 音檔 → 原文逐字稿
- 原文逐字稿 → 翻譯成中文
以前怎麼做
-
轉錄這塊以前都用 faster-whisper,在以前 LLM 還不發達的年代,我都只會用幾個預設參數跑,能出字幕就好。(甚至有自己切音檔 → 依序翻譯 → 再合併的鬼操作)
-
轉錄完成後,我都直接把 SRT 丟到 translatesubtitles.co 套 Google 翻譯,雖然一秒就翻完,但翻得不精準、也完全不吃上下文,一句一句各翻各的,日文的效果還特別差。
現在怎麼做
-
最近剛好又有這個需求,想到 LLM 可以幫忙,請 LLM 幫我看了一下,才知道原來有一堆實用參數可以調,像是逐字時間戳、自動換溫度重試、不讓前段錯誤污染後段,調好之後轉錄結果穩定很多。
-
以前連 ChatGPT3.5 都還沒出,現在則是本地 LLM 就能做翻譯了。重點是小模型提示詞要寫好、要分批、要有重試機制,這幾件事設計好,一整套流程跑起來非常順手,翻譯品質也遠勝 Google 翻譯。
痛點:LLM 如何做翻譯?
因為 LLM 翻譯,特別是小模型,最大的麻煩是「對齊」,模型常會偷偷合併、拆分或漏句,譯文就對不回時間軸了。
這邊 Claude 設計的解法是:給每句一個 [編號]。
- 系統提示裡把規則講死(編號數量、順序必須一模一樣,不可合併拆分漏句)。
- 用一次送一批帶編號的句子當輸入,再放幾句上下文當參考;輸出的部分必須要用指定的格式回傳,對得上才過。
- 那輸出對不上的情況呢?就做重試機制,最多可以重試 N 次,若還是不行就先繼續下一批,這批先保留原文。
- 每次成功的進度先寫進 JSON 檔案,下次可以直接做「斷點續傳」,隨時中斷也不會白做工。
心得
- 這樣一來,從影片到中文字幕,全程在本機完成,不用上傳、不用等線上服務,不會被審查,而且成功率極高。
- 這套流程我覺得還算滿意,可以給 80 分,夠用就好了,如果有更好的方法也可以跟我說。
- 花幾個小時來回跟 Claude 嘴砲,設計流程、修正流程還滿有趣的。(感謝老闆的 Token)