- 免费
- 高质量
- 免密钥
- 需联网
edge_tts 是一个利用 Microsoft Edge 浏览器在线 TTS(文本转语音)服务 的非官方 Python 库。
它无需微软 API 密钥,即可调用 Edge 内置的高质量神经网络语音合成引擎,将文本转换为自然语音并保存为音频文件。
核心特点
| 特性 | 说明 |
|---|---|
| 免费无密钥 | 直接调用 Edge 的在线 TTS 接口,无需 Azure 订阅或 API Key |
| 语音质量高 | 基于微软最新的神经网络 TTS,中文(如 Xiaoxiao、Yunyang)发音自然流畅 |
| 支持 SSML | 可使用语音合成标记语言精细控制语速、音调、停顿、多语音切换 |
| 多种输出格式 | 支持 MP3、WEBM、OGG 等格式(实际为流媒体封装) |
| 异步设计 | 基于 asyncio 和 aiohttp,适合批量处理或集成到异步应用 |
安装
bash
pip install edge-tts
依赖极少,主要需要 aiohttp(会自动安装)。
基础用法
1. 命令行快速使用(无需写代码)
安装后自带 edge-tts 和 edge-playback 命令:
bash
# 查看所有可用语音
edge-tts --list-voices
# 中文语音合成并保存
edge-tts --voice zh-CN-XiaoxiaoNeural --text "你好,这是微软 Edge 的文本转语音演示。" --write-media output.mp3
# 调整语速(+50%)和音量(+10%)
edge-tts --voice zh-CN-YunyangNeural --rate +50% --volume +10% --text "加速播放测试" --write-media fast.mp3
2. Python 代码使用
python
import asyncio
import edge_tts
TEXT = "你好,欢迎使用 edge_tts 库。这是由微软 Edge 提供的高质量中文语音合成。"
VOICE = "zh-CN-XiaoxiaoNeural" # 中文女声
OUTPUT_FILE = "test.mp3"
async def main():
communicate = edge_tts.Communicate(TEXT, VOICE)
await communicate.save(OUTPUT_FILE)
if __name__ == "__main__":
asyncio.run(main())
进阶功能
使用 SSML 精细控制
SSML(Speech Synthesis Markup Language)可以控制停顿、语气、多角色对话:
python
import asyncio
import edge_tts
SSML = """
<<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
<voice name="zh-CN-XiaoxiaoNeural">
你好,<<break time="500ms"/> 这是带停顿的语音。
<prosody rate="slow" pitch="+10%">这句话语速较慢,音调较高。</prosody>
</voice>
</speak>
"""
async def main():
communicate = edge_tts.Communicate(SSML, voice="zh-CN-XiaoxiaoNeural")
await communicate.save("ssml_output.mp3")
asyncio.run(main())
流式获取音频数据
适合边下载边播放,无需等待完整文件:
python
import asyncio
import edge_tts
async def stream_tts():
communicate = edge_tts.Communicate("流式播放测试", "zh-CN-YunyangNeural")
async for chunk in communicate.stream():
if chunk["type"] == "audio":
# chunk["data"] 是音频字节流,可实时写入播放器
print(f"收到音频块: {len(chunk['data'])} bytes")
elif chunk["type"] == "WordBoundary":
# 获取每个词的时间边界信息,可用于字幕同步
print(f"词: {chunk['text']}, 偏移: {chunk['offset']}ms")
asyncio.run(stream_tts())
批量处理与语音切换
python
import asyncio
import edge_tts
voices = ["zh-CN-XiaoxiaoNeural", "zh-CN-YunyangNeural", "zh-CN-XiaohanNeural"]
text = "同样的文本,不同的声音。"
async def batch():
tasks = []
for voice in voices:
communicate = edge_tts.Communicate(text, voice)
tasks.append(communicate.save(f"{voice}.mp3"))
await asyncio.gather(*tasks)
asyncio.run(batch())
常用中文语音列表
| 语音 ID | 性别/风格 | 特点 |
|---|---|---|
zh-CN-XiaoxiaoNeural |
女 | 自然、温暖,最常用 |
zh-CN-YunyangNeural |
男 | 新闻播报风格,沉稳 |
zh-CN-XiaohanNeural |
女 | 抒情风格,柔和 |
zh-CN-XiaomoNeural |
女 | 多种情感风格可选 |
zh-CN-YunxiNeural |
男 | 年轻、活泼 |
zh-CN-XiaoruiNeural |
女 | 成熟、专业 |
zh-CN-YunjianNeural |
男 | 老年、叙事风格 |
完整列表通过 edge-tts --list-voices | grep zh-CN 查看。
注意事项
- 网络依赖 :需要能访问微软 Edge TTS 在线服务(
speech.platform.bing.com相关域名),国内通常可直接访问。 - 非官方 API:这是逆向 Edge 浏览器接口实现的,微软可能随时调整服务端逻辑,存在失效风险。
- 商业使用:音频生成自微软服务,商用前建议确认微软服务条款,或考虑官方 Azure Speech Service。
- 长文本限制:单段文本过长时建议分段处理,避免超时。
典型应用场景
- 有声书/播客制作:快速将长文本文档转为音频
- 视频配音:为短视频、教程生成旁白
- 辅助阅读:为视障用户或学习场景提供语音朗读
- AI 对话机器人:为 ChatBot 添加语音输出能力
- 自动化测试:生成语音素材用于测试