edge-tts
调用微软 Edge 在线 TTS 服务,零成本生成高质量语音,支持 100+ 种语言和 Neural 声音
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
调用微软 Edge 在线 TTS 服务,零成本生成高质量语音,支持 100+ 种语言和 Neural 声音
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2023 年,一位署名 rany 的开发者做了一件让很多人拍手叫绝的事——他逆向分析了微软 Edge 浏览器与 TTS 后端之间的通信协议,发布了一个叫 edge-tts 的 Python 库。顾名思义,它让 Python 程序可以直接使用 Edge 的在线文字转语音服务,而不需要 Edge 浏览器,不需要 Windows 系统,更不需要任何 API Key。
这个项目一发布就在 Hacker News 上引发热议,评论区有人形容它是"薅微软羊毛的神器",也有人担心微软会随时关闭这个"后门"。两年多过去了,微软并没有封禁它,项目已积累了超过 11,000 颗星,成为 Python 语音合成领域最受欢迎的工具之一。
很多人以为 Edge 浏览器是自己做语音合成的,实际上它只是一个"中间人"——当你使用 Edge 的"大声朗读"功能时,浏览器将文字发送给微软的 TTS 云服务,云端生成音频后返回给浏览器播放。edge-tts 正是抓住了这个机制,模拟浏览器身份直接与微软 TTS 后端通信。
这意味着你获得的语音质量,与在 Edge 浏览器中点击"大声朗读"完全一致——也就是微软 Azure 语音服务的标准质量。对比 Google 的 gTTS(Google Text-to-Speech),edge-tts 的声音更加自然流畅,特别是 Neural 神经网络声音,几乎听不出机器味。
edge-tts 的安装极其简单,一条 pip 命令即可:
pip install edge-tts
最基础的用法:将文字转成 MP3 文件,同时生成 SRT 字幕文件(适合视频配音场景):
edge-tts --text "Hello, world!" --write-media hello.mp3 --write-subtitles hello.srt
即时播放:不需要生成文件,直接用 mpv 播放器实时朗读(Windows 系统自带播放器):
pipx install edge-tts # 推荐用 pipx 安装命令行工具
edge-playback --text "欢迎使用 edge-tts 文字转语音"
切换语音:edge-tts 支持全球 100+ 种语言和方言,可通过 --list-voices 查看全部可用声音,中文场景推荐 zh-CN-XiaoxiaoNeural(晓晓,女生活泼型)或 zh-CN-YunxiNeural(云希,男生磁性型):
edge-tts --list-voices | grep "zh-CN" # 查看所有中文语音
edge-tts --voice zh-CN-XiaoxiaoNeural --text "你好,我是晓晓" --write-media xiaoxiao.mp3
调节语速、音量、音高:支持百分比参数,负值减速/降音/降调:
edge-tts --rate=+50% --text "快点说" --write-media fast.mp3
edge-tts --pitch=-10Hz --text "低沉的声音" --write-media low.mp3
如果你需要在 Python 代码中集成 TTS,edge-tts 提供了优雅的异步 API:
import asyncio
import edge_tts
async def main():
communicate = edge_tts.Communicate(
text="你好,欢迎使用 edge-tts",
voice="zh-CN-XiaoxiaoNeural",
rate="+10%"
)
await communicate.save("output.mp3")
# 同时生成字幕
submaker = edge_tts.SubMaker()
with open("output.mp3", "wb") as f:
async for chunk in communicate.stream():
if chunk["type"] == "audio":
f.write(chunk["data"])
elif chunk["type"] == "WordBoundary":
submaker.create_subtitle(chunk["offset"], chunk["duration"], chunk["text"])
with open("output.srt", "w", encoding="utf-8") as f:
f.write(submaker.generate_srt_cues())
asyncio.run(main())
edge-tts 的代码结构非常清晰,src/edge_tts/ 目录下按职责分离:
VoicesManager 和 list_voices() 列出所有可用声音依赖仅有 4 个:aiohttp(异步 HTTP/WebSocket 客户端)、certifi(SSL 证书)、tabulate(CLI 表格输出)、typing-extensions(类型提示)。代码通过 isort/pylint/mypy 多层代码质量检查。
| 场景 | 描述 |
|---|---|
| 视频配音 | 生成 MP3 + SRT 字幕,配合 FFmpeg 或剪映完成配音 |
| 有声书 | 批量转换文本章节为音频,配合字幕文件实现时间轴对齐 |
| 无障碍阅读 | 将网页/文档转为语音,辅助视障用户 |
| 语音助手 | 作为后端 TTS 引擎,响应速度快(依赖网络质量) |
| 多语言学习 | 切换不同语言/声音练习听力 |
| 智能家居播报 | 树莓派等低性能设备上运行,播报天气、时间等信息 |
edge-tts 最大的风险在于合规性。虽然微软尚未明确封禁,但该工具确实绕过了微软对 Edge 浏览器身份的校验机制。微软 Q&A 论坛上曾有用户直接询问这个工具是否合法,微软的回答含糊其辞。rany 本人也承认这是"dirty hack",项目的长期可用性无法保证。
此外,该工具依赖网络连接,离线环境完全无法使用。相比之下,Coqui TTS、VITS 等本地 TTS 模型虽然质量略逊,但完全离线可用,数据隐私也更有保障。
在声音定制方面,edge-tts 无法像 Azure 语音服务那样通过 SSML 精细调整停顿、强调等细节(微软限制了非浏览器来源的 SSML),自定义空间有限。
edge-tts 体现了开源社区的一种独特能力——通过逆向工程将大厂封闭的云服务能力"民主化"。它让没有 Azure 账号、没有信用卡、预算为零的个人开发者和小型团队,也能用上世界顶级的神经网络语音合成服务。
从数据来看,该项目被 184 个开源项目依赖,包括 Home Assistant 智能家居插件(hass-edge-tts)、AI 播客生成工具(Podcastfy)等。PyPI 月下载量超过 100 万次,已成为 Python 语音合成领域的事实标准之一。
edge-tts 以极简的依赖、零成本的使用门槛和媲美商业服务的语音质量,成为个人开发者和小型团队在语音合成场景下的首选工具。它的成功也提醒我们:大厂的"免费"服务往往藏在你看不见的地方,而开源社区总有人愿意把它挖出来。不过,依赖在线服务的根本局限,意味着它永远无法完全替代本地部署的 TTS 方案——对于对数据隐私或离线可用性有严格要求的场景,还需要另寻出路。