【Python】免费的中文 AI 配音方案

  • 免费
  • 高质量
  • 免密钥
  • 需联网

edge_tts 是一个利用 Microsoft Edge 浏览器在线 TTS(文本转语音)服务 的非官方 Python 库。

它无需微软 API 密钥,即可调用 Edge 内置的高质量神经网络语音合成引擎,将文本转换为自然语音并保存为音频文件。


核心特点

特性 说明
免费无密钥 直接调用 Edge 的在线 TTS 接口,无需 Azure 订阅或 API Key
语音质量高 基于微软最新的神经网络 TTS,中文(如 Xiaoxiao、Yunyang)发音自然流畅
支持 SSML 可使用语音合成标记语言精细控制语速、音调、停顿、多语音切换
多种输出格式 支持 MP3、WEBM、OGG 等格式(实际为流媒体封装)
异步设计 基于 asyncioaiohttp,适合批量处理或集成到异步应用

安装

bash 复制代码
pip install edge-tts

依赖极少,主要需要 aiohttp(会自动安装)。


基础用法

1. 命令行快速使用(无需写代码)

安装后自带 edge-ttsedge-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 查看。


注意事项

  1. 网络依赖 :需要能访问微软 Edge TTS 在线服务(speech.platform.bing.com 相关域名),国内通常可直接访问。
  2. 非官方 API:这是逆向 Edge 浏览器接口实现的,微软可能随时调整服务端逻辑,存在失效风险。
  3. 商业使用:音频生成自微软服务,商用前建议确认微软服务条款,或考虑官方 Azure Speech Service。
  4. 长文本限制:单段文本过长时建议分段处理,避免超时。

典型应用场景

  • 有声书/播客制作:快速将长文本文档转为音频
  • 视频配音:为短视频、教程生成旁白
  • 辅助阅读:为视障用户或学习场景提供语音朗读
  • AI 对话机器人:为 ChatBot 添加语音输出能力
  • 自动化测试:生成语音素材用于测试
相关推荐
Larcher5 小时前
从零搭建 MCP 服务——让 AI 拥有无限扩展能力
人工智能·程序员
zzzzzz3105 小时前
你的 AI 写的 React 烂透了?这个 8000+ Star 的开源工具能揪出 90% 的「Agent 屎山」
人工智能
小星AI6 小时前
MCP协议超详细教程,从入门到实战
人工智能
小星AI6 小时前
Kimi Code CLI 超详细教程,附源码
人工智能·agent
牧艺6 小时前
Cursor Rules / Skills 分层设计:让 Agent 像「团队新同事」
前端·人工智能·cursor
shepherd1116 小时前
一文带你掌握 LLM、Token、Context、Prompt、RAG、MCP、Skill、Agent 等 AI 核心概念
人工智能·后端·ai编程
小林ixn7 小时前
MCP 保姆级入门指南:AI 的“万能充电口”到底怎么玩?
人工智能
转转技术团队8 小时前
没有测试的核心代码,怎么交给 AI 重构
人工智能
爱读源码的大都督9 小时前
Claude Code源码分析(三):为什么系统提示词中需要有tools呢?
前端·人工智能·后端