是为了做视频配音。然后一句句去下载很麻烦嘛,就想搞个轮子。
自动识别多行文本,或者 excel,然后每段落单独下载为 mp3,这样比较方便。
目前是直接去摸了 gcloud 官方的 api 啦,传送门:
Quickstart: Using the Client Libraries | Cloud Text-to-Speech API | Google Cloud
现在全局开着飞机,但跑 sample.py 还是会 504 超时。(访问 google 或 youtube 或 g trans 都 ok 的)
想请问有没有人用过 google 这个接口?
或者有其它轮子也可以推荐一下
py3调用讯飞tts,分享下。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
这是利用了 讯飞 的 在线文本转语音 api,把单句文本转为语音文件,并保存到本地。
需要先填入 APPID 和 API_KEY。
详情见 https://www.xfyun.cn/services/online_tts
'''
import json
import requests
import time
import hashlib
import base64
import os
URL = 'http://api.xfyun.cn/v1/service/v1/tts'
AUE = 'lame' # raw=wav, lame=mp3
APPID = ''
API_KEY = ''
def getHeader():
curTime = str(int(time.time())).encode('utf-8')
param = {
'aue': AUE,
'auf': 'audio/L16;rate=16000',
'voice_name': 'xiaoyan',
'engine_type': 'intp65',
}
paramBytes = str(param).encode('utf-8')
# fix format (if ' or space exists, returns params error.)
paramBytes = paramBytes.replace(b'\'', b'\"').replace(b' ', b'')
paramBase64 = base64.b64encode(paramBytes)
m2 = hashlib.md5()
m2.update(API_KEY.encode('utf-8') + curTime + paramBase64)
checkSum = m2.hexdigest()
header = {
'X-CurTime': curTime,
'X-Param': paramBase64,
'X-Appid': APPID,
'X-CheckSum': checkSum,
'X-Real-Ip': '127.0.0.1',
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
}
return header
def xunfei_tts(text):
header = getHeader()
data = {'text': text}
r = requests.post(URL, headers=header, data=data)
if r.headers['Content-Type'] == "audio/mpeg":
print("success | sid: %s | %s" % (r.headers['sid'], text[:10]))
return r.content
else:
print(r.text)
if __name__ == '__main__':
text = '床前明月光,疑是地上霜。'
text += 'The moonlight flow on the floor, just like frost.'
result = xunfei_tts(text)
if result:
root = os.path.split(os.path.realpath(__file__))[0]
ext = '.wav'if AUE == "raw" else '.mp3'
file = os.path.join(root, 'test' + ext)
with open(file, 'wb') as f:
f.write(result)
1
popbones 2018-08-23 19:46:42 +08:00 via iPhone
Mac OS X 系统自带文本转语音,命令行直接调用 say 命令研究一下
|
2
bfpiaoran 2018-08-23 19:47:10 +08:00
直接谷歌翻译不行么。。。。
|
3
ReVanTis 2018-08-23 19:50:58 +08:00 via Android
以前试过用 google tts 和 yandex 的 tts 做 alexa skill,那时候还不太懂改一些请求的参数,也是发现需要转码率和采样率,最终还是用了讯飞的离线库搞定的。
|
4
nuko 2018-08-23 20:01:45 +08:00
我记得讯飞有接口,语音转 TTS 的
|
5
JCZ2MkKb5S8ZX9pq OP @popbones 嗯,有机会看看。不过这次的最终使用者,用的是 win。
|
6
JCZ2MkKb5S8ZX9pq OP |
7
xubeiyan 2018-08-23 20:47:35 +08:00 via Android
tts 很多家都有的啊,百度的也可以啊
|
8
JCZ2MkKb5S8ZX9pq OP @xubeiyan 百度心理上比较抵触 ( ╯□╰ )
|
9
yamedie 2018-08-23 21:49:10 +08:00
百度的 api 比讯飞大方, 普通开发者每日调用限额 20W 次, 对比讯飞的 500 次
|
10
ksharp8 2018-08-23 22:48:33 +08:00
可以试用科大讯飞的 api,还支持多种方言
|
11
WildCat 2018-08-23 23:02:07 +08:00
我做了百度和腾讯 AI 的封装,最近太忙就没完善。
https://github.com/imWildCat/AITK/blob/master/aitk/cloud/tencent/speech.py#L98 官网: https://aitk.ai 需要的话,我把文档和 pip 发布下。 |
12
WildCat 2018-08-23 23:03:07 +08:00
额 百度的封装还没做,今晚搞定。
|
13
kimwang 2018-08-24 02:16:58 +08:00
不是 IT 人,不会搞,但对这个非常需要,特别是粤语的,给文化低的老人家读字,听她喜欢的东西。
支持楼主继续搞事情。 |
14
JCZ2MkKb5S8ZX9pq OP |
15
Yvette 2018-08-24 04:55:21 +08:00
say +1
|
16
helloiac 2018-08-24 07:24:04 +08:00 via Android
看看这个 https://evaread.net/
|
17
fingerprint 2018-08-24 10:39:27 +08:00
讯飞、百度、谷歌都用过。如果是英文转语音建议用谷歌,最好是在国外的 vps 上弄个服务自己用。中文的话讯飞比较好。
|
18
JCZ2MkKb5S8ZX9pq OP @fingerprint 嗯,讯飞的英语太惨了,日语我都没试出来。
|
19
JCZ2MkKb5S8ZX9pq OP @helloiac 666 不过我已经搞完了。我们后期还是会自己加剪辑的。
|
20
JCZ2MkKb5S8ZX9pq OP py3 调用讯飞 tts 的代码,直接 append 分享了。
其中 params 格式化那步有点坑,测了半天才发现是引号和空格的问题,按理说后端应该判断下。 感谢大家的建议。 |
21
yo0o0o0 2018-08-24 15:43:32 +08:00
我有写好的用 node,调百度的 api。https://github.com/JesseHeisenberg/txtToAudio
|
22
jinggoing 2018-08-24 17:16:39 +08:00
没有人用过思必驰的语音吗
|
23
fxg 2018-08-24 17:19:08 +08:00
推荐百度,感觉百度的技术和营销部门是完全两个世界
|
24
zhchyu999 2018-08-24 17:22:10 +08:00 via Android
讯飞是相当贵,自己的模型更贵
|
27
947211232 2018-08-25 08:39:45 +08:00
#14 不放过一丝汲取知识的机会,为在下打开了新视野。
|
28
JCZ2MkKb5S8ZX9pq OP @fxg 这个我认同,百度有些计数部门是不错。
之前用 echart 在 github 交流过一阵,还不错的。现在 echart 也还在用,不过也想尝试 d3。 |
29
JCZ2MkKb5S8ZX9pq OP @est 好像搜到过 py 的离线版,用了在线版主要是考虑效果好一点。
不过对我们短片配音来说,那种拙劣的机器人感,有时候反而效果更好。 |