這篇文章算的是影片自動產生字幕,並使用字幕軟體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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# -*- coding: utf-8 -*- import os import sys from google.cloud import translate_v2 as translate if len(sys.argv) < 2: print "Need one arg for english subtitle source" sys.exit(1) translate_client = translate.Client() inputfile = sys.argv[1] source = 'en' target = 'zh-TW' f=open(inputfile, "r") out=open(inputfile+".cht","w") script=0 while True: seq=f.readline() duration=f.readline() text=f.readline().replace("\n","") crlf=f.readline() if not text: break; script=script+1 translation = translate_client.translate( text, source_language=source, target_language=target) print "Translate script " + str(script) + " done." result=translation['translatedText'] out.write(seq) out.write(duration) out.write(result.encode("utf-8")+"\n") out.write(crlf) if not crlf: break; f.close() sys.exit(0) |