V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
JCZ2MkKb5S8ZX9pq
V2EX  ›  Google App Engine

Google 文本转语音的轮子 谁搞过?

  •  
  •   JCZ2MkKb5S8ZX9pq · 2018-08-23 19:23:55 +08:00 · 7974 次点击
    这是一个创建于 2313 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

    是为了做视频配音。然后一句句去下载很麻烦嘛,就想搞个轮子。
    自动识别多行文本,或者 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 这个接口?

    或者有其它轮子也可以推荐一下

    第 1 条附言  ·  2018-08-24 15:31:26 +08:00

    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)
    
    
    29 条回复    2018-08-25 15:28:16 +08:00
    popbones
        1
    popbones  
       2018-08-23 19:46:42 +08:00 via iPhone
    Mac OS X 系统自带文本转语音,命令行直接调用 say 命令研究一下
    bfpiaoran
        2
    bfpiaoran  
       2018-08-23 19:47:10 +08:00
    直接谷歌翻译不行么。。。。
    ReVanTis
        3
    ReVanTis  
       2018-08-23 19:50:58 +08:00 via Android
    以前试过用 google tts 和 yandex 的 tts 做 alexa skill,那时候还不太懂改一些请求的参数,也是发现需要转码率和采样率,最终还是用了讯飞的离线库搞定的。
    nuko
        4
    nuko  
       2018-08-23 20:01:45 +08:00
    我记得讯飞有接口,语音转 TTS 的
    JCZ2MkKb5S8ZX9pq
        5
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-23 20:11:17 +08:00
    @popbones 嗯,有机会看看。不过这次的最终使用者,用的是 win。
    JCZ2MkKb5S8ZX9pq
        6
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-23 20:12:04 +08:00
    @ReVanTis @nuko 嗯 我看下讯飞
    xubeiyan
        7
    xubeiyan  
       2018-08-23 20:47:35 +08:00 via Android
    tts 很多家都有的啊,百度的也可以啊
    JCZ2MkKb5S8ZX9pq
        8
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-23 21:39:44 +08:00
    @xubeiyan 百度心理上比较抵触 ( ╯□╰ )
    yamedie
        9
    yamedie  
       2018-08-23 21:49:10 +08:00
    百度的 api 比讯飞大方, 普通开发者每日调用限额 20W 次, 对比讯飞的 500 次
    ksharp8
        10
    ksharp8  
       2018-08-23 22:48:33 +08:00
    可以试用科大讯飞的 api,还支持多种方言
    WildCat
        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 发布下。
    WildCat
        12
    WildCat  
       2018-08-23 23:03:07 +08:00
    额 百度的封装还没做,今晚搞定。
    kimwang
        13
    kimwang  
       2018-08-24 02:16:58 +08:00
    不是 IT 人,不会搞,但对这个非常需要,特别是粤语的,给文化低的老人家读字,听她喜欢的东西。
    支持楼主继续搞事情。
    JCZ2MkKb5S8ZX9pq
        14
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-24 02:45:38 +08:00
    @kimwang 用了讯飞的,有支持粤语。
    我是有明确的实际应用,可能并不适合你。
    但你可以搜索看看,应该挺多人搞过了。比如我洗澡的时候就会让 safari 读网页听,应该有类似工具吧。
    Yvette
        15
    Yvette  
       2018-08-24 04:55:21 +08:00
    say +1
    helloiac
        16
    helloiac  
       2018-08-24 07:24:04 +08:00 via Android
    fingerprint
        17
    fingerprint  
       2018-08-24 10:39:27 +08:00
    讯飞、百度、谷歌都用过。如果是英文转语音建议用谷歌,最好是在国外的 vps 上弄个服务自己用。中文的话讯飞比较好。
    JCZ2MkKb5S8ZX9pq
        18
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-24 15:14:44 +08:00
    @fingerprint 嗯,讯飞的英语太惨了,日语我都没试出来。
    JCZ2MkKb5S8ZX9pq
        19
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-24 15:15:34 +08:00
    @helloiac 666 不过我已经搞完了。我们后期还是会自己加剪辑的。
    JCZ2MkKb5S8ZX9pq
        20
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-24 15:32:50 +08:00
    py3 调用讯飞 tts 的代码,直接 append 分享了。
    其中 params 格式化那步有点坑,测了半天才发现是引号和空格的问题,按理说后端应该判断下。
    感谢大家的建议。
    yo0o0o0
        21
    yo0o0o0  
       2018-08-24 15:43:32 +08:00
    我有写好的用 node,调百度的 api。https://github.com/JesseHeisenberg/txtToAudio
    jinggoing
        22
    jinggoing  
       2018-08-24 17:16:39 +08:00
    没有人用过思必驰的语音吗
    fxg
        23
    fxg  
       2018-08-24 17:19:08 +08:00
    推荐百度,感觉百度的技术和营销部门是完全两个世界
    zhchyu999
        24
    zhchyu999  
       2018-08-24 17:22:10 +08:00 via Android
    讯飞是相当贵,自己的模型更贵
    est
        25
    est  
       2018-08-24 17:25:57 +08:00
    @ReVanTis 讯飞之前官方不提供 python 离线包,理由是脚本语言可以被反编译。。不知道现在如何了。。
    diggerdu
        26
    diggerdu  
       2018-08-25 07:35:07 +08:00 via iPhone
    @jinggoing 思必驰技术可以的 交大办的
    947211232
        27
    947211232  
       2018-08-25 08:39:45 +08:00
    #14 不放过一丝汲取知识的机会,为在下打开了新视野。
    JCZ2MkKb5S8ZX9pq
        28
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-25 15:25:19 +08:00
    @fxg 这个我认同,百度有些计数部门是不错。
    之前用 echart 在 github 交流过一阵,还不错的。现在 echart 也还在用,不过也想尝试 d3。
    JCZ2MkKb5S8ZX9pq
        29
    JCZ2MkKb5S8ZX9pq  
    OP
       2018-08-25 15:28:16 +08:00
    @est 好像搜到过 py 的离线版,用了在线版主要是考虑效果好一点。
    不过对我们短片配音来说,那种拙劣的机器人感,有时候反而效果更好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   971 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:12 · PVG 03:12 · LAX 11:12 · JFK 14:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.