免费将中文视频转换为英文视频并添加中英双语字幕
背景
女朋友需要找关于《不要随意喂养动物园的动物》的英语视频,因为限定是英语类的视频,所以在国内的视频平台基本无法找到。虽然我是个程序员,但在女友的眼里,只要关于电脑的我都会,无奈只能硬着头皮上……
我第一个想法是到外网的油管上用英文去找相关的视频,但找了好几天都没有找到相关的视频,又或者找到了也不符合她的想法。因此把目光转回国内的视频平台,并最终物色到一个符合她想法的中文视频。而我要做的就是把这个中文视频转化为英文视频并添加中英双语字幕。
思路
- 首先把中文视频中的音频提取出来并识别出中文并手动调整中文中的错别字等
- 把中文翻译成英文(使用百度翻译或有道云翻译)
- 把翻译出来的英文合成为英文音频
- 制作中英双语字幕,并把视频中的原中文音频替换为英文音频
- 导出英文视频
技术
-
Python3
-
百度智能云中的语音识别中的音频文件转写功能(通过音频提取出中文)
-
有道智云平台的语音合成中的语音合成功能(通过单词句子合成为英语音频,百度接口的语音合成只能合成中文音频)
-
迅捷视频软件(添加字幕软件,有水印版免费)
-
格式工厂(视频压缩、转换等功能)
-
*Adobe Premiere(提取视频中的音频,非必需,可以使用格式工厂来处理,且是收费的)
实现
-
第一步,将视频中的音频提取。可以用格式工厂把视频转为音频(如果你有Pr的话也可以用Pr来提取音频)
-
第二步,识别出音频中的中文。这里使用到了百度智能云中的音频文件转写功能。所以首先需要先注册个账号并完成个人认证,百度智能云链接如下:https://cloud.baidu.com/
注意:使用该功能可以通过领取免费资源来获得免费时长,领取的资源有时效和总时长限制,通过https://console.bce.baidu.com/ai/#/ai/speech/overview/index此链接获取:
注册并登录后打开音频文件转写链接:https://cloud.baidu.com/doc/SPEECH/s/Bk5difx04
通过概述的三个接入步骤可以知道主要为:
创建具有音频转写功能的应用→通过该应用的AppID、API Key、Secret Key来获取token→通过token和音频链接创建音频转写任务→查询转写任务的识别结果。
代码如下:- 获取token
import requests import jsonAPI_key = "你创建应用的API Key" secret_key = "你创建应用的Secret Key" access_token_url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_key}&client_secret={secret_key}" response = requests.get(access_token_url) print(response.json()) access_token = response.json()["access_token"] # access_token即为我们需要的token
-
创建音频转写任务(音频可使用百度云对象存储进行音频存储)
post_url = "https://aip.baidubce.com/rpc/2.0/aasr/v1/create" file_url = "你的音频文件的url" body = {"speech_url": file_url, # 音频url"format": "mp3", # 音频格式"pid": 1537, # 中文"rate": 16000, # 采样率 [16000] 固定值 } token = {"access_token": access_token} # 上一步获得的token# 生成转写任务 rep = requests.post(post_url, params=token, data=json.dumps(body)) print(rep.json()) task_id = rep.json()["task_id"] # 获得我们需要的task_id
-
查询转写任务结果
query_url = "https://aip.baidubce.com/rpc/2.0/aasr/v1/query" query_body = {"task_ids": [task_id] } # 查询转写任务是否完成 rep = requests.post(query_url, params=token, data=json.dumps(query_body)) print(json.dumps(rep.json())) word = rep.json()["tasks_info"]["task_result"]["result"] # 成功了的话此变量即为我们需要的所有文字
-
第三步,使用百度翻译或有道云翻译翻译出英文
-
第四步,根据英文合成英文语音。这里用到有道智云AI开放平台。类似百度智能云平台,这里也需要注册,链接如下:https://ai.youdao.com。首次注册会赠送一些资源的时长,包括语音合成的。
注册并登录后,找到语音合成功能的页面:https://ai.youdao.com/product-tts.s
类似百度平台一样,创建应用并勾选语音合成:
找到技术文档:产品文档-语音合成TTS服务
把Python3的示例拷下来并修改对应的内容:执行语音合成:
import sys import uuid import requests import hashlib import timeYOUDAO_URL = 'https://openapi.youdao.com/ttsapi' APP_KEY = '你的的应用ID' APP_SECRET = '你的应用密钥'def encrypt(signStr):hash_algorithm = hashlib.md5()hash_algorithm.update(signStr.encode('utf-8'))return hash_algorithm.hexdigest()def truncate(q):if q is None:return Nonesize = len(q)return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]def do_request(data):headers = {'Content-Type': 'application/x-www-form-urlencoded'}return requests.post(YOUDAO_URL, data=data, headers=headers)def connect():q = "你要合成的英文."name = "保存的文件名" # 文件名data = {}data['langType'] = 'en' # 要合成的语言类型salt = str(uuid.uuid1())signStr = APP_KEY + q + salt + APP_SECRETsign = encrypt(signStr)data['appKey'] = APP_KEYdata['q'] = qdata['salt'] = saltdata['sign'] = signdata['speed'] = 1response = do_request(data)contentType = response.headers['Content-Type']if contentType == "audio/mp3":print("成功")millis = int(round(time.time() * 1000))filePath = name + str(millis) + ".mp3"fo = open(filePath, 'wb')fo.write(response.content)fo.close()else:print("类型错误", response.content)if __name__ == '__main__':connect()
执行完成后将生成mp3文件
-
第五步,打开迅捷视频软件,官网:https://www.xunjieshipin.com/video-clip
添加字幕操作可百度,这里就不展开了,参考:https://jingyan.baidu.com/article/e75057f2a3918faac91a89cf.html -
最后导出视频即可。