#3047 把GPT-SoVITS接入pyVedioTrans后,选择训练好的音色,为字幕配音,生成的音频没有声音.在浏览器中访问 http://127.0.0.1:9880/docs 看到一个Swagger UI页面打开的API文档页面中,点击 PO

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

把GPT-SoVITS接入pyVedioTrans后,选择训练好的音色,为字幕配音,生成的音频没有声音.
在浏览器中访问 http://127.0.0.1:9880/docs
看到一个Swagger UI页面
打开的API文档页面中,点击 POST /tts 左侧的 ▶ 符号,展开该接口。2. 在展开的面板中,找到 “Parameters” 或 “Request body” 部分。3. 你会看到一个 “Example Value” 或一个空的 JSON 编辑框。4. 点击这个框,{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}然后点击 “Execute” 按钮。。5. 替换完成后,点击该部分下方的 “Execute” 或 “Try it out” 按钮来发送请求。 “Responses” 部分,查看服务器返回的状态码和内容。如果状态码是 200,且有音频数据返回,但是是一个零秒的音频文件。

9 Replies

这是由于 GPT-SoVITS API 服务虽然能正常响应,但生成的音频文件为空(零秒)导致的。这通常与 API 请求参数或模型配置有关。

解决方案:

  1. 检查参考音频和提示文本:确保 ref_audio_path 参数指定的 .wav 文件路径在 GPT-SoVITS 服务端是存在的,并且 prompt_text 的内容与参考音频的实际语音内容完全一致(用于音色提取)。路径和内容错误会导致模型无法生成有效音频。
  2. 验证 API 接口版本:pyVideoTrans 默认调用 GPT-SoVITS 的 api_v2 接口。请确认你的 GPT-SoVITS 服务启动的是否为 api_v2 版本(通常启动命令包含 --api 参数)。如果启动的是旧版本接口,可能导致兼容性问题。
  3. 在 pyVideoTrans 中测试连接

    • 打开 pyVideoTrans,进入“菜单” -> “TTS设置” -> “GPT-SoVITS”。
    • 在“API地址”中填写 http://127.0.0.1:9880
    • 点击“测试”按钮。如果测试失败或生成静音,请检查软件日志 (logs/ 目录) 获取具体错误信息。
  4. 查阅 GPT-SoVITS 官方文档:检查模型训练是否成功,以及推理时的具体参数要求。

请查阅相关文档:

如果以上步骤无法解决,请提供 pyVideoTrans 软件 logs/ 文件夹中最新日志文件的底部约30行报错信息。

填入{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "F:\ai\GPT-SoVITS-v2pro-20250604.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}报错
Error: Unprocessable Entity

Response body
Download
{
"detail": [

{
  "type": "json_invalid",
  "loc": [
    "body",
    63
  ],
  "msg": "JSON decode error",
  "input": {},
  "ctx": {
    "error": "Invalid \\escape"
  }
}

]
}

这是由于 JSON 请求体中的文件路径字符串包含反斜杠 \ 转义字符,导致 JSON 解析失败。在 JSON 中,反斜杠 \ 是转义字符,路径 "F:\ai\GPT-SoVITS-v2pro-20250604.wav" 中的 \a\G 被错误解析。解决方案:在 JSON 请求体中,将 Windows 文件路径中的反斜杠 \ 替换为双反斜杠 \\ 或正斜杠 /。正确的请求体应为:{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "F:\\ai\\GPT-SoVITS-v2pro-20250604.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}或者:{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}修改后,重新点击“Execute”发送请求。如果问题依旧,请检查文件路径是否正确以及 GPT-SoVITS 服务是否有权限访问该路径。请查阅相关文档:GPT-SoVITS API 使用方法

添入{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "F:\ai\GPT-SoVITS-v2pro-20250604\马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}成功,但是音频是一个零秒音频

这是由于 GPT-SoVITS 模型未能成功基于提供的参考音频和提示文本生成有效音频。核心原因通常是 参考音频路径问题提示文本与参考音频内容不匹配。解决方案:确认参考音频文件路径:确保 ref_audio_path 参数中的路径是 GPT-SoVITS 服务端可访问的绝对路径。例如 "F:\ai\GPT-SoVITS-v2pro-20250604\马保国.wav"。检查文件是否存在且格式正确(.wav)。确保提示文本与参考音频内容严格一致:prompt_text 的内容必须与 ref_audio_path 指定的 .wav 文件中的实际人声语音内容完全一致。模型依赖此文本进行音色特征提取。请仔细核对,包括标点符号。在 pyVideoTrans 中配置并测试:打开 pyVideoTrans,进入“菜单” -> “TTS设置” -> “GPT-SoVITS”。在“API地址”填写 http://127.0.0.1:9880。在“参考音频”中选择或输入正确的 .wav 文件路径(确保路径无中文/空格)。在“参考音频文本”中准确填写该音频对应的文本。点击“测试”按钮。查看 GPT-SoVITS 服务端日志:启动 GPT-SoVITS 服务的命令行窗口通常会输出详细的推理日志。观察在请求过程中是否有报错信息,例如找不到文件、文本不匹配或模型加载失败。检查模型训练状态:确认用于推理的模型(.pth 文件)是训练完成且可用的。如果问题依旧,请提供 GPT-SoVITS 服务端命令行窗口的报错信息,以及 pyVideoTrans 软件 logs/ 文件夹中最新日志文件的底部约30行内容。请查阅相关文档:GPT-SoVITS API 使用方法

Error: Unprocessable Entity

Response body
Download
{
"detail": [

{
  "type": "json_invalid",
  "loc": [
    "body",
    63
  ],
  "msg": "JSON decode error",
  "input": {},
  "ctx": {
    "error": "Invalid \\escape"
  }
}

]
}

这是由于 JSON 请求体中包含无效的转义字符导致的解析错误。你提供的请求体路径 "F:\ai\GPT-SoVITS-v2pro-20250604\马保国.wav" 中的反斜杠 \ 在 JSON 中是转义字符,\马 构成了无效的转义序列 \马。解决方案:在 JSON 字符串中,必须对反斜杠进行转义,即使用双反斜杠 \\,或者将路径中的反斜杠全部替换为正斜杠 /。修改后的有效 JSON 请求体应为:方案一(转义反斜杠):json{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "F:\\ai\\GPT-SoVITS-v2pro-20250604\\马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}方案二(使用正斜杠):json{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "F:/ai/GPT-SoVITS-v2pro-20250604/马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}将修改后的 JSON 粘贴到 Swagger UI 的请求体编辑框中,然后点击“Execute”发送请求。如果请求成功但音频仍为零秒,请参考上一条回复中关于“零秒音频”的排查步骤。

生成了一个零秒音频,终端INFO: 127.0.0.1:5006 - "POST /tts HTTP/1.1" 200 OK
INFO: 127.0.0.1:5006 - "GET /tts HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 407, in run_asgi

result = await app(  # type: ignore[func-returns-value]

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 78, in call

return await self.app(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\fastapi\applications.py", line 1054, in call

await super().__call__(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\applications.py", line 123, in call

await self.middleware_stack(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\middleware\errors.py", line 186, in call

raise exc

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\middleware\errors.py", line 164, in call

await self.app(scope, receive, _send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\middleware\exceptions.py", line 65, in call

await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app

raise exc

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app

await app(scope, receive, sender)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\routing.py", line 754, in call

await self.middleware_stack(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\routing.py", line 774, in app

await route.handle(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\routing.py", line 295, in handle

await self.app(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\routing.py", line 77, in app

await wrap_app_handling_exceptions(app, request)(scope, receive, send)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app

raise exc

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app

await app(scope, receive, sender)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\starlette\routing.py", line 74, in app

response = await f(request)

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\fastapi\routing.py", line 278, in app

raw_response = await run_endpoint_function(

File "F:\ai\GPT-SoVITS-v2pro-20250604\runtime\lib\site-packages\fastapi\routing.py", line 191, in run_endpoint_function

return await dependant.call(**values)

File "F:\ai\GPT-SoVITS-v2pro-20250604\api_v2.py", line 484, in tts_get_endpoint

"text_lang": text_lang.lower(),

AttributeError: 'NoneType' object has no attribute 'lower'

这是由于 GPT-SoVITS 的 API 服务在处理 GET 请求时发生了内部错误。日志显示 POST /tts 请求成功(200 OK),但随后有一个 GET /tts 请求失败(500 Internal Server Error),错误原因是 'NoneType' object has no attribute 'lower',这表明服务在尝试处理一个为 Nonetext_lang 参数时崩溃。这可能是由 pyVideoTrans 在测试连接或获取状态时发送的请求触发的。解决方案:重启 GPT-SoVITS API 服务:关闭当前的命令行窗口,然后重新启动 GPT-SoVITS 服务(通常通过运行 python api_v2.py 或相应的启动脚本)。在 pyVideoTrans 中正确配置并测试:打开 pyVideoTrans,进入“菜单” -> “TTS设置” -> “GPT-SoVITS”。在“API地址”中填写 http://127.0.0.1:9880(注意端口号是 9880,而不是日志中的 5006。请确认你的服务实际运行在哪个端口)。在“参考音频”中,通过“选择”按钮浏览并选择你的参考音频文件 马保国.wav(软件会自动处理路径格式)。在“参考音频文本”中,准确无误地填写该音频对应的文本:“有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。”。点击“测试”按钮。观察 GPT-SoVITS 服务端日志:执行测试时,观察重启后的 GPT-SoVITS 服务端命令行窗口。重点关注是否有新的错误信息,特别是与参数解析或模型推理相关的错误。检查 pyVideoTrans 日志:如果测试失败,查看 pyVideoTrans 安装目录下的 logs/ 文件夹,打开最新的日志文件,复制底部约30行的错误信息。如果问题依旧,请提供重启服务后,执行测试时 GPT-SoVITS 服务端窗口的完整输出日志,以及 pyVideoTrans 的日志。请查阅相关文档:GPT-SoVITS API 使用方法

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