edge-tts:免费调用微软在线文本转语音,一条命令产出 mp3 与 SRT 字幕
【免费下载链接】edge-ttsUse Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts
edge-tts 是一个 Python 库,用来调用微软 Edge 浏览器背后的在线文本转语音(TTS)服务。它不需要 API 密钥、不需要 Windows、不需要安装 Edge,pip 装完就能把文本合成 mp3 音频,并同时产出带时间轴的 SRT 字幕。调用直接打到微软的在线接口,使用者零费用。
三个现成场景
- 有声书与朗读:把长文本喂进去,得到 mp3 和逐句对齐的字幕,可直接给读屏软件或视频挂字幕。
- 视频配音:语音列表覆盖中、英、法、阿拉伯语等数十种语言,每种语言有多个男女声,按语言批量生成配音片段。
- 智能家居与应用集成:官方 README 里列了 Home Assistant 的 hass-edge-tts 插件作为集成案例,说明它适合挂进长期运行的服务里。
安装并生成第一条语音
pip install edge-tts一行命令生成音频和字幕:
edge-tts --text "你好,世界" --write-media hello.mp3 --write-subtitles hello.srt只想要命令行版本的话,用pipx install edge-tts更合适,不会污染系统 Python 环境。不指定--voice时默认使用en-US-EmmaMultilingualNeural。动手前先看看有哪些可选声音:
edge-tts --list-voices输出是四列表格:名称、性别、适用内容类别、声音性格。挑一个名字传给--voice即可。
用三个参数微调语速、音量、音调
--rate、--volume、--pitch分别对应语速、音量、音调,单位是百分比和赫兹。负值要紧跟等号写,否则 shell 会把-50%当成另一个参数:
edge-tts --rate=-50% --volume=+20% --pitch=-50Hz --text "演示" --write-media demo.mp3输入端除了--text还有--file,从文件读文本,-表示从标准输入;--proxy可给语音列表和合成请求走代理。自定义 SSML 已被移除:服务端只接受 Edge 浏览器自己生成的 SSML,而 prosody 里能调的项都被上面三个参数覆盖了,不需要绕路。
字幕与实时播放
SRT 来自合成过程中服务回传的 WordBoundary / SentenceBoundary 边界事件,由 SubMaker 拼成字幕行,时间戳按实际收到的音频字节数校准,长文本不会逐渐漂移。
另一个edge-playback命令直接调用本地播放器出声,不落盘。注意它在非 Windows 平台要先装 mpv,且不支持--write-media、--write-subtitles、--list-voices这三个选项。
Python 代码里几行就够
把文本转语音接进代码,同步写法只要两行(完整用法见 examples/ 里的六个官方示例):
communicate = edge_tts.Communicate(text, "zh-CN-XiaoxiaoNeural") communicate.save_sync("out.mp3")异步环境改用await communicate.save(...);要在代码里出自幕,把边界事件喂给edge_tts.SubMaker()后调get_srt()即可。想按属性动态选声音,VoicesManager 可以按语言、性别、区域筛选:
voices = await VoicesManager.create()拿到后再用voices.find(Gender="Female", Locale="zh-CN")筛出候选语音。
⚠️ 几个容易踩的细节
- 依赖在线服务:合成走微软在线接口,网络不稳时建议在代码里加重试;连接超时和读超时在
Communicate构造函数里可配,默认 10 秒和 60 秒。 - 长文本自动分段:超长输入内部按 4096 字节自动切块,优先在句界、词界处断,并避开多字节字符和 XML 实体中间,不需要自己分段。
- 403 会自动恢复:服务端用一个由浏览器版本和本地时间生成的 token 校验请求,失效时 drm.py 会纠正时钟偏移后自动重连。
- 音频规格固定:输出是 24kHz、48kbps 的单声道 mp3,做朗读绰绰有余,别把它当音乐级音源用。
源码结构:一个 WebSocket 客户端加几个小工具
核心逻辑是 communicate.py 里的 WebSocket 客户端:连上合成接口、发送 SSML、流式收音频与边界事件,其余文件都是围绕它的小工具。
edge-tts/ ├── examples/ # 六个官方示例:同步/异步、流式、字幕、动态选声 ├── src/edge_tts/ │ ├── communicate.py # 核心:WebSocket 通信、长文分段、音频与边界事件解析 │ ├── voices.py # 拉取语音列表,按语言/性别筛选 │ ├── submaker.py # 边界事件转 SRT 字幕 │ └── drm.py # 请求 token 生成与时钟偏移纠正 ├── src/edge_playback/ # edge-playback 命令,调本地播放器实时出声 └── tests/ # 长文本回归测试脚本先装好跑一遍第一条命令,听听 hello.mp3;想深入就读communicate.py的stream()方法。源码可用git clone https://gitcode.com/GitHub_Trending/ed/edge-tts获取。
【免费下载链接】edge-ttsUse Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考