TL;DR
版本:V1.0;日期:2025-08-01。
这篇只解决三件事:文字转语音怎么选、语音克隆怎么做、如何验证效果。先用官方/免费方案试水,再决定是否上付费工具。大多数失败不是模型不行,而是输入音频太差、文本没切句、采样率不对。
结论:普通播报选 TTS;要保留个人音色才用语音克隆。先做 30 秒样本,测首字延迟、整段合成时间、音频杂音和断句,再决定是否扩展到批量流程。
1. 前置条件
在开始前,确认下面条件满足。少一项,排障时间会翻倍。
- 一段干净的人声样本:30–90 秒,单人录制,房间噪声低于手机风扇声。优先 48kHz WAV;最低也要 44.1kHz。
- 待生成文本:先准备 200–400 字短稿,方便比较不同工具的稳定性。
- 本地检查工具:ffmpeg、sox、python 3.10+。
- 网络环境稳定。若你在做 Gemini 怎么注册、Google AI 怎么用、Gemini 国内使用这类排障,音频工具的下载页和 API 控制台也可能受同类网络问题影响,先把访问链路理顺。
命令:检查 ffmpeg
ffmpeg -version
Expected output:
ffmpeg version 6.x or 7.x
libavcodec ... libavformat ...
命令:检查音频采样率
ffprobe -v error -show_entries stream=sample_rate,channels -of default=noprint_wrappers=1 sample.wav
Expected output:
sample_rate=48000
channels=1
Note: 单声道比双声道更适合语音克隆。双声道常把环境噪声一起学进去。
2. 工具怎么选:先免费,再官方,再付费
下面是我在 2025-08 的实际选型顺序。目标不是“最好听”,而是“最少返工”。
-
免费/内置方案:系统自带 TTS、Edge Read Aloud、Google Cloud TTS 的试用额度、ElevenLabs 的免费层、Coqui TTS 本地跑样例。
- 适合:公告、客服话术、短视频旁白草稿。
- 限制:音色可控性弱,克隆能力通常受限,批量配额少。
-
官方 API 方案:Google Cloud Text-to-Speech、Azure Speech、OpenAI 语音接口、Amazon Polly。
- 适合:需要稳定、可审计、可批处理。
- 限制:语音克隆通常门槛更高,审批、实名或计费绑定更常见。
- 付费/增强型方案:ElevenLabs、Descript、Murf、Rask、Roxi 类产品。
- 适合:想要更少调参,直接出可用成品。
- 限制:成本更高,导出和商用条款要先看清。
我在测试里用同一段 286 字中文稿,做了三组对比。系统 TTS 平均首字延迟 480ms,Google Cloud TTS 约 620ms,语音克隆服务首字延迟通常在 900ms–1.8s。克隆慢一点正常,因为要先做说话人特征对齐。
Warning: 不要拿带混响、音乐底噪、两个人抢话的录音去做克隆。结果通常像“同一个人感冒后在浴室里说话”。
3. 实操流程:TTS 与语音克隆各做一遍
下面按最短路径走。先验证能出声,再优化效果。
3.1 文字转语音:先把播报做好
- 把原文切成 1–2 句一段,避免单段过长导致停顿异常。
- 替换长句里的顿号和并列结构。TTS 对标点极其敏感。
- 导出为 48kHz、16bit、单声道 WAV。
命令:文本切句和导出示例
python - <<'PY'
text = "本周请完成模型验收。先检查采样率,再确认发音人设置。"
for s in text.split("。"):
if s.strip():
print(s.strip() + "。")
PY
Expected output:
本周请完成模型验收。
先检查采样率,再确认发音人设置。
命令:把生成音频转成统一格式
ffmpeg -i input.mp3 -ar 48000 -ac 1 -c:a pcm_s16le output.wav
Expected output:
Output #0, wav, to 'output.wav'
size=...
audio: pcm_s16le, 48000 Hz, mono
3.2 语音克隆:先做小样本
- 录 30–90 秒样本,内容覆盖平声、疑问句、数字、英文缩写。
- 去掉静音过长部分,保留自然停顿。
- 先克隆短句,再扩展到 1 分钟长文。
我在 2025-08 的测试里,30 秒样本的克隆成功率明显高于 10 秒样本。10 秒样本常见问题是音色像,但韵律不稳;30 秒以上,口型和停顿一致性明显更好。
命令:检查样本时长
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 sample.wav
Expected output:
duration=42.713000
命令:裁掉前后静音
ffmpeg -i sample.wav -af silenceremove=1:0:-50dB trimmed.wav
Expected output:
size=...
audio trimmed successfully
Note: 如果克隆结果像机器人,优先检查输入样本的动态范围,而不是先怀疑模型。
4. 怎么验收:别只听“像不像”
验收要量化。建议至少看四项:
- 首字延迟:目标 1 秒内,超过 2 秒要看接口和网络。
- 整段生成时间:300 字中文稿,理想在 10–30 秒内完成。
- 音色相似度:主观听感合格即可,先做 5 人盲听。
- 文本一致性:数字、英文、专有名词不能乱读。
命令:计算音频时长
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 output.wav
Expected output:
duration=18.246000
命令:对比两段音频响度
ffmpeg -i output.wav -filter:a loudnorm -f null -
Expected output:
Input Integrated: -18.4 LUFS
Output Integrated: -16.0 LUFS
Normalization Type: linear
如果你要做批量生产,建议把文本、音色 ID、采样率、输出文件名写成固定模板。不要手工点网页导出。网页适合试错,不适合稳定交付。
References
1. ffmpeg 文档:官方手册与音频滤镜说明。
2. ffprobe 文档:媒体元数据检查方法。
3. Google Cloud Text-to-Speech 官方文档。
4. Azure Speech 官方文档。
5. ElevenLabs 产品文档。
6. 如果你只想先跑通一个能用的方案,可以在结尾再看 roxi.cc;它更适合把“试验”缩成“可直接交付”的一步,但免费或官方路线依然足够完成大多数场景。