AI 翻译外语视频并配上中文字幕

769 阅读4分钟

手上攒了一堆说外语的小视频看不懂怎么办?这篇文章将探讨一下翻译纯口语(无字幕)的外语视频的翻译工具链。

方案探讨

(仅对实操感兴趣可跳过本章)

我们讨论的是没有字幕的外语视频,就是视频里的人巴巴巴直接说外语的那种。这种可以用 Open AI 的 Whisper 来做翻译。这个 AI 工具无需调用云服务,在本地就可以运行。如果你的显存过小,Whisper 还提供小尺寸的模型可供你用。实测下来识别非常准确,哪怕混有背景音乐、音效声,也能保证识别准确。

考虑到 Whisper 需要输入音频文件,因此,我们需要将视频中的音轨提取出来。这里我们可以用到 ffmpeg,这是一款开源的多媒体编辑框架。它可以很轻松地将视频中的音轨提取出来。

之后,Whisper 会将视频翻译成片段,这些片段包含时间戳信息(你可以简单地理解为某种字幕文件)。我们需要将片段中的外文提取出来,再使用 LLM(某种 AI,类似前段时间很火的 ChatGPT)将它们翻译。此步骤务必保证原文与译文一一对应,只有这样,才能在翻译后将译文精准地替换原文,从而与音频时间戳对准。

至此,我们得到了一段翻译过的片段信息(原文被替换为译文),将这个片段转为 SRT 格式的文件(一种字幕格式文件)。将 SRT 文件再次传给 ffmpeg,让它将其烧录到原视频上,如此一来,一个配上翻译字幕的视频便制作完成了。

好了,看起来这一长串步骤,每一步都能在市面上找到方案,但是串起来似乎需要程序来操作呢?这里是不是要写一些代码呢?这里,用我准备好的开源库 videos-translater 就行了。

准备运行环境

使用 oomol 来确保 videos-translater 的运行环境。oomol 使用容器技术,可以在设备中虚拟出一个 Linux 环境,这样可确保 videos-translater 中的所有依赖项能顺利安装,代码能在一致的环境中运行。

oomol 可以在官网下载,打开社区商店页面,输入名字并打开 videos-translater 的页面。

Video transalter

点击右上角的“Open by OOMOL Stduio” 下载并打开。第一次打开时,oomol 会在容器中下载并安装 books-translater 的各种依赖项(如下图),需要耐心等待它安装完毕。

oomol 正在安装项目所需的依赖项

配置翻译选项

等待初始化完成,我们在 Video path 区块配置要翻译的外语视频文件地址(左下箭头)。然后点击 Video preview 区块的播放按钮……

可以预览我们设置的这个视频内容。

然后找到 Whisper model 区块,设置 dir_path 字段为一个准备好的文件夹。这个文件夹用来下载 Whisper 的模型文件。你也可以不设置这个字段,这样一来每次运行 Whisper 都要下载一次模型(很浪费时间,建议还是配置一下)。

然后,找到 Translate text list 区块。将 source 设置成视频的语言,将 target 设为目标语言(一般是中文吧)。

最后,找到 Media Merge 区块。将 formate 设置为你希望的最终烧录上字幕的视频格式(一般选 MP4 好了)。将 file_name 设置为文件名,save_address 设置为存储文件的文件夹地址。

运行

单击右上角的播放键,就可以运行了。

运行过程就是按照 books-translater 安排的流程,先拆音频,再用 Whisper 提取文字,再用大语言模型翻译,最后烧录成视频文件(效果如下)。

使用自定义 AI 翻译

如上所述的过程中,会使用 oomol 默认的 AI。这个 AI 虽然是免费的,但每日有上限。如果你希望使用自己买的 AI 来翻书,可以在 Translate texts list 区块中做如下配置。

首先,将 llm_api 字段的值由 OOMOL 改成你的 AI 的 API 类型。目前该项目支持 OpenAI、Claude、Gemini 三种。

然后,在 model 字段中填入你的模型。在 url 中填入你的 AI 的 URL(如果你刚好使用 OpenAI 或 Claude 的官方 AI,可不填)。

最后,为 api_key 配置你的 AI 密钥。oomol 是不允许直接将密钥填入字段的, 需要进入密码中心先添加。密码中心的入口如下图所示。