一、Edge-TTS安装
Edge-TTS是一个Python库,它使用微软的Azure Cognitive Services来实现文本到语音转换(TTS)。该库提供了一个简单的API,可以将文本转换为语音,并且支持多种语言和声音。要使用Edge-TTS库,首先需要安装上Edge-TTS库,安装直接使用pip 进行安装即可。
pip install edge-tts
我这里是基于python3.9,在自己的终端窗口中,输入以上安装命令,便会自动安装Edge-TTS
安装完成后,我们可以输入edge-tts,若cmd窗口中输出提示信息,说明已经安装完成。
sage: edge-tts [-h] [-t TEXT] [-f FILE] [-v VOICE] [-l] [--rate RATE] [--volume VOLUME] [-O OVERLAPPING]
[--write-media WRITE_MEDIA] [--write-subtitles WRITE_SUBTITLES] [--proxy PROXY]
edge-tts: error: one of the arguments -t/--text -f/--file -l/--list-voices is required
二、基本使用
如果要直接在cmd命令行中使用Edge-TTS,我们只需要使用如下命令来运行即可:
edge-tts --text "Hello, world!" --write-media hello.mp3
以上运行完成后,便会在本地生成一个hello.mp3的音频文件,但是这里是默认的语音,我们需要改变语音,来实现符合自己要求的语音,且默认的语音只支持英文。
我们可以直接在cmd窗口中输入如下命令行来查看edge-tts支持的语音:
edge-tts --list-voices
Name: af-ZA-AdriNeural Gender: Female
........
........
........
Name: zh-CN-XiaoxiaoNeural Gender: Female
Name: zh-CN-XiaoyiNeural Gender: Female
Name: zh-CN-YunjianNeural Gender: Male
Name: zh-CN-YunxiNeural Gender: Male
Name: zh-CN-YunxiaNeural Gender: Male
Name: zh-CN-YunyangNeural Gender: Male
Name: zh-CN-liaoning-XiaobeiNeural Gender: Female
Name: zh-CN-shaanxi-XiaoniNeural Gender: Female
Name: zh-HK-HiuGaaiNeural Gender: Female
Name: zh-HK-HiuMaanNeural Gender: Female
Name: zh-HK-WanLungNeural Gender: Male
Name: zh-TW-HsiaoChenNeural Gender: Female
Name: zh-TW-HsiaoYuNeural Gender: Female
Name: zh-TW-YunJheNeural Gender: Male
Name: zu-ZA-ThandoNeural Gender: Female
Name: zu-ZA-ThembaNeural Gender: Male
这里会打印出来所有支持的语音,字母zh开头的便是支持中文的语音,我们使用zh-CN-YunxiNeural,来听听zh-CN-YunxiNeural生成的语音,你不是听过。这里我们只需要添加--voice命令,来指定输出的语音。
edge-tts --voice zh-CN-YunxiNeural --text "hello 大家好,这里是程序员盒子" --write-media hello.mp3
命令行执行完成后,我们可以从cmd命令行中看到,不仅edge-tts可以生成语音,还特意生成了字幕文件,我们可以把这些字幕输入到视频剪辑文件中,就可以自动添加字幕了。
WEBVTT
00:00:00.100 --> 00:00:00.700
hello
00:00:00.800 --> 00:00:01.075
大家
00:00:01.075 --> 00:00:01.387
好
00:00:01.712 --> 00:00:02.000
这里
00:00:02.000 --> 00:00:02.237
是
00:00:02.263 --> 00:00:02.850
人工智能
00:00:02.862 --> 00:00:03.350
研究所
当然edge-tts还支持调整语速与音量,我们只需要添加rate与volume指令
edge-tts --voice zh-CN-YunxiNeural --rate=-4% --text "hello 大家好,这里是人工智能研究所" --write-media hello1.mp3
edge-tts --voice zh-CN-YunxiNeural --volume=-4% --text "hello 大家好,这里是人工智能研究所" --write-media hello1.mp3
rate=-4% 意思是语速降低4%,volume=-4%意思是音量降低4%,当然若是加号,便是增加多少。
三、集成EdgeTTS
问题:在上面的介绍中,我们使用的是命令的方式来运行合成语音文件,但是如果是个web产品,如何集成这个能力呢?其实我们就是希望可以得倒一个API接口,可以直接调用api,实现tts功能的产品化。
这里使用python的FastApi提供了一个POST请求的接口,创建tts.py:
import uvicorn
import edge_tts
import asyncio
from fastapi import FastAPI, Request, Body
app
= FastAPI()
@app.post("/api/tts")
async def post_data(text: str = Body('', title = '文本', embed = True),
voice: str = Body('', title = '语言参数', embed = True),
name: str = Body('', title = '文件名', embed = True),
rate: str = Body('', title = '文件名', embed = True),
volume: str = Body('', title = '文件名', embed = True)):
output = "/home/work/tts/result/" + name + ".mp3"
tts = edge_tts.Communicate(text = text, voice = voice, rate = rate, volume=volume)
await tts.save(output)
return {"message": output}
if name == 'main':
uvicorn.run('tts:app', host = '0.0.0.0', post = 8080)
创建启动文件 tts.sh:
使用nohup后台启动运行服务(线上部署在linux,需要保证服务一直处于运行态)
--host 0.0.0.0表示允许搜索id可以访问这个api服务,
--port8080是访问端口(可以修改)
nohup uvicorn tts:app --host 0.0.0.0 --port 8080 >../tts/tts.log &
#gunicorn tts:app -b 0.0.0.0:8099 -w 4 -k uvicorn.workers.UvicornWorker --daemon
tail -20f ../tts/tts.log
修改tts.sh 为可执行文件:
chmod 777 tts.sh
启动服务
./tts.sh
api测试
curl --location --request POST 'http://127.0.0.1:8080/api/tts' \
--header 'Content-Type: application/json' \
--data-raw '{
"text": "你好, 这里是AIGOpen,AIGC应用能力开放平台!",
"name": "123",
"voice": "zh-CN-XiaoxiaoNeural",
"rate": "-4%",
"volume": "+0%"
}'
好啦,人人都可以搭建一套自己的TTS服务啦