3步搭建语音克隆TTS:用任意声音朗读多语言文本
从零安装 OmniVoice 环境,掌握零样本语音克隆、声音设计、批量配音三种核心模式。跑通后可直接用于有声书制作、多语言视频配音等场景,20分钟即可部署本地 TTS 服务。

3步搭建语音克隆TTS:用任意声音朗读多语言文本
想做个外语视频配音但成本太高?想做有声书却没有合适的播音员?或者希望用自己录一段声音,让 AI 把长篇技术文档都读出来?
以前实现这些需求,要么花大价钱请专业配音,要么折腾复杂的 TTS 工具,训练成本高、效果参差不齐。
今天带你用 OmniVoice,一个支持 600 多种语言的高质量语音克隆 TTS 项目,从零搭建一个「输入参考音频+文本,就能用任意声音朗读」的本地服务。整篇跟做下来,大约 20 分钟就能出效果。
环境准备
开始前确认以下基础条件:
- Python 3.8+:建议用 conda 或 venv 创建独立环境
- NVIDIA GPU(推荐):显存 8GB 以上即可流畅运行;Apple Silicon(M1/M2/M3)或 Intel Arc GPU 也支持
- 基础 Python 知识:会 pip 装包、能看懂简单代码就行
GPU 能显著加速推理。OmniVoice 底层是 diffusion 架构的 TTS 模型,在 GPU 上跑能快 40 倍(RTF 最低 0.025)。CPU 也能跑,但生成一段话可能要几十秒。
第一步:安装 OmniVoice
1. 安装 PyTorch
根据显卡型号选择对应版本。NVIDIA CUDA 12.8 示例:
bash
pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
Apple Silicon 用户:
bash
pip install torch==2.8.0 torchaudio==2.8.0
PyTorch 的 CUDA 版本和系统显卡驱动强绑定,分开安装可避免版本冲突。
2. 安装 OmniVoice
从 PyPI 装稳定版:
bash
pip install omnivoice
想用最新特性可从 GitHub 装:
bash
pip install git+https://github.com/k2-fsa/OmniVoice.git
装完验证:终端输入 omnivoice-demo --help,能看到帮助信息即成功。
第二步:跑通零样本语音克隆
什么是零样本语音克隆?
给模型一段 3~10 秒的参考音频,告诉它这段音频说了什么,模型就能学会这个声音,然后用这个声音朗读你指定的新文本。不需要训练、不需要微调,推理时直接生效。
Python API 实战
创建 clone_voice.py:
python
from omnivoice import OmniVoice
import soundfile as sf
import torch
## 加载预训练模型到 GPU
model = OmniVoice.from_pretrained(
"k2-fsa/OmniVoice",
device_map="cuda:0",
dtype=torch.float16
)
## Apple Silicon 用户用 device_map="mps"
## Intel Arc 用户用 device_map="xpu"
## 语音克隆
audio = model.generate(
text="今天我们来聊聊大语言模型的最新进展,这个话题很有意思。",
ref_audio="ref.wav",
)
sf.write("output_cloned.wav", audio[0], 24000)
print("语音克隆完成,已保存到 output_cloned.wav")
需要提供一个 ref.wav 文件——录一段 3~10 秒的干净人声。也可以省略 ref_text,模型会自动用 Whisper ASR 转录参考音频内容,对中文用户特别友好。
运行 python clone_voice.py,稍等即可生成 output_cloned.wav。
第三步:声音设计——不用参考音频定制声音
不想用真实人声时,Voice Design 模式支持用自然语言描述想要的声音属性:
python
audio = model.generate(
text="Hello, this is a test of zero-shot voice design.",
instruct="female, low pitch, british accent",
)
sf.write("voice_design.wav", audio[0], 24000)
支持的属性组合:
- 性别:male / female
- 年龄:child / young / middle-aged / elderly
- 音调:very low / low / medium / high / very high
- 风格:whisper(耳语模式)
- 英语口音:American, British 等
- 中文方言:四川话、陕西话等
Voice Design 主要基于中英数据训练,其他语言可用但效果可能不稳定。
实战:批量生成配音文件
保存音色 prompt
python
## 克隆并保存声音特征
prompt = model.create_voice_clone_prompt(
ref_audio="my_voice.wav",
ref_text="这是一段我的声音样本。"
)
prompt.save("my_voice.pt")
## 后续直接加载
from omnivoice import VoiceClonePrompt
prompt = VoiceClonePrompt.load("my_voice.pt")
保存 prompt 后可避免重复编码参考音频,推理速度更快。
批量生成
python
texts = [
"Large language models have revolutionized natural language processing.",
"Fine-tuning allows models to adapt to specific domains efficiently.",
"Retrieval-augmented generation reduces hallucination in AI systems."
]
for i, text in enumerate(texts):
audio = model.generate(
text=text,
voice_clone_prompt=prompt,
speed=1.0, # 语速,>1 快,<1 慢
num_step=32, # 扩散步数,16 更快但质量略降
)
sf.write(f"output_{i:03d}.wav", audio[0], 24000)
print(f"已生成:output_{i:03d}.wav")
跑完得到完整配音文件序列,可直接导入剪映或 Premiere 制作视频。
常见问题
Q1:下载模型很慢/超时?
设置 HuggingFace 镜像:
bash
export HF_ENDPOINT="https://hf-mirror.com"
Q2:中文数字读成逐位发音?
开启文本归一化:
python
audio = model.generate(
text="我有2345个苹果",
ref_audio="ref.wav",
normalize_text=True
)
需安装额外依赖:pip install "omnivoice[tn]"。macOS 用户如遇问题,先 conda install -c conda-forge pynini。
Q3:想加速推理?
NVIDIA GPU 可装 FlashInfer,吞吐量提升 2~2.6 倍:
bash
pip install flashinfer-python==0.6.15.post1 \
--extra-index-url https://flashinfer.ai/whl/cu128/
Q4:跨语言克隆效果不好?
参考音频和目标文本用同一种语言效果最好。参考中文生成英文会带中文口音,这是模型继承参考音频发音习惯的预期行为。
总结
完成三件事:搭建环境、跑通语音克隆与批量生成、掌握声音设计与优化技巧。
现在你已拥有本地 TTS 服务。下一步可以尝试:
- 运行
omnivoice-demo启动 Web UI 直接测试 - 结合 FastAPI 包装成 HTTP 服务接入内容生产流水线
- 探索非语言符号控制,如插入
[laughter]让 AI 笑声更自然
工具在手,去做你的第一个 AI 配音项目吧。