news 2026/3/4 8:07:52

Ubuntu命令行部署GPT-SoVITS语音合成指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu命令行部署GPT-SoVITS语音合成指南

Ubuntu命令行部署GPT-SoVITS语音合成指南

在远程服务器上做语音合成,最头疼的莫过于没有图形界面——WebUI再炫酷也用不了。这时候,纯命令行就成了唯一的出路。本文记录的就是这样一个实战流程:如何在无GUI的Ubuntu环境中,从零开始部署GPT-SoVITS,完成音频预处理、文本识别(ASR)、推理生成等核心任务。

GPT-SoVITS 是当前少有的支持少样本语音克隆 + 跨语言TTS合成的开源项目。仅需约1分钟高质量语音数据,就能训练出音色高度还原、语义连贯的个性化语音模型。它结合了 GPT 的上下文建模能力与 SoVITS 的高保真声学结构,在自然度和表现力方面都达到了业界领先水平。

🔗 参考资料:GitHub 仓库 | 语雀中文文档


下载并解压项目包

推荐直接使用官方发布的整合版压缩包,避免手动克隆代码、逐个下载模型文件带来的版本错配问题。

前往 GitHub Releases 页面,下载最新版本的GPT-SoVITS-xxx.7z文件(例如GPT-SoVITS-beta0706fix1.7z),上传至服务器后执行以下命令:

# 安装 p7zip 支持 .7z 格式 sudo apt install p7zip-full -y # 解压 7z x GPT-SoVITS-beta0706fix1.7z

解压后的目录结构如下(关键路径已标注):

├── api.py ├── batch_inference.py ├── config.py ├── Docker ├── docs ├── ffmpeg.exe ├── GPT_SoVITS # 主要代码模块 ├── GPT_weights # 存放训练后的 GPT 模型(.ckpt) ├── SoVITS_weights # 存放训练后的 SoVITS 模型(.pth) ├── output # 输出目录 │ ├── uvr5_opt # 去噪后音频 │ ├── asr_opt # ASR识别结果 │ ├── slicer # 音频切片 │ └── result # 最终合成音频 ├── tools # 工具脚本集合 └── requirements.txt

⚠️ 注意事项:

  • 使用 Linux 原生命令7z解压,不要通过 Windows 打包后再传,容易导致路径或权限异常。
  • 确保当前用户对工作目录有读写权限,否则后续步骤会失败。

配置 CUDA 环境(PyTorch + cu118)

GPT-SoVITS 推理依赖 PyTorch 和 GPU 加速。以下是基于CUDA 11.8 + PyTorch 2.1.1的完整配置流程。

1. 安装系统依赖

sudo apt update sudo apt install -y ffmpeg libsox-dev python3-pip

FFmpeg 用于音频格式转换,libsox 提供底层音频处理支持,这两者是 ASR 和 TTS 流程中不可或缺的基础组件。

2. 创建 Conda 虚拟环境(推荐)

为避免依赖冲突,建议创建独立虚拟环境:

conda create -n gptsovits python=3.9 -y conda activate gptsovits

3. 安装 PyTorch(CUDA 11.8)

pip3 install torch==2.1.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

这个命令会自动安装适配 CUDA 11.8 的 PyTorch 版本。如果你的显卡驱动较旧,请先确认是否支持该版本 CUDA。

4. 安装项目依赖

进入项目根目录运行安装脚本:

bash install.sh

如果遇到ffmpeg版本过高导致报错(如某些 sox 操作失败),可以降级安装:

conda install -c conda-forge 'ffmpeg<7'

5. 验证安装成功

运行以下 Python 代码检查环境是否正常:

import torch print(torch.__version__) print(torch.cuda.is_available()) # 应返回 True

若输出类似2.1.1True,说明 GPU 环境已就绪。


准备参考音频

这是整个语音克隆流程的起点:你需要一段清晰、无背景噪音的原始语音作为“音色模板”。

建议满足以下条件:

  • 时长:5~10秒为佳(越短越好,但需包含足够语音特征)
  • 格式:WAV(PCM 16bit 单声道,采样率 16kHz 或 32kHz 均可)
  • 内容:自然朗读句子,避免极端情绪、口齿不清或机械朗读

将音频命名为ref_audio.wav并放入输出目录:

cp /path/to/your/audio/ref_audio.wav ./output/

这一步看似简单,实则非常关键——音质差、背景杂音多的参考音频会导致后续所有环节效果下降,甚至无法收敛。


步骤一:分割音频(slice_audio.py)

长音频需要按静音段自动切分为多个片段,便于后续 ASR 处理。GPT-SoVITS 提供了tools/slice_audio.py脚本来完成这一任务。

查看其参数说明:

参数含义
inp输入音频路径
opt_root输出切片保存路径
threshold静音阈值(dBFS),低于此值视为静音点
min_length每个片段最小长度(单位:采样点)
min_interval最小切割间隔
hop_size音量检测步长,越小精度越高
max_sil_kept切割后保留的最大静音长度

对于 16kHz 音频,常用参数组合如下:

python tools/slice_audio.py \ ./output/ref_audio.wav \ ./output/slicer \ -34 5000 200 10 300 \ 1.0 0.8 0 1

解释:
--34: 小于 -34dB 视为静音
-5000: 每段至少 5000 个采样点 ≈ 0.3秒(16kHz)
-200: 最小间隔 200 个采样点
-10: hop_size 控制检测粒度
-300: 切割后最多保留 300 个采样点的静音

执行后会在./output/slicer/下生成若干.wav切片文件,每个代表一个语音片段。

💡 实践建议:如果切得太碎,会影响 ASR 准确性;切得太少,则可能遗漏有效信息。可根据实际听感微调thresholdmin_length


步骤二:语音识别 ASR(funasr_asr.py)

接下来要用 FunASR 模型将切片音频转录成对应的文字内容。

脚本位于tools/asr/funasr_asr.py,主要参数如下:

参数类型说明
-i,--input_folder文件夹路径包含所有待识别 wav 文件的目录
-o,--output_folder文件夹路径存放识别结果.list文件

运行命令:

python tools/asr/funasr_asr.py \ -i ./output/slicer \ -o ./output/asr_opt

生成的结果文件为asr_opt/slicer.list,格式如下:

<音频路径>|<说话人名称>|<语言>|<识别文本>

示例:

./output/slicer/ref_audio_0000000000_0000220480.wav|ref_speaker|ZH|大家好,我是今天的讲解员。

✅ 提示:若识别结果不准,可手动编辑.list文件修正文本内容。这一点在调试阶段尤为重要——错误的文本输入会直接影响最终合成质量。


步骤三:推理生成语音(inference_cli.py)

这才是真正的“魔法时刻”——利用已有模型和参考音色,合成你想要的语音。

推理脚本参数说明

GPT_SoVITS/inference_cli.py支持以下参数:

参数说明
--gpt_modelGPT 模型路径(.ckpt 文件)
--sovits_modelSoVITS 模型路径(.pth 文件)
--ref_audio参考音频路径(用于提取音色)
--ref_text参考音频对应的文本
--ref_language参考音频语言,可选:“中文”、“英文”、“日文”
--target_text目标要合成的文本文件路径
--target_language目标语言类型,“中英混合”、“多语种混合”等
--output_path合成音频输出目录

示例操作流程

1. 准备目标文本

创建一个待合成的文本文件:

echo "Hello world,欢迎使用 GPT-SoVITS 语音合成系统。" > ./output/target_text.txt
2. 准备参考文本

从 ASR 结果中提取对应文本,写入文件:

echo "大家好,我是今天的讲解员。" > ./output/ref_text.txt
3. 执行推理命令

使用项目自带的预训练模型进行测试:

python GPT_SoVITS/inference_cli.py \ --gpt_model "./GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" \ --sovits_model "./GPT_SoVITS/pretrained_models/s2G488k.pth" \ --ref_audio "./output/slicer/ref_audio_0000000000_0000220480.wav" \ --ref_text "./output/ref_text.txt" \ --ref_language "中文" \ --target_text "./output/target_text.txt" \ --target_language "中英混合" \ --output_path "./output/result"

等待几秒至数十秒(取决于文本长度和 GPU 性能),即可在./output/result/中看到生成的.wav文件。

🎧 听觉建议:首次合成建议控制目标文本在 20 字以内,避免因上下文过长导致节奏混乱或发音失真。


使用 API 接口调用合成服务

除了 CLI 方式,也可以启动 API 服务实现动态调用,更适合集成到其他系统中。

启动 API 服务

python api.py -p 9880 -bind 0.0.0.0

💡 参数说明:

  • -p: 指定端口,默认 9880
  • -bind: 绑定 IP,设为0.0.0.0可远程访问(注意防火墙和安全策略)

服务启动后,可通过 HTTP POST 请求调用/tts接口。

API 请求参数说明

参数说明
text要合成的文本
text_language文本语言,支持"zh","en","ja","mix"
ref_audio_path参考音频路径(服务器本地路径)
prompt_text参考音频对应文本
prompt_language参考文本语言
cut_punc文本切分符号,如",."
speed_factor语速调节(0.5~2.0)
streaming是否流式返回,默认 false

Python 调用示例

import requests def tts_api(text, filename): url = "http://localhost:9880/tts" data = { "text": text, "text_language": "zh", "ref_audio_path": "./output/slicer/ref_audio_0000000000_0000220480.wav", "prompt_text": "大家好,我是今天的讲解员。", "prompt_language": "zh", "cut_punc": ",。!?" } response = requests.post(url, json=data) if response.status_code == 200: with open(filename, 'wb') as f: f.write(response.content) print(f"✅ 音频已保存为 {filename}") else: print("❌ 请求失败:", response.json()) # 测试调用 tts_api("这是一次通过 API 实现的语音合成测试。", "api_output.wav")

这种方式特别适合构建语音播报系统、智能客服机器人等自动化场景。


常见问题与解决方案

❌ 报错:KeyError: ‘-’ 或其他符号无法识别

现象
当输入文本包含连字符-、括号()、数字缩写等特殊字符时,ASR 或 TTS 模块抛出 KeyError。

原因
英文 G2P(Grapheme-to-Phoneme)词典未收录某些符号,导致查询失败。

解决方法

  1. 替换符号(推荐临时方案):

bash sed -i 's/-/ /g' target_text.txt

  1. 更新代码补丁

查看 GitHub PR #1454,已修复该问题。可拉取最新代码重新安装:

bash git clone https://github.com/RVC-Boss/GPT-SoVITS.git cd GPT-SoVITS git pull origin main bash install.sh

  1. 自定义词典扩展(高级):

修改GPT_SoVITS/text/english.py中的 CMU 词典映射表,添加缺失词条。


⚠️ 音质不佳?试试这些优化技巧

问题建议
合成语音机械感强更换参考音频,选择语气自然、节奏适中的语音
英文发音不准确保target_language设置为"中英混合"并提供足够英文训练数据
音频断句生硬cut_punc中加入更多切分符,如";:"
出现吞音或重复减少单句长度,控制每句不超过 20 字

🛠️ 工程经验:我发现很多“发音不准”的问题其实源于参考文本与目标文本的语言风格不一致。比如用正式新闻体去合成口语化表达,模型很难把握语调变化。尽量让两者风格接近,能显著提升自然度。


📦 模型路径管理建议

随着项目迭代,你会积累多个训练模型。建议建立统一模型管理目录:

mkdir -p models/{gpt,sovits} cp pretrained_models/*.ckpt models/gpt/ cp pretrained_models/*.pth models/sovits/

然后在脚本中引用:

--gpt_model "models/gpt/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" --sovits_model "models/sovits/s2G488k.pth"

这样不仅便于切换不同模型,还能避免路径混乱导致的加载失败。


这种高度集成的设计思路,正推动着个性化语音合成技术向更轻量、更高效的方向演进。无论你是想打造专属语音助手,还是搭建自动化播报系统,GPT-SoVITS 都是一个值得深入探索的技术底座。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/26 0:28:49

Dify插件开发完整指南:从环境搭建到部署

Dify插件开发完整指南&#xff1a;从环境搭建到部署 在大模型&#xff08;LLM&#xff09;技术快速落地的今天&#xff0c;开发者面临的不再是“能不能用AI”&#xff0c;而是“如何高效、稳定地将AI能力嵌入真实业务”。一个典型的挑战是&#xff1a;你的智能客服需要调用订单…

作者头像 李华
网站建设 2026/3/2 17:07:38

YOLO-V5快速上手指南:从环境搭建到检测

YOLO-V5实战入门&#xff1a;从零构建目标检测系统 在智能安防、工业质检和自动驾驶日益普及的今天&#xff0c;如何快速实现一个高精度、可落地的目标检测系统&#xff0c;成了许多开发者面临的现实问题。传统的两阶段检测器虽然精度高&#xff0c;但推理速度慢&#xff1b;而…

作者头像 李华
网站建设 2026/3/3 18:38:12

Dify智能体平台融合GPT-SoVITS打造拟人客服系统

Dify智能体平台融合GPT-SoVITS打造拟人客服系统 在客户服务正从“能用”迈向“好用”的今天&#xff0c;用户不再满足于冷冰冰的自动回复。他们期待的是有温度、有辨识度、甚至能唤起信任感的声音交互体验。然而&#xff0c;传统语音客服系统长期受限于音色单一、定制成本高、部…

作者头像 李华
网站建设 2026/2/24 9:14:10

中小企业备份方案: 本地备份 vs. 云备份, 哪个是企业最佳选择?

越来越多的中小企业正在混合云环境中运营&#xff0c;它们必须在保障数据安全的同时&#xff0c;平衡成本、灵活性与控制力。基于云和本地的数据及工作负载之间的分界线正不断变化&#xff0c;这就要求备份与恢复解决方案必须具备高度的通用性。过去十年间&#xff0c;云备份与…

作者头像 李华
网站建设 2026/3/1 22:39:16

Veeam 恢复演练与合规解决方案:快速洁净的恢复保证

利用 Veeam 备份与恢复方案&#xff0c;通过经过测试、可审计的恢复计划自动化执行每一步恢复任务&#xff0c;在最关键的时刻证明企业面对网络威胁的就绪状态。在洁净室中验证洁净恢复点自动捕获审计证据演练本地恢复及云端恢复Veeam 恢复方案优势验证每一次恢复的洁净备份文件…

作者头像 李华
网站建设 2026/2/20 18:19:20

91n节点也能高效跑AI?借助清华镜像部署轻量级TensorFlow服务

91n节点也能高效跑AI&#xff1f;借助清华镜像部署轻量级TensorFlow服务 在不少中小型团队或教育机构的AI实践中&#xff0c;一个现实问题始终挥之不去&#xff1a;如何在有限的计算资源下——比如仅有91个节点的小型集群——快速、稳定地部署一套可用的AI推理服务&#xff1f…

作者头像 李华