#1730 与GPT-SoVITS对接后生成的音频文件没有声音

172.96* Posted at: 6 days ago 👁43

用cmd启动GPT-SoVITS后,在TTS设置里测试是成功的,但是试听配音没有声音,后台的反馈是:
INFO: 127.0.0.1:13889 - "GET /tts?text=%E4%BD%A0%E5%A5%BD%E5%95%8A%2C%E6%88%91%E4%BA%B2%E7%88%B1%E7%9A%84%E6%9C%8B%E5%8F%8B%2C%E5%B8%8C%E6%9C%9B%E4%BD%A0%E7%9A%84%E6%AF%8F%E4%B8%80%E5%A4%A9%E9%83%BD%E6%98%AF%E7%BE%8E%E5%A5%BD%E6%84%89%E5%BF%AB%E7%9A%84%21&text_lang=zh&ref_audio_path=BCTRRonald.wav&prompt_text=Chilling+words%2C+of+course%2C+But+something+that+you+will+probably+hear+soon&prompt_lang=en&speed_factor=1.0 HTTP/1.1" 200 OK
看着好像是成功的

然后生成的音频文件体积不小,可并没有声音

设备:
GPU:1650
CPU:i5 9300H
内存:16GB

5 Replies

根据您描述的现象(测试成功但生成文件无声),这通常是由于 GPT-SoVITS 生成的音频格式或编码与 pyVideoTrans 的后续处理流程不兼容导致的。请按以下步骤排查:

  1. 检查音频文件本身

    • 找到 pyVideoTrans 生成的无声音频文件(通常在输出目录的临时文件夹中,文件名类似 tts_*.wavtts_*.mp3)。
    • 尝试用系统自带的播放器(如 Windows 媒体播放器)或 VLC 直接打开这个文件,确认是否真的没有声音。如果播放器能播放,则问题出在 pyVideoTrans 的合并环节;如果也不能播放,则问题出在 GPT-SoVITS 的生成环节。
  2. 验证 GPT-SoVITS 的 API 响应

    • 从日志看,HTTP 200 OK 只表示请求成功,不保证返回的音频数据正确。您需要检查 GPT-SoVITS 服务端是否有错误日志。
    • 关键步骤:在 pyVideoTrans 的 “配音角色” 选择界面,选中您配置的 GPT-SoVITS 角色后,点击 “试听” 按钮。观察:

      • pyVideoTrans 界面是否提示试听成功或失败?
      • GPT-SoVITS 的后台 cmd 窗口是否会输出额外的错误信息?
    • 如果试听就失败或无声,那么问题根源在 GPT-SoVITS 服务或配置上。
  3. 排查 GPT-SoVITS 配置

    • 参考音频(Ref Audio):确保您选择的 .wav 参考音频文件路径正确,且音频清晰、质量较好。
    • 提示文本(Prompt Text)prompt_text 的内容应与参考音频的说话内容一致,且 prompt_lang 设置正确。您日志中的 prompt_text 是英文,但 text_langzh,这可能导致合成异常。请尝试使用与目标文本(text)相同语言的提示文本。
    • 模型状态:确认 GPT-SoVITS 的模型已正确加载,在启动命令中无报错。
  4. 在 pyVideoTrans 中调整设置

    • 菜单栏 -> 工具 -> 高级选项 中,找到 “配音调整” 部分。
    • 尝试将 “音频采样率” 改为 2400032000(需与您的 GPT-SoVITS 模型输出采样率匹配,常见为 24000)。
    • 确保 “音频格式” 设置为 wav(GPT-SoVITS 默认返回 wav)。
  5. 检查硬件与驱动

    • 您的 GPU(GTX 1650)显存为 4GB,运行 GPT-SoVITS 可能处于临界状态。请观察 GPT-SoVITS 启动和推理时,cmd 窗口是否有关于显存不足的警告。如果有,可能需要使用更小的模型或开启 --half 半精度推理以节省显存。

建议的排查顺序:先执行第2步的“试听”,这是最直接的测试。如果试听成功但最终文件无声,重点查第1步和第4步;如果试听就失败,重点查第3步和第5步。

如果上述步骤无法解决,请提供:

  • GPT-SoVITS 服务启动时的完整命令和输出。
  • pyVideoTrans 试听失败时的具体错误提示(如果有)。
  • 无声音频文件的详细属性(右键文件->属性->详细信息,查看编码格式、比特率、音频采样率等)。

这是gpt-sovits服务启动时的输出:












-TTS Config










-
device : cuda
is_half : True
version : v2
t2s_weights_path : GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt
vits_weights_path : GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth
bert_base_path : GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large

cnhuhbert_base_path : GPT_SoVITS/pretrained_models/chinese-hubert-base

Loading Text2Semantic weights from GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt
Loading VITS weights from GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth.
Loading BERT weights from GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large
Loading CNHuBERT weights from GPT_SoVITS/pretrained_models/chinese-hubert-base
INFO: Started server process [9352]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:9880 (Press CTRL+C to quit)

这是试听后的输出(并没有产生试听音频):
Set seed to 4258718333
並行推理模式已開啟
分桶處理模式已開啟
實際輸入的參考文本: Chilling words, of course, But something that you will probably hear soon.

切分文本

實際輸入的目標文本:
你好啊我的朋友.
實際輸入的目標文本(切句後):
['你好啊我的朋友.']

提取文本BERT特徵

100%|████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:05

问题已明确。从日志看,GPT-SoVITS 服务启动正常,但在处理您的请求时,推理过程在“提取文本BERT特征”步骤后卡住或中断,没有完成音频生成,因此您听不到声音,但 pyVideoTrans 收到了一个空的或损坏的音频文件(所以体积可能正常但无内容)。

核心原因是 GPT-SoVITS 的参考音频(Ref Audio)与提示文本(Prompt Text)不匹配,导致模型推理失败。您的配置是:

  • 参考音频BCTRRonald.wav (推测是英文语音)
  • 提示文本Chilling words, of course, But something that you will probably hear soon (英文)
  • 目标文本你好啊,我亲爱的朋友,希望你的每一天都是美好愉快的! (中文)

GPT-SoVITS 要求提示文本必须与参考音频的说话内容完全一致,才能正确提取语音特征进行克隆。中英文混合或内容不匹配会导致模型无法工作。

解决方案:

  1. 修正参考音频与提示文本的匹配(关键步骤)

    • 找到 BCTRRonald.wav 这个文件,用播放器听一下,确认里面的人声具体说了什么。
    • 提示文本 修改为与该音频 一字不差 的内容(包括标点)。如果音频是英文,提示文本就必须是相同的英文。
    • 在 pyVideoTrans 的 GPT-SoVITS 角色配置中,将 提示文本提示文本语言 按照上述要求修正。
  2. 检查目标文本语言设置

    • 确保 文本语言 设置为 zh(中文)。
  3. 简化测试

    • 为了快速验证,您可以先做一个简单测试:将 目标文本 也改为与参考音频内容相同的英文短句(例如 “Hello world”)。
    • 如果这样能正常生成英文语音,则证明服务是好的,问题就是中英文跨语言克隆需要更复杂的配置或模型支持(GPT-SoVITS 对跨语言克隆效果不稳定)。
  4. 如果仍需中英跨语言克隆

    • 考虑使用 中文的参考音频中文的提示文本
    • 或者,在 GPT-SoVITS 的 WebUI 中先测试跨语言合成是否正常,再配置到 pyVideoTrans。

请先执行第1步,确保提示文本与参考音频内容完全一致,然后重新试听。 如果问题依旧,请提供 GPT-SoVITS 服务在试听请求后更完整的日志(看是否有报错信息出现)。

还是没有试听音频,反馈的命令是:
False False False
Set seed to 1896248572
並行推理模式已開啟
分桶處理模式已開啟
實際輸入的參考文本: Chilling words, of course, But something that you will probably hear soon.

切分文本

實際輸入的目標文本:
hello, my dear friend. i hope your every day is beautiful and enjoyable!
實際輸入的目標文本(切句後):
['hello,', ' my dear friend.', ' i hope your every day is beautiful and enjoyable!']

提取文本BERT特徵

100%|███████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00

问题已定位。日志显示推理过程在“提取文本BERT特征”步骤后再次中断,没有进入后续的语音生成阶段。开头的 False False False 是 pyVideoTrans 检测音频生成失败的标志。这通常由两个原因导致:1. 参考音频路径或内容问题:虽然服务启动了,但可能无法正确读取或处理您指定的 BCTRRonald.wav 文件。2. GPT-SoVITS 模型配置或显存问题:您的 GPU (GTX 1650 4GB) 显存较小,可能不足以完成推理。请按以下步骤排查:第一步:验证参考音频文件1. 确认 BCTRRonald.wav 文件存在于您的电脑上,并且路径在 pyVideoTrans 的配置中填写正确(建议使用绝对路径,如 C:/Users/YourName/Desktop/BCTRRonald.wav)。2. 用音频编辑软件(如 Audacity)或 ffprobe 检查该音频文件的格式、采样率和时长是否正常。在命令行运行:ffprobe -i "BCTRRonald.wav"第二步:在 GPT-SoVITS 的 WebUI 中直接测试这是最关键的诊断步骤。1. 打开浏览器,访问 http://127.0.0.1:9880 (您的服务地址)。2. 在 WebUI 界面中:参考音频 上传 BCTRRonald.wav参考文本 填入与该音频内容完全一致的文本(英文)。合成文本 填入一句简短的英文,例如 “hello”。3. 点击“合成语音”。观察:是否能成功生成并播放音频?WebUI 下方或浏览器开发者工具的控制台(F12)是否有错误信息?如果 WebUI 也无法生成,则问题出在 GPT-SoVITS 服务本身(模型、显存、配置)。如果 WebUI 可以生成,但 pyVideoTrans 不行,则是 pyVideoTrans 的 API 调用参数或配置问题。第三步:检查显存和模型1. 在 GPT-SoVITS 服务启动时,您使用了 --is_half True 开启半精度以减少显存占用,这很好。2. 但 GTX 1650 的 4GB 显存可能仍然紧张。请观察在合成请求时,GPU 显存使用率是否接近 100%(可通过任务管理器性能选项卡查看)。3. 如果显存不足,尝试:在启动命令中添加 --device cpu 强制使用 CPU(会很慢,但用于测试)。或尝试使用更小的模型(如果可用)。第四步:检查 pyVideoTrans 的 GPT-SoVITS 配置在 pyVideoTrans 的 TTS 设置中,找到您配置的 GPT-SoVITS 角色,检查:API地址 是否为 http://127.0.0.1:9880(与您启动的服务端口一致)。参考音频路径 是否为绝对路径且正确。提示文本 是否与参考音频内容 完全一致(包括大小写和标点)。提示语言 是否与提示文本语言匹配(英文应为 en)。文本语言 是否与目标文本语言匹配(您测试的英文应为 en)。请优先执行第二步(WebUI 测试),这将直接告诉我们问题是出在服务端还是客户端。根据 WebUI 测试结果,我们才能进行下一步。

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Donate: https://ko-fi.com/jianchang512

Trending Questions