如何用 GPT-SoVITS 的 inference_cli.py 在无 WebUI 环境完成一次合成
【免费下载链接】GPT-SoVITS1 min voice data can also be used to train a good TTS model! (few shot voice cloning)项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS
如果你的机器只能跑命令行(例如没有图形界面的 Linux 服务器、远程容器),GPT-SoVITS 仓库里提供了一个纯命令行合成入口 inference_cli.py。它复用了推理 WebUI 的核心合成函数get_tts_wav,但完全不启动 Gradio 页面:你传入 GPT/SoVITS 模型、参考音频、参考文本和目标文本,它就执行一次合成并把结果写成output.wav。适用前提是环境已按 README.md 安装好依赖、FFmpeg 和预训练模型,且你手上有已训练的 GPT 模型(.ckpt)与 SoVITS 模型(.pth)。
准备工作:环境、模型与参考文件
inference_cli.py没有任何独立的依赖清单,它from GPT_SoVITS.inference_webui import ...直接复用 WebUI 模块的加载与合成逻辑,所以环境要求和 WebUI 推理完全一致。按 README 的 Linux 安装路径准备:
conda create -n GPTSoVits python=3.10 conda activate GPTSoVits bash install.sh --device <CU126|CU128|ROCM|CPU> --source <HF|HF-Mirror|ModelScope> [--download-uvr5]README 明确说明:install.sh成功执行后,可以跳过手动下载预训练模型的步骤;否则需要把 Hugging Face 上的 GPT-SoVITS Models 下载到GPT_SoVITS/pretrained_models。中文合成还需要把 G2PWModel 解压重命名为G2PWModel放到GPT_SoVITS/text。
推理时还会用到两个预训练资源,inference_webui.py的默认路径是GPT_SoVITS/pretrained_models/chinese-hubert-base(可用环境变量cnhubert_base_path覆盖)和GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large(可用bert_path覆盖),一般随预训练模型一起就位即可。
合成前还需准备四类文件:
- GPT 模型文件与 SoVITS 模型文件(微调产物的
.ckpt/.pth); - 一段参考音频:
get_tts_wav内部会按 16kHz 重采样检查长度,超出 3~10 秒范围会直接抛出OSError:参考音频在3~10秒范围外,请更换!,所以参考音频必须落在这个区间; - 参考文本文件(UTF-8 文本):与参考音频对应的逐字转写,
inference_cli.py会整文件读取; - 目标文本文件(UTF-8 文本):要合成的内容,同样整文件读取。
注意两点:参考文本和目标文本都是按“整个文件内容”读入的,不要在一个文件里混放多段无关内容;inference_cli.py内部合成参数固定为top_p=1、temperature=1,不提供 CLI 参数覆盖。
执行合成:参数与命令
脚本定义了 8 个必填参数(见 inference_cli.py 的 argparse 定义),语言取值是硬编码的枚举:
| 参数 | 说明 | 取值 |
|---|---|---|
--gpt_model | GPT 模型文件路径 | 必填 |
--sovits_model | SoVITS 模型文件路径 | 必填 |
--ref_audio | 参考音频文件路径(3~10 秒) | 必填 |
--ref_text | 参考文本文件路径(UTF-8) | 必填 |
--ref_language | 参考音频语言 | 中文/英文/日文 |
--target_text | 目标文本文件路径(UTF-8) | 必填 |
--target_language | 目标文本语言 | 中文/英文/日文/中英混合/日英混合/多语种混合 |
--output_path | 输出目录 | 必填 |
在项目根目录下执行(下面的路径按你实际的文件位置替换,语言参数必须用上面枚举中的中文值原样传入):
python GPT_SoVITS/inference_cli.py \ --gpt_model <gpt模型文件.ckpt> \ --sovits_model <sovits模型文件.pth> \ --ref_audio <参考音频.wav> \ --ref_text <参考文本.txt> \ --ref_language 中文 \ --target_text <目标文本.txt> \ --target_language 中文 \ --output_path ./out为什么强调在项目根目录执行:inference_webui.py在导入时会读写当前工作目录下的./weight.json来缓存/选择权重(change_gpt_weights、change_sovits_weights成功后会把本次加载的模型路径写入该文件的GPT/SoVITS键),而仓库根目录没有__init__.py,从根目录运行才能正常解析GPT_SoVITS、tools等顶层模块。因此该脚本除了产生音频外,还会更新当前工作目录的weight.json——这是可预期的副作用,不是报错。
结果验证:output.wav 在哪里
synthesize()会取合成结果生成器产出的最后一段音频,用 soundfile 写到os.path.join(output_path, "output.wav"),并在终端打印一行:
Audio saved to ./out/output.wav上面是文档外的实际输出格式(脚本原文为print(f"Audio saved to {output_wav_path}"),output_wav_path随你传的--output_path变化)。判定成功的依据就是这行打印加上--output_path目录下出现output.wav,用任意播放器核对内容即可。
如果运行中断,对照两处代码里明确定义的行为:
- 参考音频不是 3~10 秒:终端出现
参考音频在3~10秒范围外,请更换!(OSError),换一段参考音频即可; - 目标版本是 v3 LoRA 权重但对应的 v3 底模缺失:
change_sovits_weights会抛出FileExistsError,提示底模缺失、无法加载相应 LoRA 权重——需要先把GPT_SoVITS/pretrained_models中 v3 底模补齐(见 README 的 V3 Release Notes)。
限制与可选路径
- 语言枚举有限:
--ref_language只接受中文/英文/日文三选一,参考音频是韩语、粤语时无法用此脚本表达;目标文本才支持混合语言选项。 - 输出文件名固定为
output.wav:多次运行同一--output_path会互相覆盖,需要留存时每次换目录或事后改名。 top_p、temperature在脚本里写死为 1,想要 WebUI 里的top_k/top_p/temperature微调,CLI 不提供入口。- 如果你的环境其实可以开浏览器,README 给出的替代路径是
python GPT_SoVITS/inference_webui.py(或python webui.py后打开1-GPT-SoVITS-TTS/1C-inference标签页),功能面更全;但在无 WebUI 环境,inference_cli.py就是这条最短路径。
【免费下载链接】GPT-SoVITS1 min voice data can also be used to train a good TTS model! (few shot voice cloning)项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考