news 2026/4/18 13:05:41

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

作者头像

张小明

前端开发工程师

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

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

在远程服务器上做AI语音项目,最头疼的莫过于没有图形界面——WebUI打不开、操作全靠SSH终端。最近尝试在纯命令行环境下部署GPT-SoVITS,这个目前非常火的少样本语音克隆系统,发现虽然官方提供了Web界面,但其实它的CLI(命令行接口)和API支持已经相当成熟,完全可以脱离浏览器运行。

本文记录了从零开始,在 Ubuntu 系统中通过命令行完成 GPT-SoVITS 的完整部署流程:包括环境配置、音频预处理、ASR自动识别、TTS推理生成,以及如何用API进行集成调用。整个过程适用于远程云服务器或无GUI的Linux环境,特别适合自动化任务或嵌入式部署场景。

⚠️ 说明:本教程聚焦于基础推理链路,即“输入一段声音 → 提取文本 → 合成新语音”,不涉及模型训练与微调。如需训练,请参考官方文档进一步操作。


获取项目包并解压

为了避免手动克隆代码、逐个下载模型权重的麻烦,推荐直接使用官方发布的整合包。这些压缩包通常包含了核心代码、预训练模型和依赖说明,省去大量配置时间。

前往 GitHub - GPT-SoVITS Releases,找到最新的.7z格式整合包,例如:

GPT-SoVITS-beta0706fix1.7z

使用wget下载到服务器:

wget https://huggingface.co/lj1995/GPT-SoVITS/resolve/main/GPT-SoVITS-beta0706fix1.7z

Ubuntu 默认不支持.7z解压,需要先安装p7zip-full

sudo apt update && sudo apt install p7zip-full -y

然后执行解压:

7z x GPT-SoVITS-beta0706fix1.7z

解压后你会看到一个结构清晰的目录,关键部分如下:

├── api.py # HTTP API服务入口 ├── batch_inference.py # 批量推理脚本 ├── config.py # 全局配置文件 ├── GPT_SoVITS # 核心推理模块 ├── GPT_weights # 存放GPT模型(.ckpt) ├── SoVITS_weights # 存放SoVITS声学模型(.pth) ├── tools/ │ ├── slice_audio.py # 音频静音段切割工具 │ └── asr/funasr_asr.py # 基于FunASR的语音转文字 ├── output/ │ ├── slicer/ # 切割后的短音频片段 │ ├── asr_opt/ # ASR识别出的文字结果 │ └── result/ # 最终生成的合成语音 ├── pretrained_models/ # 公共预训练模型(建议保留) └── requirements.txt # Python依赖列表

这个结构设计得很合理:输入输出分离、功能模块独立,非常适合脚本化处理。


配置CUDA与Python环境

GPT-SoVITS 推理极度依赖 GPU 加速,尤其是 SoVITS 模型对显存要求较高。强烈建议使用 NVIDIA 显卡 + CUDA 环境。以下以CUDA 11.8 + PyTorch 2.1.1 + Python 3.9为例。

安装系统级依赖

首先确保系统具备基本多媒体处理能力:

sudo apt install ffmpeg libsox-dev -y

ffmpeg用于音频格式转换,libsox-dev支持更复杂的音频操作。

创建虚拟环境

推荐使用 Conda 管理环境,避免污染全局 Python:

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

安装 PyTorch(GPU版)

根据你的CUDA版本选择对应安装命令。这里假设你已正确安装NVIDIA驱动和CUDA Toolkit 11.8:

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

✅ 小贴士:如果你遇到No module named 'torch'或显卡无法识别的问题,请检查nvidia-smi是否能正常显示GPU信息,并确认PyTorch版本与CUDA匹配。

安装项目依赖

进入项目根目录,安装其余依赖:

pip install -r requirements.txt

可能会遇到ffmpeg-python冲突问题,尤其是在Conda环境中。如果报错提示找不到av模块或编解码失败,可以补装:

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

这样能保证底层FFmpeg库兼容性更好。


准备参考音频

要克隆某个音色,你需要一段高质量的“参考音频”(reference audio)。这是整个流程的基础,质量直接影响最终效果。

推荐标准:

  • 时长:5~10秒为佳(太短难建模,太长需切割)
  • 格式:WAV,PCM 16-bit,单声道(mono),采样率 16kHz 或 32kHz
  • 内容:朗读一句完整中文语句,尽量无背景噪音、口水音、呼吸杂音
  • 命名示例ref.wav

上传至项目目录,比如:

/home/ubuntu/gpt-sovits/ref.wav

如果原始音频是MP3或其他格式,可用ffmpeg转换:

ffmpeg -i ref.mp3 -f wav -ar 16000 -ac 1 -acodec pcm_s16le ref.wav

这会将音频转为16kHz单声道WAV,符合大多数语音模型输入要求。


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

如果你的参考音频超过30秒,或者包含长时间静音,建议先进行切片处理。tools/slice_audio.py使用滑动窗口检测音量曲线,自动按静音段落分割成多个短片段。

查看帮助文档了解参数含义:

python tools/slice_audio.py -h

主要参数解释:

参数含义
inp输入音频路径
opt_root输出目录
threshold分贝阈值(低于此值视为静音,默认 -34 dBFS)
min_length每段最小长度(毫秒)
min_interval最小切割间隔
hop_size计算音量步长(越小越精确)
max_sil_kept切割后保留的最大静音长度

执行切割命令:

python tools/slice_audio.py \ /home/ubuntu/gpt-sovits/ref.wav \ /home/ubuntu/gpt-sovits/output/slicer \ -34 5000 300 10 200 1.0 0.8 0 1

输出文件将保存在output/slicer/目录下,形如:

ref.wav_0000000000_0000220480.wav

你可以播放这些片段确认是否清晰可辨。一般选其中一段作为后续参考即可。


步骤二:语音识别(ASR)提取文本

有了音频片段后,下一步是获取其对应的文本内容。GPT-SoVITS 提供了基于FunASR的自动语音识别脚本,支持中/英/日三语。

运行帮助命令查看选项:

python tools/asr/funasr_asr.py -h

常用参数:

  • -i,--input_folder: 输入音频文件夹(即上一步的slicer目录)
  • -o,--output_folder: 输出文本路径
  • -l,--language: 指定语言"zh"/"en"/"ja"

开始识别:

python tools/asr/funasr_asr.py \ -i /home/ubuntu/gpt-sovits/output/slicer \ -o /home/ubuntu/gpt-sovits/output/asr_opt \ -l zh

成功后会在asr_opt目录生成一个.list文件,例如slicer.list,格式如下:

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

示例内容:

/home/ubuntu/gpt-sovits/output/slicer/ref.wav_0000000000_0000220480.wav|ref|ZH|你好,欢迎使用GPT-SoVITS语音合成系统。

⚠️ 注意事项:
- 如果识别错误,可以直接编辑.list文件修正文本。
- 文本必须与音频内容严格对应,否则会影响音色还原度。
- 若参考音频本身就是人工标注的,也可以跳过ASR,手动生成.list文件。


步骤三:TTS推理生成语音

终于到了最关键的一步:使用参考音频+文本,结合目标文本,合成新的语音。

查看推理脚本参数

python GPT_SoVITS/inference_cli.py -h

核心参数说明:

参数说明
--gpt_modelGPT模型路径(.ckpt 文件)
--sovits_modelSoVITS模型路径(.pth 文件)
--ref_audio参考音频路径(建议来自切割后的片段)
--ref_text参考音频对应文本文件路径
--ref_language参考语言:”中文”/”英文”/”日文”
--target_text待合成的目标文本文件路径
--target_language目标语言:”中文”/”中英混合”/”多语种混合”等
--output_path输出音频保存路径

准备输入文件

创建目标文本文件:

echo "这是一个由GPT-SoVITS生成的语音示例,支持中英文混合输入。" > /home/ubuntu/gpt-sovits/output/target_text.txt

创建参考文本文件(与ASR识别一致):

echo "你好,欢迎使用GPT-SoVITS语音合成系统。" > /home/ubuntu/gpt-sovits/output/ref_text.txt

执行推理命令

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

等待几秒到十几秒(取决于GPU性能),将在output/result目录生成类似output.wav的合成音频。

💡 经验分享:初次运行建议用较短的目标文本(<50字),避免因内存不足导致崩溃。A10/A100显卡通常可处理百字级别句子。


方式二:通过API服务调用

除了命令行脚本,GPT-SoVITS 还内置了一个轻量级HTTP API服务,非常适合集成进其他系统(如聊天机器人、语音播报平台)。

启动API服务

python api.py

默认监听地址为http://127.0.0.1:9880,可通过浏览器访问查看接口文档(Swagger UI)。

🔐 安全提醒:若在公网服务器运行,请务必限制访问IP或启用认证机制,防止被滥用。

修改默认配置(可选)

编辑config.py可设置全局参数,例如指定默认模型路径:

gpt_path = "/home/ubuntu/gpt-sovits/GPT_weights/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt" sovits_path = "/home/ubuntu/gpt-sovits/SoVITS_weights/s2G488k.pth"

还可以设定设备类型(CPU/GPU)、是否启用半精度等。

发送POST请求生成语音

Python客户端示例
import requests def get_tts_wav(text, filename): url = "http://127.0.0.1:9880" data = { "text": text, "text_language": "mix", # 支持 "zh", "en", "ja", "mix" "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()) # 测试调用 get_tts_wav( "Hello world! 这是通过API生成的语音,支持中英文混合播报。", "api_output.wav" )

该方式更适合批量任务或定时生成场景,配合cronCelery可实现全自动语音播报系统。


常见问题与优化建议

❌ 报错:KeyError: ‘-’ 或 KeyError: ‘(‘

这是由于英文G2P词典未收录特殊符号导致的经典问题,常见于混合文本中含有连字符、括号等情况。

错误堆栈节选:
File "GPT_SoVITS/text/english.py", line 328, in qryword phones.extend(self.cmu[w][0]) KeyError: '-'
解决方案:
  1. 临时规避:在输入前清洗文本,替换非法字符为空格:

python text = text.replace('-', ' ').replace('(', ' ').replace(')', ' ')

  1. 永久修复:升级至最新代码版本。GitHub PR #1454 已修复该问题:

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

再重新安装依赖即可。


⚠️ 音频格式不兼容?

请确保所有输入音频为单声道WAV(PCM 16-bit),采样率建议为16kHz 或 32kHz

使用ffmpeg转换任意格式:

ffmpeg -i input.mp3 -f wav -ar 16000 -ac 1 -acodec pcm_s16le output.wav

🧩 如何提高合成质量?

这是我实践中总结的一些实用技巧:

  • 参考音频去噪:使用tools/uvr5对原始音频进行人声增强与背景降噪。
  • 文本一致性:参考文本的语言风格应尽量接近目标文本(例如都用口语化表达)。
  • 控制句子长度:单次合成建议不超过80字,过长易出现断句不当或音色漂移。
  • 启用自动切分:在API调用时添加cut_punc=",。!?"参数,让系统按标点智能分句。
  • 选择合适模型:不同.ckpt.pth模型针对不同语种优化,注意匹配使用。

这种高度集成且支持CLI/API的设计思路,正推动着语音合成技术向更高效、更易部署的方向演进。对于开发者而言,掌握这套命令行工作流,意味着可以在任何资源受限或无人值守的环境中,灵活构建属于自己的个性化语音引擎。

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

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

树莓派4B能跑LobeChat吗?极限低配环境尝试

树莓派4B能跑LobeChat吗&#xff1f;极限低配环境尝试 在智能家居设备日益复杂的今天&#xff0c;越来越多的极客开始思考&#xff1a;我们能否拥有一台完全属于自己的AI助手——不依赖云端、不上传数据、24小时静音运行&#xff0c;还能用语音对话控制家里的灯和温湿度&#x…

作者头像 李华
网站建设 2026/4/17 16:55:33

从图文到视频,如何用Coze跑通“小红书儿童绘本”的商业闭环?

大家好&#xff0c;我是小肥肠&#xff01;上周的儿童绘本图文教程大家反响热烈&#xff0c;但我也听到了大家的呼声&#xff1a;视频才是现在的流量密码&#xff01;没问题&#xff0c;今天直接安排&#xff01;本期教程教你用 Coze Nano Banana Pro 搭建全自动视频绘本工作流…

作者头像 李华
网站建设 2026/4/18 6:28:58

MQTT网络传输协议巩固知识基础题(1)

1. MQTT 是什么类型的协议? A. 请求-响应协议 B. 发布-订阅协议 C. 点对点协议 D. 广播协议 答案:B 解析: MQTT(Message Queuing Telemetry Transport)是基于发布-订阅模式的轻量级消息传输协议。 2. MQTT 主要设计用于哪种场景? A. 高带宽网络环境 B. 低带宽、高延迟…

作者头像 李华
网站建设 2026/4/18 11:06:23

AI绘画不止“出图快”:它正让文化活起来、让普通人赚到钱

前几天在南宁举办的中国—东盟博览会上&#xff0c;一个“AI非遗服饰体验区”被围得水泄不通。外国游客对着屏幕输入自己的照片&#xff0c;一键选择印尼纱笼、泰国宋干节服饰或是广西壮锦盛装&#xff0c;十秒不到&#xff0c;一张融合了个人特质与传统纹样的合影就生成了。我…

作者头像 李华
网站建设 2026/4/18 9:39:15

LobeChat能否用于创建交互式教程?教育内容动态生成

LobeChat能否用于创建交互式教程&#xff1f;教育内容动态生成 在智能教育工具日益普及的今天&#xff0c;越来越多的学习者不再满足于“点击播放”的录播课或静态PDF讲义。他们渴望的是能即时回应、按需讲解、甚至主动引导学习路径的“AI导师”。这种需求背后&#xff0c;是对…

作者头像 李华
网站建设 2026/4/18 8:16:46

【Android饮食健康管理系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案

摘 要 科学技术日新月异&#xff0c;人们的生活都发生了翻天覆地的变化&#xff0c;饮食健康管理系统当然也不例外。过去的信息管理都使用传统的方式实行&#xff0c;既花费了时间&#xff0c;又浪费了精力。在信息如此发达的今天&#xff0c;我们可以通过网络这个媒介&#x…

作者头像 李华