edge-tts:免费调用微软在线文本转语音,一条命令产出 mp3 与 SRT 字幕
2026/9/14 22:21:21 网站建设 项目流程

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.pystream()方法。源码可用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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询