女朋友需要找关于《不要随意喂养动物园的动物》的英语视频,因为限定是英语类的视频,所以在国内的视频平台基本无法找到。虽然我是个程序员,但在女友的眼里,只要关于电脑的我都会,无奈只能硬着头皮上……
我第一个想法是到外网的油管上用英文去找相关的视频,但找了好几天都没有找到相关的视频,又或者找到了也不符合她的想法。因此把目光转回国内的视频平台,并最终物色到一个符合她想法的中文视频。而我要做的就是把这个中文视频转化为英文视频并添加中英双语字幕。
思路 首先把中文视频中的音频提取出来并识别出中文并手动调整中文中的错别字等把中文翻译成英文(使用百度翻译或有道云翻译)把翻译出来的英文合成为英文音频制作中英双语字幕,并把视频中的原中文音频替换为英文音频导出英文视频 技术 实现
第一步,将视频中的音频提取。可以用格式工厂把视频转为音频(如果你有Pr的话也可以用Pr来提取音频)
第二步,识别出音频中的中文。这里使用到了百度智能云中的音频文件转写功能。所以首先需要先注册个账号并完成个人认证,百度智能云链接如下:
注意:使用该功能可以通过领取免费资源来获得免费时长,领取的资源有时效和总时长限制,通过此链接获取:
注册并登录后打开音频文件转写链接:
通过概述的三个接入步骤可以知道主要为:
创建具有音频转写功能的应用→通过该应用的AppID、API Key、 Key来获取token→通过token和音频链接创建音频转写任务→查询转写任务的识别结果。
代码如下:
获取token
import requests
import json
API_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开放平台。类似百度智能云平台,这里也需要注册,链接如下:。首次注册会赠送一些资源的时长,包括语音合成的。
注册并登录后,找到语音合成功能的页面:
类似百度平台一样,创建应用并勾选语音合成:
找到技术文档:产品文档-语音合成TTS服务
把的示例拷下来并修改对应的内容:
执行语音合成:
import sys
import uuid
import requests
import hashlib
import time
YOUDAO_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 None
size = 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_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = q
data['salt'] = salt
data['sign'] = sign
data['speed'] = 1
response = 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文件
第五步,打开迅捷视频软件,官网:
添加字幕操作可百度,这里就不展开了,参考:
最后导出视频即可。