利用Google Translate API翻譯 SRT 字幕

這篇文章算的是影片自動產生字幕,並使用字幕軟體Aegisub修改編輯 (1)與使用 Google Cloud Translate API的結合。利用 Autosub 產生字幕獲得不少迴響和瀏覽,一部份是使用上的問題。另一部份是,有些使用者不只是要為中文影片上繁體字幕而已,有的還希望為英文上中文字幕、俄羅斯文、日文…想不到需求還蠻大的。

網路上利用autosub類似的文章也不少,但大家都碰到一個問題。沒辦法在不同語系間上字幕,例如英文影片就不能幫它上中文字幕。autosub 本身其實有個 -K 的參數可以指定要使用的 Google API 金鑰。但測試的結果是程式會 crash…這也是沒辦法的事,免費的比較少維護。

不同語系上字幕怎麼做的

前兩天也是花了一些時間研究一下這個翻譯的問題,發現似乎它也是先用 Google 的語音辨識成同語系,再呼叫 Google Translate API 來做翻譯。說到底也不是特別難,當然可以整合進去就更方便了。另外一個收獲是發現autosub是怎麼斷句的,有看到一個關鍵的 function 叫做 Energyxxx(),估計是判斷哪時沒講話或比較小聲,就在些時候做斷句。

上不同語系字幕替代方案

如果真的非得為影片上不同語系的字幕,這邊建議的做法還是先用  autosub 跑出同語系的結果 (ex. 英–>英, 繁中–>繁中)。然後再用 Google Translate API 來做翻譯,這樣其實就是把 .srt 檔貼到 Google 翻譯的結果。只是免費的 Google 翻譯,沒辦法一次翻太多行。

下面就是我自己寫的利用 Google Translate API 翻譯 .srt 檔的 python 程式,這個程式會吃一個參數,也就是要翻譯的 .srt 檔案。翻譯完會產生同檔名再加上 “.cht” 的字幕檔。從程式中可以看到 source 與 target 變數,就是設成要翻譯的語系,使用者可以根據自己的需求來改。

另外,最重要的是你要申請自己的 Google Translate API 金鑰才能翻譯。金鑰的申請流程可以參考 使用 Google Cloud Translate API 這篇文章,在執行python程式前,也記得把 CREDENTIAL 的所在位置 export 出來,才可以正確執行。

export GOOGLE_APPLICATION_CREDENTIALS=$HOME/translate.json