跳至主要内容

用本地模型跑一整套字幕轉錄與翻譯流程

· 閱讀時間約 3 分鐘

前言

我很偶爾會有「外文影片 → 中文字幕」的需求。

這通常分成兩塊執行:

  1. 音檔 → 原文逐字稿
  2. 原文逐字稿 → 翻譯成中文

以前怎麼做

  1. 轉錄這塊以前都用 faster-whisper,在以前 LLM 還不發達的年代,我都只會用幾個預設參數跑,能出字幕就好。(甚至有自己切音檔 → 依序翻譯 → 再合併的鬼操作)

  2. 轉錄完成後,我都直接把 SRT 丟到 translatesubtitles.co 套 Google 翻譯,雖然一秒就翻完,但翻得不精準、也完全不吃上下文,一句一句各翻各的,日文的效果還特別差。

現在怎麼做

  1. 最近剛好又有這個需求,想到 LLM 可以幫忙,請 LLM 幫我看了一下,才知道原來有一堆實用參數可以調,像是逐字時間戳、自動換溫度重試、不讓前段錯誤污染後段,調好之後轉錄結果穩定很多。

  2. 以前連 ChatGPT3.5 都還沒出,現在則是本地 LLM 就能做翻譯了。重點是小模型提示詞要寫好、要分批、要有重試機制,這幾件事設計好,一整套流程跑起來非常順手,翻譯品質也遠勝 Google 翻譯。

痛點:LLM 如何做翻譯?

因為 LLM 翻譯,特別是小模型,最大的麻煩是「對齊」,模型常會偷偷合併、拆分或漏句,譯文就對不回時間軸了。

這邊 Claude 設計的解法是:給每句一個 [編號]

  • 系統提示裡把規則講死(編號數量、順序必須一模一樣,不可合併拆分漏句)。
  • 用一次送一批帶編號的句子當輸入,再放幾句上下文當參考;輸出的部分必須要用指定的格式回傳,對得上才過。
  • 那輸出對不上的情況呢?就做重試機制,最多可以重試 N 次,若還是不行就先繼續下一批,這批先保留原文。
  • 每次成功的進度先寫進 JSON 檔案,下次可以直接做「斷點續傳」,隨時中斷也不會白做工。

心得

  • 這樣一來,從影片到中文字幕,全程在本機完成,不用上傳、不用等線上服務,不會被審查,而且成功率極高。
  • 這套流程我覺得還算滿意,可以給 80 分,夠用就好了,如果有更好的方法也可以跟我說。
  • 花幾個小時來回跟 Claude 嘴砲,設計流程、修正流程還滿有趣的。(感謝老闆的 Token)

筆記

  1. Whisper:影音轉錄字幕檔
  2. Ollama:用本地 LLM 翻譯字幕