利用 Google Cloud AI 产品为视频增加翻译字幕
作者:MeshCloud CSM 高现起
引言
一个外企客户手里有一些英文视频,为了更好的服务国内客户,希望把这些英文视频加上中文字幕,以方便国内客户的观看。因为已经大量使用了 Google Cloud 的产品,希望探索和使用 Google Cloud AI 产品来完成为视频增加中文字幕。
该文档同样适用于为中文视频添加英语字幕等一种语言的视频添加其他语种的字幕场景,目前支持100多种语言相互翻译。
目标
利用 Google Cloud AI 等产品为视频增加翻译字幕
工作流程
以英文视频转为中文字幕视频为例:
英文视频--》提前英文音轨--》提取英文文本(使用 Cloud Speech API)--》翻译中文文本(使用 Cloud Translation API)--》生成中文字幕文件--》合成中文字幕的英语视频
详细流程:
- 从视频自动提取音轨,自动检测音频采样率和声道数量
- 利用谷歌云 Speech-to-Text API将音频转译成文本,并加入字幕时间戳
- 利用谷歌云 Translation API将文本翻译为指定语言
- 转换文本为字幕格式
- 把字幕硬编码进视频中
- 无服务器方案,使用 Google Cloud Run,免去设置服务器和扩展的麻烦
系统架构
使用到的 Google Cloud 产品
- Cloud Speech API -- 语音转换成文本
- Cloud Translation API -- 翻译
- Cloud Run -- 无服务计算
- Pub/Sub -- 全球消息队列
- Cloud Storage -- 对象存储
- IAM -- 身份与认证
实施步骤
您可以在 Cloud Shell 或您自己的 PC 中使用 gcloud 命令执行以下命令
0.前置请求
您需要启用Speech API、Cloud Run API、Translate API、Pubsub API、Eventarc API,如果您还没有启用的话。
gcloud services enable \
speech.googleapis.com \
translate.googleapis.com \
run.googleapis.com \
pubsub.googleapis.com \
eventarc.googleapis.com
确认执行程序所需的IAM服务账号,需要权限至少包括:GCS读写,Speech-to-Text API, Translation API。或使用默认的 compute 服务账号,自带有整个项目的 Edit 权限。
1.下载代码并部署到 Cloud Run 服务
git clone https://github.com/OrganizationBin/trans_video_subs
cd trans_video_subs/Serverless
gcloud run deploy <CLOUD-RUN-NAME> --source . \
--concurrency=1 \
--memory=1024Mi \
--ingress=internal \
--timeout=600 \
--no-allow-unauthenticated \
--service-account=<SERVICE-ACCOUNT@PROJECT.iam.gserviceaccount.com> \
--set-env-vars=video_src_language_code=en-US \
--set-env-vars=translate_src_code=en \
--set-env-vars=translate_des_code=zh \
--set-env-vars=merge_sub_to_video=False \
--set-env-vars=two_step_convert=False
此命令将自动构建容器并部署到 Cloud Run。请记住将 CLOUD-RUN-NAME 和SERVICE-ACCOUNT@
http://
PROJECT.iam.gserviceaccount.com
替换为您自己的。您可以根据视频大小调整内存和超时。
以下是环境变量说明:
- video_src_language:视频语言代码。参考 Speech-to-Text API 语言代码文档
- translate_src_language:源语言代码。参考 Translate API 语言代码文档
- translate_des_language :目标语言代码。参考 Translate API 语言代码文档
- merge_sub_to_video:True 表示自动将 srt 字幕硬编码成 Video,同时输出 srt 字幕文件。false 表示只输出 srt 字幕文件。
2.为上传视频创建GCS Bucket,请选择单地域Bucket。
gsutil mb -l us-central1 gs://<MY-BUCKET-NAME>
3.从 GCS Bucket 触发器创建 Eventarc 到 Cloud Run。
注意:部署eventarc trigger时,如果报ERROR类似这样:
service-xxxxxxxxxx@gs-project-accounts.iam.gserviceaccount.com has no permission to publish messages to pubsub topic
那么你需要去控制台IAM添加使用 pubsub publish 对该特定帐户的权限。
gcloud eventarc triggers create <TRIGGER-NAME> \