edge-tts微软文本转语音库,来听听这些语音是否很熟悉?

360影视 2023-04-06 14:38 2

摘要:上期图文教程,我们分享了Azure机器学习的文本转语音的账号申请与API申请的详细步骤,也介绍了基于python3实现Azure机器学习文本转语音功能的代码实现过程,虽然我们可以使用Azure账号免费提供一年的试用期,但是毕竟是要付费的,我们的API也无法长期

上期图文教程,我们分享了Azure机器学习的文本转语音的账号申请与API申请的详细步骤,也介绍了基于python3实现Azure机器学习文本转语音功能的代码实现过程,虽然我们可以使用Azure账号免费提供一年的试用期,但是毕竟是要付费的,我们的API也无法长期使用,好在微软发布了edge-tts库,此库继承了Azure的文本转语音功能,且是免费使用的,本期我们就介绍一下edge-tts的使用。也许你听到如下生成的声音,你会发现很是熟悉。

Edge-TTS是一个Python库,它使用微软的Azure Cognitive Services来实现文本到语音转换(TTS)。该库提供了一个简单的API,可以将文本转换为语音,并且支持多种语言和声音。要使用Edge-TTS库,首先需要安装上Edge-TTS库,安装直接使用pip 进行安装即可。

pip install edge-tts

这里本期的代码基于python3.9,在自己的cmd窗口中,输入以上安装命令,便会自动安装Edge-TTS

Collecting edge-tts Downloading edge_tts-6.1.3-py3-none-any.whl (26 kB)Collecting aiohttp>=3.8.0 Downloading aiohttp-3.8.4-cp39-cp39-win_amd64.whl (323 kB)|████████████████████████████████| 323 kB 17 kB/sCollecting aiosignal>=1.1.2 Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)Collecting charset-normalizer=2.0 Downloading charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl (97 kB)|████████████████████████████████| 97 kB 20 kB/sCollecting yarl=1.0 Downloading yarl-1.8.2-cp39-cp39-win_amd64.whl (56 kB)|████████████████████████████████| 56 kB 20 kB/sCollecting frozenlist>=1.1.1 Downloading frozenlist-1.3.3-cp39-cp39-win_amd64.whl (34 kB)Collecting multidict=4.5 Downloading multidict-6.0.4-cp39-cp39-win_amd64.whl (28 kB)Collecting attrs>=17.3.0 Downloading attrs-22.2.0-py3-none-any.whl (60 kB)|████████████████████████████████| 60 kB 20 kB/sCollecting async-timeout=4.0.0a3 Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB)Collecting idna>=2.0 Using cached idna-3.4-py3-none-any.whl (61 kB)Installing collected packages: frozenlist, aiosignal, charset-normalizer, multidict, idna, yarl, attrs, async-timeout, aiohttp, edge-ttsSuccessfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 attrs-22.2.0 charset-normalizer-3.1.0 edge-tts-6.1.3 frozenlist-1.3.3 idna-3.4 multidict-6.0.4 yarl-1.8.2

安装完成后,我们可以输入edge-tts,若cmd窗口中输出提示信息,说明已经安装完成。

usage: 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-voicesName: af-ZA-AdriNeural Gender: FemaleName: zh-CN-XiaoxiaoNeural Gender: FemaleName: zh-CN-XiaoyiNeural Gender: FemaleName: zh-CN-YunjianNeural Gender: MaleName: zh-CN-YunxiNeural Gender: MaleName: zh-CN-YunxiaNeural Gender: MaleName: zh-CN-YunyangNeural Gender: MaleName: zh-CN-liaoning-XiaobeiNeural Gender: FemaleName: zh-CN-shaanxi-XiaoniNeural Gender: FemaleName: zh-HK-HiuGaaiNeural Gender: FemaleName: zh-HK-HiuMaanNeural Gender: FemaleName: zh-HK-WanLungNeural Gender: MaleName: zh-TW-HsiaoChenNeural Gender: FemaleName: zh-TW-HsiaoYuNeural Gender: FemaleName: zh-TW-YunJheNeural Gender: MaleName: zu-ZA-ThandoNeural Gender: FemaleName: 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可以生成语音,还特意生成了字母文件,我们可以把这些字幕输入到视频剪辑文件中,就可以自动添加字幕了。

WEBVTT00:00:00.100 --> 00:00:00.700hello00: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.mp3edge-tts --voice zh-CN-YunxiNeural --volume=-4% --text "hello 大家好,这里是人工智能研究所" --write-media hello1.mp3

rate=-4% 意思是语速降低4%,volume=-4%意思是音量降低4%,当然若是加号,便是增加多少。

当然,以上是在CMD命令行中执行的指令,我们也可以使用python进行批量文本转语音

import edge_ttsimport asyncioTEXT = ""with open ('1.txt','rb') as f:data = f.readTEXT = data.decode('utf-8')print(TEXT)voice = 'zh-CN-YunxiNeural'output = '4.mp3'rate = '-4%'volume = '+0%'async def my_function:tts = edge_tts.Communicate(text = TEXT,voice = voice,rate = rate,volume=volume)await tts.save(output)if __name__ == '__main__':asyncio.run(my_function)

首先我们导入edge_tts与asyncio库,并使用with open函数打开一个txt文件。txt便是我们要生成语音的文本文件。这里我们一般是输入的中文,因此,这里我们使用rb读取文件,然后通过decode函数转换一下,避免类似如下的问题

'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence

然后我们定义好我们输入的5个参数

text = TEXT 需要转换的文本voice = voice 选择的语音rate = rate 语速volume=volume 音量output 输出文件,一般是MP3文件

然后我们使用async进行异步请求,若是直接运行,会提示如下错误,因此,我们需要使用异步处理的方式。

RuntimeWarning: coroutine 'Communicate.save' was never awaitedtts.save(output)RuntimeWarning: Enable tracemalloc to get the object allocation tracebackhttps://github.com/rany2/edge-tts 项目文件地址

NLP领域最近越来越火,特别是ChatGPT的流行开始,NLP领域一举打破了CV领域,让更多的人看到了人工智能的魅力,这里介绍一下transformer模型,其NLP领域必然绕不开的一个模型。

来源:瞎搞制作

相关推荐