借助AI来自动生成和翻译字幕

47 min read

先把视频放到Google Drive,然后从Google Colab上运行代码,并且在Colab加载整个Whisper模型,这样并不受API请求限制的影响,可以快速完成转录。语音转字幕后,再借助ChatGPT的API对字幕逐行翻译,最后再人工校对就好了。

N46Whisper 是基于 Google Colab 的应用。开发初衷旨在提高乃木坂46(以及坂道系)字幕组的工作效率。但本应用也适于所有日语视频的字幕制作。此应用基于AI语音识别模型 Whisper,应用输出文件为ass或srt格式,内置指定字幕组的字幕格式,可直接导入 Aegisub 进行后续翻译及时间轴校正

使用方法:
点击这里在Google Colab中打开应用.
上传要识别的文件并运行应用
识别完成后ass文件会自动下载到本地.
使用ChatGPT的API进行翻译,可以自动翻译成多种语言。在本例中,使用英语作为目标语言进行翻译。使用以下代码进行翻译:

import openai_secret_manager

assert "openai" in openai_secret_manager.get_services()
secrets = openai_secret_manager.get_secret("openai")

import openai
openai.api_key = secrets["api_key"]

def translate(text, source_lang, target_lang):
    model_engine = "text-davinci-002"
    prompt = (f"Please translate the following text from {source_lang} to {target_lang}:\n"
              f"{text}\n"
              f"Translated: ")
    completions = openai.Completion.create(engine=model_engine, prompt=prompt, max_tokens=1024, n=1,stop=None,temperature=0.7)
    message = completions.choices[0].text
    return message.strip()

将完整的字幕文件读入,并按行逐一翻译。注意,这将花费较长时间,因此可以使用 tqdm 库中的 tqdm 函数来显示进度条。

import tqdm

# read in the subtitles file
with open("subtitles.ass", "r", encoding="utf8") as file:
    text = file.read()

# translate the subtitles
lines = text.split("\n")
for i, line in tqdm.tqdm(enumerate(lines)):
    if "Dialogue" in line:
        parts = line.split(",", 9)
        start_time = parts[1]
        end_time = parts[2]
        style = parts[3]
        name = parts[4]
        margin_l = parts[5]
        margin_r = parts[6]
        margin_v = parts[7]
        text = parts[9]
        translated_text = translate(text, "ja", "en")
        lines[i] = f"{parts[0]},{start_time},{end_time},{style},{name},{margin_l},{margin_r},{margin_v},{translated_text}"
        
# save the translated subtitles
with open("translated_subtitles.ass", "w", encoding="utf8") as file:
    file.write("\n".join(lines))

最后,用文本编辑器打开生成的翻译字幕,检查和纠正任何错误。现在,就可以使用这些字幕了,而且无需手动录入和翻译!