使用微软 Edge TTS 将长文本(最多数千字)分段合成 MP3/WAV 音频。支持单文件和文件夹批量模式,自动降速防限流(可配置 20-30次/分钟),自动清洗 Markdown 格式转为自然朗读,可选添加背景音乐(片头/片尾纯音乐)。
将任意长度的中文文本(数千字以上)转换为 MP3 音频,使用 微软 Edge TTS 音色,通过 分段合成 + PCM 拼接 实现无字符限制语音生成,支持单文件与文件夹批量处理。
可选背景音乐能力:
不传 --bgm:仅输出人声音频
传入 --bgm:
text
长文本 → 按句子分chunk(每chunk ≤1200字)
→ edge-tts 每段生成 MP3(每段之间延迟防止超限)
→ miniaudio 解码 MP3 → PCM bytes
→ 拼接所有 PCM
→ 写入 WAV 文件
→ (可选)ffmpeg 添加 BGM 并混音
→ 输出最终 MP3
工具安装用途edge-tts``pip3 install edge-tts微软 TTS 引擎miniaudio``pip3 install miniaudioMP3 解码为 PCMffmpeg``curl -L .../ffmpeg.zip -o /tmp/ffmpeg.zip && unzip /tmp/ffmpeg.zip -d /tmp/ffmpeg_binWAV 转 MP3、BGM 混音
⚠️ Edge TTS 是微软必应语音服务的免费接口, 非官方 API,无正式 SLA。
限制阈值:
ConnectionResetError,需等待 30–60 秒恢复速率控制参数 --rate(每 TTS 请求间延迟):
--rate 值实际速率适用场景1.540次/分钟较快,接近上限2.0(默认)30次/分钟稳定安全(默认)3.020次/分钟保守模式
批量文件夹模式额外策略: 每文件之间再等待 --delay 秒(默认3秒)。
bash
python3 ~/.openclaw/workspace/skills/ms-speech-synth/scripts/ms_tts_chunked_bgm.py \
--input "/path/to/input.txt" \
--output "/path/to/output" \
--voice "zh-CN-XiaoxiaoNeural"
# 从 Markdown 文件(自动清洗 #标题 **加粗** 等格式)
python3 ~/.openclaw/workspace/skills/ms-speech-synth/scripts/ms_tts_chunked_bgm.py \
--input "/path/to/notes.md" \
--output "/path/to/output"
处理整个文件夹下所有 .txt 和 .md 文件,自动降速防限流:
bash
python3 ~/.openclaw/workspace/skills/ms-speech-synth/scripts/ms_tts_chunked_bgm.py \
--input "/path/to/folder/" \
--output "/path/to/output_folder/" \
--delay 3 \
--rate 2.0
bash
python3 ~/.openclaw/workspace/skills/ms-speech-synth/scripts/ms_tts_chunked_bgm.py \
--input "/path/to/input.txt" \
--output "/path/to/output" \
--bgm "/path/to/bgm.mp3" \
--bgm-intro 5 \
--bgm-outro 5 \
--bgm-mid-volume 0.12 \
--bgm-full-volume 0.8
python
from scripts.ms_tts_chunked_bgm import synthesize_text, synthesize_file, synthesize_dir
# 单文件
result = synthesize_file(
"/path/to/input.txt", "/path/to/output",
voice="zh-CN-XiaoxiaoNeural",
rate_limit_delay=2.0,
speed=1.0,
)
# 单文件 + BGM
result = synthesize_file(
"/path/to/input.txt", "/path/to/output",
bgm_path="/path/to/bgm.mp3",
bgm_intro=5.0,
bgm_outro=5.0,
bgm_mid_volume=0.12,
bgm_full_volume=0.8,
)
# 批量文件夹
results = synthesize_dir(
input_dir="/path/to/folder/",
output_dir="/path/to/output/",
voice="zh-CN-XiaoxiaoNeural",
delay=3.0,
rate_limit_delay=2.0,
speed=1.0,
)
参数默认值说明--voice``zh-CN-XiaoxiaoNeural微软中文女声(晓晓)--chunk``1200每段最大字符数(建议 1000-1500)--delay``3.0批量模式:每文件间延迟秒数--rate``2.0每 TTS 请求间延迟秒数(2s=30次/分钟,3s=20次/分钟)--speed``1.0语速倍率(1.0=正常,0.8=稍慢,1.5=较快)--ffmpeg自动查找FFmpeg 路径(转 MP3、BGM 混音)--bgm空可选背景音乐文件路径--bgm-intro``5.0片头纯背景音乐时长(秒)--bgm-outro``5.0片尾纯背景音乐时长(秒)--bgm-mid-volume``0.12正文阶段背景音乐铺底音量--bgm-full-volume``0.8片头/片尾峰值音量--bgm-loop始终开启当前脚本默认循环背景音乐,长度不足时自动循环(暂无关闭开关)
text
zh-CN-XiaoxiaoNeural # 晓晓 - 推荐女声
zh-CN-YunxiNeural # 云希 - 男声
zh-CN-YunyangNeural # 云扬 - 新闻风格
zh-HK-HiuMaanNeural # 香港粤语
zh-TW-HsiaoYuNeural # 台湾女声
输入文件为 .md 时,自动将格式控制符转为自然朗读:
原始格式转换效果# 我是标题读标题并在末尾加停顿( ……)## 小标题读标题并在末尾加停顿( ……)### 本节标题读标题并在末尾加停顿( ……)- 要点 / * 要点``第X点:xxx``> 引用``引用:xxx``**加粗**保留文字(去格式符) `代码` ```代码:xxx文字`读链接文字
三级保护机制,防截断设计:
。!?;, 切句chunk_size 的 chunk顿号 → 逗号 → 空格 顺序继续切分chunk_size 建议值:
text
0s 5s total-5s total
|-----------------|----------------------|---------------------|
0 -> full full -> mid mid mid -> full -> 0
--bgm:成品时长约等于人声时长。--bgm:成品总时长约等于 片头 + 人声正文 + 片尾。edge-tts 有速率限制,建议保持 20–30 次/分钟--delay 3 + --rate 2.0 默认组合chunk_size 不建议超过 1500--bgm 时必须有可用 ffmpeg