#3050 启动GPT-SoVITS服务,终端信息如下:F:\ai\GPT-SoVITS-v2pro-20250604>.\runtime\python api_v2.py-TTS Config-device : cud

240e:341* Posted at: 14 days ago 👁91

启动GPT-SoVITS服务,终端信息如下:F:\ai\GPT-SoVITS-v2pro-20250604>.\runtime\python api_v2.py












-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 [16352]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:9880 (Press CTRL+C to quit)
打开pyVedioTransV3.96在TTS设置,中选择GPT-SoVITS API
API URL 填写 http://127.0.0.1:9880
额外参数 pyVideoTrans
参考音频#音频文字内容#语言代码
罗杰斯.wav#What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.#en
点解测试,返回TEST OK,但没有人声。
终端显示

F:\ai\GPT-SoVITS-v2pro-20250604>.\runtime\python api_v2.py












-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 [9132]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:9880 (Press CTRL+C to quit)
False False False
Set seed to 1401561808
并行推理模式已开启
分桶处理模式已开启
实际输入的参考文本: What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.

切分文本

实际输入的目标文本:
你好啊我的朋友
实际输入的目标文本(切句后):
['你好啊我的朋友。']

提取文本Bert特征

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

25 Replies

测试成功但无人声,是因为 GPT-SoVITS API 服务返回了静音音频。这通常是由于参考音频与目标文本的语言不匹配或参考音频质量/内容问题导致的。

解决方案:

  1. 检查参考音频与文本的语言匹配:你的参考音频文字是英文(en),而测试文本是中文(zh)。GPT-SoVITS 的克隆效果高度依赖参考音频的语言与目标文本语言的一致性。请确保“参考音频#音频文字内容#语言代码”这一行中,语言代码音频文字内容 的实际语言匹配,并且与你希望生成的配音语言(目标语言)一致。

    • 如果你想生成英文配音:参考音频语言代码应为 en,测试文本也应为英文。
    • 如果你想生成中文配音:参考音频语言代码应为 zh,且参考音频内容应为中文语音。你需要提供一段中文的参考音频及对应的中文文本。
  2. 检查参考音频文件

    • 确认 罗杰斯.wav 文件存在于 pyVideoTrans 软件根目录下。
    • 确保该音频文件清晰、无杂音,且时长在 3-10 秒之间,内容与提供的文本完全一致。
  3. 调整 GPT-SoVITS 参数:在 pyVideoTrans 的“TTS设置” -> “GPT-SoVITS API” 界面,尝试调整“额外参数”。例如,可以尝试添加或修改参数来控制合成效果,但核心问题通常是语言不匹配。
  4. 验证 API 直接调用:打开浏览器或使用工具(如 curl)直接访问 GPT-SoVITS API,以确认服务本身能正常生成音频。例如,构建一个包含正确参考音频和文本的请求。

关键步骤总结:

  1. 根据你想要合成的目标语言(例如中文),准备一段对应语言的、高质量的短音频(3-10秒)作为参考音频,并准确填写其文本内容和语言代码。
  2. 在测试时,使用与参考音频语言一致的目标文本进行测试。
  3. 确保参考音频文件位于正确路径(通常为软件根目录)。

请查阅相关文档:

如何验证 API 直接调用

验证 GPT-SoVITS API 直接调用,需要使用 HTTP POST 请求发送 JSON 数据到其 /tts/voice/clone 端点。以下是具体步骤:

  1. 准备请求数据:构建一个 JSON 对象,包含以下关键字段(具体字段名需参考 GPT-SoVITS 项目的 API 文档,以下为常见示例):

    • text: 要合成的目标文本(例如:"你好啊我的朋友")。
    • text_language: 目标文本的语言代码(例如:"zh" 或 "en")。
    • ref_audio_path: 参考音频的绝对路径(例如:"F:\ai\GPT-SoVITS-v2pro-20250604\罗杰斯.wav")。这是关键,必须使用绝对路径
    • prompt_text: 参考音频对应的文本内容。
    • prompt_language: 参考音频文本的语言代码。
  2. 使用工具发送请求

    • 使用 curl 命令(在终端中执行)

      curl -X POST "http://127.0.0.1:9880/tts" \
      -H "Content-Type: application/json" \
      -d "{
          \"text\": \"你好啊我的朋友\",
          \"text_language\": \"zh\",
          \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\",
          \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\",
          \"prompt_language\": \"en\"
      }"

      如果成功,响应会是音频二进制数据。你可以将其重定向到文件:在命令末尾添加 > output.wav

    • 使用 Python 脚本

      import requests
      import json
      
      url = "http://127.0.0.1:9880/tts"
      data = {
          "text": "你好啊我的朋友",
          "text_language": "zh",
          "ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav",
          "prompt_text": "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.",
          "prompt_language": "en"
      }
      headers = {'Content-Type': 'application/json'}
      
      response = requests.post(url, data=json.dumps(data), headers=headers)
      if response.status_code == 200:
          with open('output.wav', 'wb') as f:
              f.write(response.content)
          print("音频已保存为 output.wav")
      else:
          print(f"请求失败,状态码: {response.status_code}")
          print(response.text)
    • 使用 API 测试工具(如 Postman 或 Hoppscotch):图形化界面操作,填入上述 URL 和 JSON 数据即可发送请求并查看/保存响应。
  3. 分析结果

    • 如果直接调用成功并生成了可听的 output.wav,则证明 GPT-SoVITS 服务本身工作正常,问题可能出在 pyVideoTrans 的配置(如参考音频路径格式、参数传递)上。
    • 如果直接调用也返回静音或错误,则问题在于 GPT-SoVITS 服务端(如模型加载、参考音频与文本语言不匹配、参考音频路径错误等)。请检查服务终端是否有报错信息。

关键排查点:确保 ref_audio_path 使用的是绝对路径,并且 GPT-SoVITS 服务进程有权限读取该文件。你提供的终端日志显示参考音频语言(en)与目标文本语言(zh)不一致,这极有可能是导致静音的主要原因。在验证时,建议使用语言一致的参考音频和文本进行测试。

请查阅相关文档:

Microsoft Windows [版本 10.0.26200.7623]
(c) Microsoft Corporation。保留所有权利。

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts" \
{"detail":[{"type":"missing","loc":["body"],"msg":"Field required","input":null}]}curl: (3) URL rejected: Bad hostname

F:\ai\win-pyvideotrans-v3.96>-H "Content-Type: application/json" \
'-H' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

F:\ai\win-pyvideotrans-v3.96>-d "{
'-d' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

F:\ai\win-pyvideotrans-v3.96> \"text\": \"你好啊我的朋友\",
系统找不到指定的路径。

F:\ai\win-pyvideotrans-v3.96> \"text_language\": \"zh\",
系统找不到指定的路径。

F:\ai\win-pyvideotrans-v3.96> \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\",
系统找不到指定的路径。

F:\ai\win-pyvideotrans-v3.96> \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\",
系统找不到指定的路径。

F:\ai\win-pyvideotrans-v3.96> \"prompt_language\": \"en\"
系统找不到指定的路径。

F:\ai\win-pyvideotrans-v3.96>}"

curl 命令在 Windows 命令行中格式错误。Windows CMD 不支持使用反斜杠 \ 进行多行连接。你需要将整个 curl 命令写在一行内,或者使用 PowerShell。

方法一:在 CMD 中使用单行命令
在命令行中直接输入以下完整命令(注意将路径中的反斜杠\改为正斜杠/):

curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_language\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_language\": \"en\"}"

方法二:使用 PowerShell(推荐)

  1. 打开 PowerShell(在开始菜单搜索 PowerShell 并打开)。
  2. 输入以下命令(注意 PowerShell 中单引号 ' 和双引号 " 的嵌套规则,这里使用单引号包裹整个 JSON 字符串更简单):

    curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d '{"text": "你好啊我的朋友", "text_language": "zh", "ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav", "prompt_text": "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.", "prompt_language": "en"}'

    或者,将 JSON 保存到变量中再发送:

    $body = @{
    text = "你好啊我的朋友"
    text_language = "zh"
    ref_audio_path = "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav"
    prompt_text = "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know."
    prompt_language = "en"
    } | ConvertTo-Json
    curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d $body

执行后观察结果:

  • 如果命令成功,通常会直接返回二进制音频数据(屏幕显示乱码)。你可以将输出重定向到文件来保存音频:
    在命令末尾添加 -o test_output.wav(例如:curl ... -o test_output.wav)。
  • 如果返回 JSON 格式的错误信息(如你之前看到的 {"detail":[{"type":"missing"...),则说明请求体格式有误或缺少必要字段。请严格按照上述格式发送。
  • 如果服务端有错误(例如参考音频路径错误、语言不匹配导致合成失败),可能会返回错误信息或静默的空白音频。

关键提醒:
根据你之前的信息,参考音频是英文,而目标文本是中文,这很可能是导致合成失败(静音)的根本原因。为了验证服务本身是否正常,建议你使用一段中文参考音频和中文文本来测试。如果必须用英文参考音频生成中文,GPT-SoVITS 可能无法正确处理这种跨语言克隆,导致静音或怪声。

请查阅相关文档:

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_language\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_language\": \"en\"}"
{"message":"text_lang is required"}
F:\ai\win-pyvideotrans-v3.96>

API 返回的错误信息表明,请求中缺少 text_lang 字段,而你发送的是 text_language。GPT-SoVITS API 的字段名可能与你使用的不同。根据错误提示,你需要将 text_language 改为 text_lang。同时,参考音频相关的字段名也可能需要调整。请尝试以下命令:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_lang\": \"en\"}"如果仍然报错,可能是字段名不完全匹配。最可靠的方法是查阅你运行的 GPT-SoVITS 项目的 API 文档(通常在其 GitHub 仓库的 README 或 wiki 中),或者直接查看 api_v2.py 源代码中 /tts 端点定义的参数。一个常见的 GPT-SoVITS API 请求体格式是:{"text": "目标文本","text_lang": "zh","ref_audio_path": "音频绝对路径","prompt_text": "参考音频文本","prompt_lang": "zh"}请将 prompt_lang 也改为 en 以匹配你的参考音频。如果上述修改后请求成功但返回静音,核心问题仍然是 语言不匹配prompt_lang (en) 与 text_lang (zh) 不同。GPT-SoVITS 的语音克隆通常要求参考音频与目标文本语言一致才能获得良好效果。为了彻底验证服务,请准备一段中文参考音频(3-10秒,内容清晰),并使用以下参数测试:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/中文参考.wav\", \"prompt_text\": \"这是中文参考音频文本\", \"prompt_lang\": \"zh\"}"如果使用中文参考音频测试成功,则证明服务正常,而你在 pyVideoTrans 中遇到的问题正是由于中英文混合配置导致的。你需要在 pyVideoTrans 中配置 GPT-SoVITS 时,确保“参考音频#音频文字内容#语言代码”这一行中的语言代码与参考音频的实际语言完全一致,并且与视频翻译任务的目标语言一致。请查阅相关文档:GPT-SoVITS API 使用方法

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_lang\": \"en\"}"
{"detail":"Not Found"}
F:\ai\win-pyvideotrans-v3.96>

命令中的 URL 格式错误,多了一个分号 ;。正确的命令应为:curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_lang\": \"en\"}" 在 Windows CMD 中,由于嵌套引号处理复杂,建议使用以下两种更可靠的方法:方法一:使用 PowerShell(推荐)打开 PowerShell,执行以下命令(注意使用单引号包裹 JSON 数据):curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d '{"text": "你好啊我的朋友", "text_lang": "zh", "ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav", "prompt_text": "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.", "prompt_lang": "en"}' 方法二:将 JSON 数据保存到文件,然后通过文件发送创建文件 data.json,内容如下:{"text": "你好啊我的朋友","text_lang": "zh","ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav","prompt_text": "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.","prompt_lang": "en"} 然后在 CMD 中执行:curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "@data.json" 如果请求成功但返回静音,核心问题仍然是 语言不匹配prompt_lang (en) 与 text_lang (zh) 不同。GPT-SoVITS 的语音克隆通常要求参考音频与目标文本语言一致才能获得良好效果。为了彻底验证服务,请准备一段中文参考音频(3-10秒,内容清晰),并使用以下参数测试(在 PowerShell 中):curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d '{"text": "你好啊我的朋友", "text_lang": "zh", "ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/中文参考.wav", "prompt_text": "这是中文参考音频文本", "prompt_lang": "zh"}' 如果使用中文参考音频测试成功,则证明服务正常,而你在 pyVideoTrans 中遇到的问题正是由于中英文混合配置导致的。你需要在 pyVideoTrans 中配置 GPT-SoVITS 时,确保“参考音频#音频文字内容#语言代码”这一行中的语言代码与参考音频的实际语言完全一致,并且与视频翻译任务的目标语言一致。请查阅相关文档:GPT-SoVITS API 使用方法

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_language\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_language\": \"en\"}"
{"message":"text_lang is required"}
F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_lang\": \"en\"}"
Warning: Binary output can mess up your terminal. Use "--output -" to tell curl to output it to your terminal anyway,
Warning: or consider "--output " to save to a file.

F:\ai\win-pyvideotrans-v3.96>

第二个命令成功了,它返回了二进制音频数据(警告信息表明 curl 收到了非文本数据)。这表明 GPT-SoVITS API 服务本身工作正常,并且接受了你的请求参数。现在,你需要将返回的音频数据保存到文件中以验证是否生成有效的人声。在命令末尾添加 -o test_output.wav 来保存输出。执行以下命令:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_lang\": \"en\"}" -o test_output.wav 执行后,检查当前目录下是否生成了 test_output.wav 文件。用播放器打开它。如果 test_output.wav 是静音或怪声,那么问题根源就是 语言不匹配:你使用英文参考音频 (prompt_lang: en) 来合成中文文本 (text_lang: zh),GPT-SoVITS 可能无法正确处理这种跨语言克隆,导致合成失败。如果 test_output.wav 是清晰可懂的中文语音(即使音色可能不理想),则证明 API 在跨语言下也能工作,那么 pyVideoTrans 中测试无声的问题可能出在配置细节上。为了彻底验证,请进行对照测试:使用中文参考音频合成中文文本。准备一个简短的中文音频文件(例如 中文参考.wav,内容为“这是一个测试音频”,时长3-5秒)。执行命令(注意修改路径和文本):curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/中文参考.wav\", \"prompt_text\": \"这是一个测试音频\", \"prompt_lang\": \"zh\"}" -o test_output_zh.wav 如果 test_output_zh.wav 效果良好,则证明:GPT-SoVITS 服务完全正常。跨语言克隆(英->中)效果不佳或失败,是导致你最初在 pyVideoTrans 中测试无声的原因。解决方案:在 pyVideoTrans 中使用 GPT-SoVITS 时,确保“参考音频#音频文字内容#语言代码”这一行中的语言代码与参考音频的实际语言一致,并且强烈建议参考音频语言与视频翻译的目标语言一致。例如,如果你的视频要翻译成中文,就提供一段中文参考音频。如果必须使用英文参考音频生成中文配音,你可能需要尝试调整 GPT-SoVITS 的其他参数,或者考虑使用其他更擅长跨语言克隆的 TTS 工具(如 F5-TTS)。请查阅相关文档:GPT-SoVITS API 使用方法如何使用原视频中音色配音

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav\", \"prompt_text\": \"What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.\", \"prompt_lang\": \"en\"}" -o test_output.wav
% Total % Received % Xferd Average Speed Time Time Time Current

                             Dload  Upload   Total   Spent    Left  Speed

100 403 100 22 100 381 1802 31211 --:--:-- --:--:-- --:--:-- 33583

F:\ai\win-pyvideotrans-v3.96>

命令中 URL 后仍然多了一个不必要的分号 ;,这可能导致请求被发送到错误的端点。但根据输出,curl 似乎仍然发送了请求并收到了 403 字节的响应(这很可能是一个 JSON 格式的错误信息,而不是音频数据)。文件 test_output.wav 很可能是一个包含错误信息的文本文件,而不是有效的音频。请检查 test_output.wav 文件的大小和内容。你可以用记事本打开它,如果开头是 {"detail": 或 {"error": 之类的文本,则说明请求失败。为了获得正确的命令格式,请严格按照以下步骤操作:1. 删除 URL 后的分号 ;。2. 在 Windows CMD 中,由于嵌套引号复杂,强烈建议使用 方法二:将 JSON 保存到文件。在 pyVideoTrans 目录下,创建一个名为 data.json 的文本文件,内容如下:{"text": "你好啊我的朋友","text_lang": "zh","ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav","prompt_text": "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.","prompt_lang": "en"} 注意:确保路径使用正斜杠 /,并且文件路径是绝对路径。3. 在 CMD 中执行以下命令:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "@data.json" -o test_output2.wav 4. 检查生成的 test_output2.wav 文件。用播放器打开。如果仍然是静音或无效文件,用记事本打开,查看其内容是否为错误信息。核心问题分析:即使命令格式完全正确,你目前测试的案例(英文参考音频合成中文)很可能就是 GPT-SoVITS 无法良好处理的情况,导致返回错误或静音。最终验证:要绝对确认服务是否正常,你必须使用 语言一致 的参考音频和文本来测试。请准备一个简短的中文音频文件(例如 中文参考.wav,内容为“这是一个测试音频”,时长3-5秒),并创建对应的 data_zh.json 文件:{"text": "你好啊我的朋友","text_lang": "zh","ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/中文参考.wav","prompt_text": "这是一个测试音频","prompt_lang": "zh"} 然后执行:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "@data_zh.json" -o test_output_zh.wav 如果 test_output_zh.wav 是清晰的中文语音,则证明:GPT-SoVITS 服务正常。你最初在 pyVideoTrans 中测试无声的根本原因是 跨语言克隆(英->中)失败解决方案:在 pyVideoTrans 中使用 GPT-SoVITS 进行配音时,确保参考音频的语言与视频翻译的目标语言一致。例如,如果目标输出是中文视频,就提供一段中文参考音频及其中文文本。请查阅相关文档:GPT-SoVITS API 使用方法

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "@data.json" -o test_output2.wav 4
curl: Failed to open data.json
curl: option -d: error encountered when reading a file
curl: try 'curl --help' for more information

F:\ai\win-pyvideotrans-v3.96>

命令中的 4 是多余的,并且 data.json 文件可能不存在于当前目录 F:\ai\win-pyvideotrans-v3.96 中。请按以下步骤操作:1. 确保 data.json 文件存在于你运行命令的目录下(即 F:\ai\win-pyvideotrans-v3.96)。你可以使用 dir data.json 命令检查。2. 如果文件不存在,请在该目录下创建它。你可以使用记事本创建,内容如下:{"text": "你好啊我的朋友","text_lang": "zh","ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/罗杰斯.wav","prompt_text": "What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.","prompt_lang": "en"} 3. 执行正确的命令(注意删除 URL 后的分号 ; 和末尾的 4):curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "@data.json" -o test_output2.wav 如果仍然失败,或者生成的 test_output2.wav 是静音/错误信息,那么问题核心仍然是 语言不匹配。为了节省时间并直接定位问题,请直接进行 语言一致 的测试。这是验证服务是否正常的唯一可靠方法。请准备一个简短的中文音频文件(例如 中文参考.wav,内容为“这是一个测试音频”,时长3-5秒),并将其放在 F:/ai/GPT-SoVITS-v2pro-20250604/ 目录下。然后在 F:\ai\win-pyvideotrans-v3.96 目录下创建 data_zh.json 文件,内容如下:{"text": "你好啊我的朋友","text_lang": "zh","ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/中文参考.wav","prompt_text": "这是一个测试音频","prompt_lang": "zh"} 执行命令:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "@data_zh.json" -o test_output_zh.wav 如果 test_output_zh.wav 是清晰的中文语音,则证明:GPT-SoVITS 服务正常。你最初在 pyVideoTrans 中测试无声的根本原因是 跨语言克隆(英->中)失败。如果 test_output_zh.wav 仍然是静音或错误,则可能是 GPT-SoVITS 服务配置或模型加载有问题,请检查其终端窗口是否有报错信息。结论与解决方案:基于现有信息,最可能的原因是 参考音频语言与目标文本语言不一致。在 pyVideoTrans 中配置 GPT-SoVITS 时,请确保“参考音频#音频文字内容#语言代码”这一行中的语言代码与参考音频的实际语言一致,并且强烈建议参考音频语言与视频翻译的目标语言一致。例如,如果你的视频要翻译成中文,就提供一段中文参考音频。请查阅相关文档:GPT-SoVITS API 使用方法

F:\ai\win-pyvideotrans-v3.96>curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/马保国.wav\", \"prompt_text\": \"有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。\", \"prompt_lang\": \"zh\"}"
Warning: Binary output can mess up your terminal. Use "--output -" to tell curl to output it to your terminal anyway,
Warning: or consider "--output " to save to a file.

命令执行成功,收到了二进制音频数据(警告信息是正常的)。这表明 GPT-SoVITS API 服务工作正常,并且成功处理了你的请求(使用中文参考音频合成中文文本)。现在,你需要将返回的音频数据保存到文件中以验证是否生成了有效的人声。在命令末尾添加 -o test_output_zh.wav 来保存输出。执行以下命令:curl -X POST "http://127.0.0.1:9880/tts"; -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"F:/ai/GPT-SoVITS-v2pro-20250604/马保国.wav\", \"prompt_text\": \"有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。\", \"prompt_lang\": \"zh\"}" -o test_output_zh.wav 执行后,检查当前目录下是否生成了 test_output_zh.wav 文件。用播放器打开它。如果 test_output_zh.wav 是清晰可懂的中文语音(并且音色接近参考音频),那么证明:GPT-SoVITS 服务完全正常,并且能够成功进行中文语音克隆。你最初在 pyVideoTrans 中测试无声的根本原因是 跨语言克隆(英->中)失败。当参考音频语言 (en) 与目标文本语言 (zh) 不一致时,GPT-SoVITS 可能无法生成有效音频,导致返回静音或错误。解决方案:在 pyVideoTrans 中使用 GPT-SoVITS 进行配音时,必须确保“参考音频#音频文字内容#语言代码”这一行中的语言代码与参考音频的实际语言一致,并且强烈建议参考音频语言与视频翻译的目标语言一致。例如,如果你的视频要翻译成中文,就提供一段中文参考音频及其中文文本。配置示例:在 pyVideoTrans 的 TTS 设置 -> GPT-SoVITS API 的“额外参数”框中,应填写:马保国.wav#有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。#zh 请确保 马保国.wav 文件位于 pyVideoTrans 软件根目录下(与 sp.exe 同目录)。然后使用中文目标文本进行测试。如果 test_output_zh.wav 仍然是静音或无效文件,请用记事本打开它,查看内容是否为错误信息。如果是,请提供错误信息内容。请查阅相关文档:GPT-SoVITS API 使用方法如何使用原视频中音色配音

生成了一个1kb的test_output_zh.wav,无法打开

生成的 test_output_zh.wav 文件只有 1KB,这显然不是一个有效的音频文件,而是一个包含错误信息的文本文件。这表明虽然 API 请求成功发送,但 GPT-SoVITS 服务端在处理时发生了错误,并返回了错误信息而非音频数据。

请用记事本打开 test_output_zh.wav 文件,查看其具体内容。错误信息通常会以 JSON 格式显示,例如 {"detail": "..."}{"error": "..."}。将文件内容复制出来。

根据错误信息,我们可以进行下一步诊断。常见的可能原因有:

  1. 参考音频文件路径问题:虽然你使用了绝对路径 F:/ai/GPT-SoVITS-v2pro-20250604/马保国.wav,但 GPT-SoVITS 服务进程可能没有权限访问该路径,或者路径格式在服务端解析时出错。请确保该文件确实存在,并且路径中的盘符和目录名完全正确。
  2. 参考音频文件格式或内容问题.wav 文件可能已损坏,或者其编码格式不被 GPT-SoVITS 支持。请确认该文件是一个正常的、可以播放的音频文件。
  3. GPT-SoVITS 模型加载或配置问题:服务虽然启动,但内部的 TTS 或克隆模型可能没有正确加载。请检查启动 GPT-SoVITS 服务的终端窗口,在你发送请求后,是否有新的错误信息输出。
  4. 请求参数问题:可能还需要其他必填参数。

请立即执行以下操作:

  1. 查看 test_output_zh.wav 的文本内容,提供错误信息。
  2. 检查 GPT-SoVITS 服务终端,查看发送请求后是否有红色报错信息输出。
  3. 验证参考音频文件:在文件管理器中双击 F:\ai\GPT-SoVITS-v2pro-20250604\马保国.wav,确认它可以正常播放。

临时解决方案/进一步测试:

为了排除路径问题,可以尝试将参考音频文件 复制到 GPT-SoVITS 项目目录下(例如 F:\ai\GPT-SoVITS-v2pro-20250604),然后在 curl 命令中使用相对路径或基于项目目录的绝对路径。

例如,在 F:\ai\GPT-SoVITS-v2pro-20250604 目录下打开命令行,执行:

curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"马保国.wav\", \"prompt_text\": \"有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。\", \"prompt_lang\": \"zh\"}" -o test_local.wav

如果仍然失败,错误信息将是诊断的关键。

将参考音频文件 复制到 GPT-SoVITS 项目目录下,执行curl -X POST "http://127.0.0.1:9880/tts" -H "Content-Type: application/json" -d "{\"text\": \"你好啊我的朋友\", \"text_lang\": \"zh\", \"ref_audio_path\": \"马保国.wav\", \"prompt_text\": \"有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。\", \"prompt_lang\": \"zh\"}" -o test_local.wav,得到一个音频,用记事本打开得到如下内容:RIFF$? WAVEfmt    } ?   data ?

你得到的 test_local.wav 是一个有效的音频文件(RIFF WAVE 头部),而不是错误信息。这表明 GPT-SoVITS API 服务成功生成了音频。现在,请用音频播放器(如 Windows Media Player、VLC 等)打开 test_local.wav 文件,听一下是否有声音。如果 test_local.wav 播放时有清晰的中文语音,那么证明:GPT-SoVITS 服务完全正常,并且能够成功进行中文语音克隆。你最初在 pyVideoTrans 中测试无声的根本原因是 跨语言克隆(英->中)失败,并且可能还存在参考音频文件路径问题(之前使用的绝对路径可能未被服务正确解析)。如果 test_local.wav 播放时是静音或杂音,则可能是 GPT-SoVITS 模型在合成时出现了问题(尽管返回了音频文件)。请检查 GPT-SoVITS 服务终端窗口,在你发送请求后,是否有任何警告或错误信息输出。关键结论与解决方案:GPT-SoVITS 服务本身是正常的。在 pyVideoTrans 中配置 GPT-SoVITS 时,必须注意以下两点:语言一致性:参考音频的语言必须与目标配音语言一致。你最初使用英文参考音频合成中文导致失败。参考音频文件路径:在 pyVideoTrans 的“额外参数”框中,填写参考音频信息时,默认情况下,软件会将参考音频文件路径相对于 软件根目录 进行解析。为了确保无误,最稳妥的方法是:将参考音频文件(例如 马保国.wav)复制到 pyVideoTrans 软件根目录下(即与 sp.exe 同级的目录)。在“额外参数”框中填写:马保国.wav#有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。#zh 然后使用中文目标文本进行测试。如果测试成功,则说明配置正确。如果仍然无声,请检查 pyVideoTrans 软件根目录下的 logs 文件夹中最新日期的日志文件,查看是否有关于 GPT-SoVITS API 调用的详细错误信息。请查阅相关文档:GPT-SoVITS API 使用方法如何使用原视频中音色配音

得到一个1秒无声音频

日志文件内容如下:-- Application started at 2026-02-02 20:44:37



[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
First searching GPU...
Found 1 GPUs, cost=1s
start workers...
NVIDIA_GPU_NUMS=1
process_max_gpu=0
multi_gpus=False
Concurrent task_nums=1
process_max=0
start 8 jobs
ended workers
[DEBUG] GPT-SoVITS 当前需要发送的配音数据:data={'text': '你好啊我的朋友', 'text_lang': 'zh', 'ref_audio_path': '罗杰斯.wav', 'prompt_text': 'What are you doing here in Stormvale Castle? This place is bristling with Tarnished Hunters, you know.', 'prompt_lang': 'en', 'speed_factor': 1.0, 'text_split_method': 'cut0'}
self.api_url='http://127.0.0.1:9880/tts'
[DEBUG] cmd=['F:/ai/win-pyvideotrans-v3.96/ffmpeg/ffmpeg.exe', '-hide_banner', '-ignore_unknown', '-threads', '0', '-y', '-i', 'F:/ai/win-pyvideotrans-v3.96/tmp/14436/1770036307.3069034-gptsovits.wav.wav', '-ar', '48000', '-ac', '2', '-c:a', 'pcm_s16le', 'F:/ai/win-pyvideotrans-v3.96/tmp/14436/1770036307.3069034-gptsovits.wav']
[DEBUG] [字幕配音]渠道8:共耗时:7s
[DEBUG] GPT-SoVITS 当前需要发送的配音数据:data={'text': '你好啊我的朋友', 'text_lang': 'zh', 'ref_audio_path': '马保国.wav', 'prompt_text': '有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。', 'prompt_lang': 'zh', 'speed_factor': 1.0, 'text_split_method': 'cut0'}
self.api_url='http://127.0.0.1:9880/tts'
[DEBUG] cmd=['F:/ai/win-pyvideotrans-v3.96/ffmpeg/ffmpeg.exe', '-hide_banner', '-ignore_unknown', '-threads', '0', '-y', '-i', 'F:/ai/win-pyvideotrans-v3.96/tmp/14436/1770037730.799634-gptsovits.wav.wav', '-ar', '48000', '-ac', '2', '-c:a', 'pcm_s16le', 'F:/ai/win-pyvideotrans-v3.96/tmp/14436/1770037730.799634-gptsovits.wav']
[DEBUG] [字幕配音]渠道8:共耗时:3s

怎么回事啊

终端信息如下Set seed to 3855854056
并行推理模式已开启
分桶处理模式已开启
实际输入的参考文本: 有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃有一个说是。

切分文本

实际输入的目标文本:
你好啊我的朋友
实际输入的目标文本(切句后):
['你好啊我的朋友。']

提取文本Bert特征

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

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.

Related resource