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

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

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 查看。


注意事项

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

典型应用场景

  • 有声书/播客制作:快速将长文本文档转为音频
  • 视频配音:为短视频、教程生成旁白
  • 辅助阅读:为视障用户或学习场景提供语音朗读
  • AI 对话机器人:为 ChatBot 添加语音输出能力
  • 自动化测试:生成语音素材用于测试
相关推荐
回眸&啤酒鸭4 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
AI的探索之旅4 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein4 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
LaughingZhu4 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas