声匠 — GPT-SoVITS 语音克隆推理引擎
> 匠心赋声,字字传神。
将 GPT-SoVITS 化为语音生产线:声音克隆、整章口播、单段生成,一站式搞定。
触发关键词: 语音合成, TTS, 声音克隆, voice cloning, 有声书, 口播, 生成语音, 克隆声音
前置条件
用户需自行准备(声匠不负责安装):
- GPT-SoVITS 已安装(推荐集成包,含 Python runtime)
- 已训练好的权重文件:
- SoVITS 权重(.pth)
- GPT 权重(.ckpt,可用预训练版) - 参考音频:3-10秒 WAV,16kHz/32kHz,干净无噪音
- 预训练模型(通常集成包自带):
-chinese-roberta-wwm-ext-large(BERT)
-chinese-hubert-base(HuBERT)
配置
首次使用时,告诉 Agent 以下路径(或写入 TOOLS.md):
GPT_SOVITS_ROOT = D:\GPT-SoVITS
PYTHON_RUNTIME = D:\GPT-SoVITS\runtime\python.exe
GPT_WEIGHT = GPT_weights/fanren-e6.ckpt
SOVITS_WEIGHT = SoVITS_weights/fanren_e80_s5120.pth
REF_AUDIO = logs/fanren/xingxiuchuan/sliced_wavs/录制文案_0050.wav
REF_TEXT = 第二部分战斗场景约八分钟...
OUTPUT_DIR = D:\TTS\output
核心能力
🎤 能力1:声音克隆(零样本)
用户给一段录音 + 录音里说的内容 → 用这个声音读新文字。
& $PYTHON_RUNTIME scripts/shengjiang_clone.py `
--ref-audio "C:\Users\王老师\录音.wav" `
--ref-text "大家好我是王国华" `
--text "今天天气真不错,适合打气排球" `
--output "D:\TTS\output\clone_test.wav"
使用场景:用户想用自己的声音、朋友的声音、任何人的声音来读文字。
效果预期:
- 零样本(不训练):相似度 70-80%,偶尔跑调
- 微调训练后:相似度 90%+,稳定(需额外训练流程)
📖 能力2:整章口播
喂入整章小说文本(文件或直接粘贴)→ 智能分段 → 逐段推理 → 拼接为完整口播音频。
从文件生成:
& $PYTHON_RUNTIME scripts/shengjiang_audiobook.py `
--file "D:\TTS\第1章 七玄门.txt" `
--output-dir "D:\TTS\output\第1章"
直接粘贴文本:
& $PYTHON_RUNTIME scripts/shengjiang_audiobook.py `
--text "韩立突然睁开双眼...(整章内容)" `
--title "第一章 七玄门" `
--output-dir "D:\TTS\output\第1章"
声音克隆 + 口播:
& $PYTHON_RUNTIME scripts/shengjiang_audiobook.py `
--file "D:\TTS\第1章.txt" `
--ref-audio "C:\录音.wav" `
--ref-text "大家好我是王国华" `
--output-dir "D:\TTS\output\第1章"
智能分段特性:
- 按自然段落拆分
- 自动合并过短段落(<20字),避免短句静音
- 段落间可配置静音时长(默认800ms)
🔊 能力3:单段语音生成
输入一段文字,快速生成 WAV 音频。
& $PYTHON_RUNTIME scripts/shengjiang_tts.py `
--text "韩立突然睁开双眼,冷冷说道:既然来了,就出来吧。" `
--output "D:\TTS\output\test.wav"
📚 能力4:批量章节生成
从章节编号自动查找 TXT 文件,批量生成有声书。
& $PYTHON_RUNTIME scripts/shengjiang_batch.py `
--chapter 1 --output-dir "D:\TTS\output\fanren_ch1"
命令列表
| 命令 | 脚本 | 说明 |
|---|---|---|
clone |
shengjiang_clone.py |
声音克隆:录音+参考文本→克隆声音读新文字 |
audiobook |
shengjiang_audiobook.py |
整章口播:文本→完整音频小说 |
tts |
shengjiang_tts.py |
单段文本转语音 |
batch |
shengjiang_batch.py |
批量章节生成 |
推理参数参考
| 参数 | 默认 | 说明 |
|---|---|---|
top_k |
8 (clone/audiobook) / 5 (tts) | GPT 采样范围,越小越稳定 |
temperature |
0.85 (clone/audiobook) / 1.0 (tts) | 生成随机性,0.85 更保守 |
repetition_penalty |
1.5 | 抑制重复 |
speed |
1.0 | 语速倍率 |
silence-ms |
800 | 口播段落间静音(毫秒) |
调参经验:
- 大舌头/含糊 → 降低 temperature(0.8~0.9),降低 top_k(3~5)
- 重复循环 → 提高 repetition_penalty(1.5~2.0)
- 语速偏慢 → speed 1.1~1.2
使用流程
场景1:用自己的声音读一段话
用户说:
> 用我的声音读这句话:"今天学校开运动会,大家加油"
Agent 执行:
Set-Location $GPT_SOVITS_ROOT
& $PYTHON_RUNTIME scripts/shengjiang_clone.py `
--ref-audio "用户的录音路径.wav" `
--ref-text "用户录音里说的内容" `
--text "今天学校开运动会,大家加油" `
--output "D:\TTS\output\clone_test.wav"
场景2:生成整章有声书
用户说:
> 把第一章生成有声书口播
Agent 执行:
& $PYTHON_RUNTIME scripts/shengjiang_audiobook.py `
--file "D:\TTS\第1章.txt" `
--output-dir "D:\TTS\output\第1章"
场景3:用自己的声音生成整章口播
用户说:
> 用我的声音把这段小说读出来
Agent 执行:
& $PYTHON_RUNTIME scripts/shengjiang_audiobook.py `
--ref-audio "用户的录音.wav" `
--ref-text "录音里说的内容" `
--text "整章小说内容..." `
--title "第一章" `
--output-dir "D:\TTS\output\第1章"
场景4:对比不同模型效果
用户说:
> 用预训练GPT和微调GPT各生成一段,对比效果
Agent 执行两次推理,分别指定不同 GPT 权重,输出到不同文件供对比。
⚠️ 踩坑记录(必读)
- 不要按
\n拆分文本推理:短句会导致模型输出静音白噪声。必须整段一次推理。 - 整章口播的短段落合并:<20字的段落会被自动合并到下一段,避免静音问题。
- SoVITS 续训格式 Bug:
process_ckpt.py保存推理格式,s2_train.py期望训练格式。续训前需用prepare_ckpt.py转换。 - 训练数据必须干净:录制指令混入会毁掉 GPT 微调。
- iteration ≠ epoch:
load_checkpoint返回 iteration,需epoch = iter // steps_per_epoch。 - 中文路径编码:实验目录建议用英文。
- torchaudio FFmpeg 警告:可忽略。
- GPU 6GB 限制:RTX 2060 仅能跑 SoVITS GPU推理,GPT 建议CPU。
技术架构
文本 → clean_text → BERT特征 + 音素序列
↓
参考音频 → HuBERT → SSL特征 → VQ编码 → prompt_semantic
↓
BERT + 音素 + prompt → GPT → pred_semantic
↓
pred_semantic + 音素 + 参考频谱 → SoVITS → 音频波形
输出格式
推理完成后报告:
📖 口播生成完成
标题: 第一章 七玄门
文件: D:\TTS\output\第一章\第一章_full.wav
时长: 387.2s (6分27秒)
音质: peak=0.94 rms=0.11
段落: 42/42 成功
耗时: 823s (13分43秒)
许可
本 Skill 基于 GPT-SoVITS(MIT License)构建,仅供学习研究使用。