#3032 把GPT-SoVITS接入pyVedioTrans后,选择训练好的音色,为字幕配音,生成的音频没有声音,下面是日志 Application started at 2026-02-01 19:57:22 [DEBUG] 返回缓存的编解码器 W

240e:341* Posted at: 15 days ago 👁89

把GPT-SoVITS接入pyVedioTrans后,选择训练好的音色,为字幕配音,生成的音频没有声音,下面是日志


Application started at 2026-02-01 19:57:22

[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
First searching GPU...
Found 1 GPUs, cost=2s
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': '有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。', 'prompt_lang': 'zh', 'speed_factor': 1.0, 'text_split_method': 'cut0'}
self.api_url='http://127.0.0.1:9880/tts'
[DEBUG] [字幕配音]渠道8:共耗时:3s
[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:988
......
ethod': '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/1148/b676fa3c1c/dubb-13.wav.wav', '-ar', '48000', '-ac', '2', '-c:a', 'pcm_s16le', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/dubb-13.wav']
[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/1148/b676fa3c1c/dubb-14.wav.wav', '-ar', '48000', '-ac', '2', '-c:a', 'pcm_s16le', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/dubb-14.wav']
[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/1148/b676fa3c1c/dubb-15.wav.wav', '-ar', '48000', '-ac', '2', '-c:a', 'pcm_s16le', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/dubb-15.wav']
[DEBUG] [字幕配音]渠道8:共耗时:59s
进入执行对齐阶段
[DEBUG] 允许的最大音频加速倍数=100.0,允许的最大视频慢放倍数=10.0
[DEBUG] SpeedRate 初始化。音频加速: False, 视频慢速: False
[DEBUG] 所有中间音频将统一为: 48000Hz, 2 声道。

[DEBUG] 检测到未启用音视频变速,进入纯净拼接模式。
[DEBUG]


=


=



[音频不加速,视频不慢速,不移除字幕间空隙,不需要对齐] 开始处理


=


=




[DEBUG] 字幕[1]前,生成静音片段 8509ms
[DEBUG] 字幕[1] 已生成配音片段,配音时长: 1620ms, 原时长 1700

[DEBUG] 字幕[2]前,生成静音片段 6775ms
[DEBUG] 字幕[2] 已生成配音片段,配音时长: 2660ms, 原时长 2234

[DEBUG] 字幕[3]前,生成静音片段 5307ms
[DEBUG] 字幕[3] 已生成配音片段,配音时长: 2660ms, 原时长 2101

[DEBUG] 字幕[4]前,生成静音片段 7508ms
[DEBUG] 字幕[4] 已生成配音片段,配音时长: 2540ms, 原时长 2268

[DEBUG] 字幕[5]前,生成静音片段 7108ms
[DEBUG] 字幕[5] 已生成配音片段,配音时长: 5620ms, 原时长 7507

[DEBUG] 字幕[6]前,生成静音片段 10278ms
[DEBUG] 字幕[6] 已生成配音片段,配音时长: 3740ms, 原时长 3135

[DEBUG] 字幕[7]前,生成静音片段 12714ms
[DEBUG] 字幕[7] 已生成配音片段,配音时长: 3500ms, 原时长 4270

[DEBUG] 字幕[8]前,生成静音片段 1202ms
[DEBUG] 字幕[8] 已生成配音片段,配音时长: 4540ms, 原时长 5805

[DEBUG] 字幕[9]前,生成静音片段 21722ms
[DEBUG] 字幕[9] 已生成配音片段,配音时长: 3340ms, 原时长 3870

[DEBUG] 字幕[10]前,生成静音片段 19687ms
[DEBUG] 字幕[10] 已生成配音片段,配音时长: 3060ms, 原时长 3303

[DEBUG] 字幕[11]前,生成静音片段 8109ms
[DEBUG] 字幕[11] 已生成配音片段,配音时长: 4020ms, 原时长 2301

[DEBUG] 字幕[12]前,生成静音片段 2036ms
[DEBUG] 字幕[12] 已生成配音片段,配音时长: 4180ms, 原时长 4537

[DEBUG] 字幕[13]前,生成静音片段 16284ms
[DEBUG] 字幕[13] 已生成配音片段,配音时长: 2380ms, 原时长 1934

[DEBUG] 字幕[14]前,生成静音片段 8577ms
[DEBUG] 字幕[14] 已生成配音片段,配音时长: 4100ms, 原时长 3235

[DEBUG] 字幕[15]前,生成静音片段 1569ms
[DEBUG] 字幕[15] 已生成配音片段,配音时长: 2540ms, 原时长 2635

[DEBUG] 字幕[16]前,生成静音片段 5273ms
[DEBUG] 字幕[16] 已生成配音片段,配音时长: 4780ms, 原时长 5338

[DEBUG] concat_txt='F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/audio_concat_list.txt',filelist[0]='F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/jingyin_0_1769947354.2026348.wav'
[DEBUG] cmd=['F:/ai/win-pyvideotrans-v3.96/ffmpeg/ffmpeg.exe', '-hide_banner', '-ignore_unknown', '-threads', '0', '-y', '-f', 'concat', '-safe', '0', '-i', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/audio_concat_list.txt', '-c:a', 'copy', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/endout.wav']
[DEBUG] cmd=['F:/ai/win-pyvideotrans-v3.96/ffmpeg/ffmpeg.exe', '-hide_banner', '-ignore_unknown', '-threads', '0', '-y', '-progress', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/rate_audio_1769947354.3010848.txt', '-i', 'F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/endout.wav', '-c:a', 'libmp3lame', 'F:/ai/win-pyvideotrans-v3.96/output/tts/hh-20260201-200234.mp3']
进入执行完成阶段

23 Replies

日志显示GPT-SoVITS配音请求已成功发送并返回了音频文件(例如dubb-0.wav.wav),且软件已对这些文件进行了格式转换(如pcm_s16le)。然而,最终生成的音频文件(hh-20260201-200234.mp3)没有声音。

核心原因:GPT-SoVITS服务返回的原始音频文件(.wav.wav)本身可能是静音或无效的音频数据。这通常是由于GPT-SoVITS服务端配置、模型加载或参考音频/提示词不匹配导致的。

解决方案

  1. 验证GPT-SoVITS服务状态:确保你的GPT-SoVITS API服务(http://127.0.0.1:9880)正在运行且模型已正确加载。你可以直接在浏览器中访问 http://127.0.0.1:9880/docs 查看API文档,或使用其他工具(如curl)测试 /tts 端点。
  2. 检查参考音频和提示词:日志显示你使用了参考音频马保国.wav和提示文本。请确保:

    • 马保国.wav文件存在于pyVideoTrans软件根目录下,且路径不含中文或空格(建议将文件名改为英文)。
    • 该音频文件是GPT-SoVITS模型训练时使用的音色对应的参考音频,且质量良好。
    • 提示文本(prompt_text)与参考音频的内容完全一致,这是GPT-SoVITS进行声音克隆的关键。
  3. 在pyVideoTrans中测试单句:在软件主界面,进入“配音”模式(或使用“工具”->“TTS设置”),选择GPT-SoVITS渠道,填写相同的参考音频和提示词,对一句简短的文本进行“测试”配音。试听生成的音频是否有声音。这是隔离问题的最有效方法。
  4. 查看GPT-SoVITS服务日志:检查运行GPT-SoVITS服务的终端或日志文件,查看在处理TTS请求时是否有报错信息。
  5. 确保使用正确的API版本:pyVideoTrans调用的是/tts接口。请确认你的GPT-SoVITS服务版本与pyVideoTrans兼容。如果遇到API版本问题(如api_v2接口报错400),请参考知识库中的专门文档。

请查阅相关文档

你可以直接在浏览器中访问 http://127.0.0.1:9880/docs 查看API文档,或使用其他工具(如curl)测试 /tts 端点什么意思

这句话的意思是让你直接测试GPT-SoVITS服务本身是否工作正常,以排除是pyVideoTrans软件的问题。

具体操作如下:

  1. 打开浏览器:在你的电脑上打开任意浏览器(如Chrome、Edge)。
  2. 访问API文档地址:在浏览器地址栏输入 http://127.0.0.1:9880/docs 并回车。

    • 预期结果:你应该能看到一个Swagger UI页面,上面列出了GPT-SoVITS服务提供的所有API接口(包括 /tts),并可以在此页面直接测试接口。
    • 如果无法访问:说明你的GPT-SoVITS服务没有成功启动,或者端口号(9880)不正确。你需要检查并确保GPT-SoVITS服务已正确运行。
  3. 使用命令行工具测试

    • 打开命令提示符(CMD)或PowerShell。
    • 输入以下命令(这是一条示例命令,你需要根据你的实际情况修改参数):

      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\"}"
    • 预期结果:如果服务正常,命令会返回一段Base64编码的音频数据,或者直接将音频文件保存到本地(取决于服务配置)。
    • 如果命令报错或返回异常:则证明问题出在GPT-SoVITS服务端,而不是pyVideoTrans。你需要根据GPT-SoVITS项目的文档排查服务端问题。

核心目的:通过直接访问服务,确认GPT-SoVITS的 /tts 接口是否能独立地生成有效、有声音的音频。如果这里生成的音频也是静音的,那么问题根源就在GPT-SoVITS服务的配置、模型或参考音频上。如果这里生成正常,但pyVideoTrans调用后无声音,则可能是pyVideoTrans的参数传递或后续处理有问题。

请查阅相关文档:

curl -X 'GET' \
'http://127.0.0.1:9880/control' \
-H 'accept: application/json'
{
"message": "command is required"
}

你访问的是 /control 接口,它需要接收命令参数。这个测试没有验证核心的 /tts 配音接口。请按照以下步骤操作:打开浏览器,访问 http://127.0.0.1:9880/docs。在打开的页面中找到 /tts 接口(通常是 POST 方法)。点击 /tts 接口右侧的 “Try it out” 按钮。在请求体(Request body)的 JSON 编辑框中,填入与你在 pyVideoTrans 中配置一致的数据。例如:{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}点击 “Execute” 执行。观察响应结果。如果服务正常,你会在 “Response body” 或 “Server response” 中看到音频数据(可能是 base64 编码)或直接提示下载音频文件。如果响应状态码不是 200(例如 400、500),或者返回错误信息,则说明 GPT-SoVITS 服务端在处理你的请求时遇到了问题。请根据错误信息进行排查。如果响应状态码是 200 但下载的音频文件没有声音,则问题出在 GPT-SoVITS 服务本身(如模型未加载、参考音频路径错误、提示词不匹配等)。请查阅相关文档:GPT-SoVITS API 使用方法

GET
/control
Control

GET
/tts
Tts Get Endpoint

POST
/tts
Tts Post Endpoint

GET
/set_refer_audio
Set Refer Aduio

GET
/set_gpt_weights
Set Gpt Weights

GET
/set_sovits_weights
Set Sovits Weights在哪个框啊

在打开的API文档页面中,找到 POST /tts 这一行。点击它左侧的 三角符号(或右侧的 “Try it out” 按钮)来展开该接口的详细信息和测试面板。在展开的面板中,你会看到一个 “Request body” 部分,里面有一个 JSON 编辑框。就是在这个框里填入测试数据。具体操作步骤:1. 点击 POST /tts 左侧的 符号,展开该接口。2. 在展开的面板中,找到 “Parameters”“Request body” 部分。3. 你会看到一个 “Example Value” 或一个空的 JSON 编辑框。4. 点击这个框,将里面的示例内容替换成你的测试数据(例如下方代码块)。5. 替换完成后,点击该部分下方的 “Execute”“Try it out” 按钮来发送请求。请将以下JSON数据复制并粘贴到那个JSON编辑框中:json{ "text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}然后点击 “Execute” 按钮。观察下方的 “Responses” 部分,查看服务器返回的状态码和内容。如果状态码是 200,并且有音频数据返回,则服务正常。如果状态码是 400500 等错误码,或者返回了错误信息,则说明GPT-SoVITS服务端配置有问题。

422
Error: Unprocessable Entity
{
"detail": [

{
  "type": "json_invalid",
  "loc": [
    "body",
    0
  ],
  "msg": "JSON decode error",
  "input": {},
  "ctx": {
    "error": "Expecting value"
  }
}

]
}
Response headers
content-length: 124
content-type: application/json
date: Sun,01 Feb 2026 13:09:24 GMT
server: uvicorn

问题已明确:GPT-SoVITS 服务的 /tts API 接口无法解析你发送的 JSON 数据,报错“JSON decode error”。这表明你通过网页测试面板发送的请求格式可能不正确,或者服务端期望的JSON结构与你提供的不匹配。请按以下步骤操作:检查并修正JSON格式:在API文档的测试面板中,确保你完全清空了“Request body”的编辑框,然后严格复制并粘贴以下JSON内容(注意不要有多余的空格或换行错误):json{"text": "你好,这是一个测试", "text_lang": "zh", "ref_audio_path": "马保国.wav", "prompt_text": "有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。", "prompt_lang": "zh"}关键点:确保使用的是双引号 ",而不是中文引号 “”。所有键和字符串值都必须用双引号包裹。检查参考音频路径:ref_audio_path 的值 "马保国.wav" 是一个相对路径。GPT-SoVITS服务会在其自身的工作目录下寻找这个文件。请确认 马保国.wav 文件是否放在GPT-SoVITS项目根目录下(即你启动GPT-SoVITS服务的那个目录)。建议使用绝对路径以避免歧义,例如:"F:/ai/GPT-SoVITS/MaBaoguo.wav"(请根据你的实际路径修改)。使用更简单的测试:如果上述步骤仍报错,尝试发送一个最简请求,只包含必填字段。不同版本的GPT-SoVITS API所需字段可能不同。尝试以下JSON:json{"text": "测试", "text_lang": "zh"}如果这个简单请求能成功,再逐步添加 ref_audio_pathprompt_text 等字段,以确定是哪个字段导致的问题。查看GPT-SoVITS服务日志:运行GPT-SoVITS服务的终端窗口会输出更详细的错误信息。请查看该窗口,寻找与JSON解析或参数验证相关的错误日志。验证GPT-SoVITS服务版本:确认你运行的GPT-SoVITS版本与pyVideoTrans兼容。较新的GPT-SoVITS版本可能更改了API接口。请查阅GPT-SoVITS官方文档,确认 /tts 接口所需的准确参数。请查阅相关文档:GPT-SoVITS API 使用方法

{
"detail": [

{
  "type": "json_invalid",
  "loc": [
    "body",
    0
  ],
  "msg": "JSON decode error",
  "input": {},
  "ctx": {
    "error": "Expecting value"
  }
}

]
}
终端INFO: 127.0.0.1:6248 - "POST /tts HTTP/1.1" 422 Unprocessable Entity

问题根源:GPT-SoVITS 服务端接收到的请求体(body)是空的 {},导致无法解析JSON。这表明从API文档网页发送请求时,数据可能未被正确填充或发送。请按以下步骤操作:确保在API文档页面正确操作:在浏览器中访问 http://127.0.0.1:9880/docs。找到 POST /tts 接口,点击其右侧的 “Try it out” 按钮(这是关键步骤,点击后编辑框才会从只读变为可编辑)。点击后,在 “Request body” 下的编辑框中,完全删除里面可能存在的任何示例内容(例如 {...})。然后,严格复制以下JSON文本(不要有任何多余空格或换行),并粘贴到编辑框中:json{"text": "测试", "text_lang": "zh"}点击编辑框下方的 “Execute” 按钮。观察“Responses”部分的状态码和返回信息。如果状态码变为200且有音频数据,则服务基本正常。然后,再尝试添加更多参数(如 ref_audio_pathprompt_text)进行测试。使用命令行工具(curl)进行终极测试:如果网页测试仍然失败,请打开命令提示符(CMD)或终端,执行以下命令(请将 F:/ai/GPT-SoVITS/马保国.wav 替换为你参考音频的实际绝对路径):bashcurl -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/马保国.wav\", \"prompt_text\": \"有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。\", \"prompt_lang\": \"zh\"}"观察命令输出。如果成功,通常会返回一段base64编码的音频数据或提示下载。如果失败,会显示具体的错误信息。检查GPT-SoVITS服务端代码或配置:如果以上两种方法都返回422错误,且服务端日志显示请求体为空,则可能是GPT-SoVITS服务本身的Web框架(如FastAPI)配置有问题,或者存在bug。请确保你的GPT-SoVITS服务是从官方渠道正确部署和启动的。请查阅相关文档:GPT-SoVITS API 使用方法

打开命令提示符(CMD)或终端,执行以命令成功

很好!这意味着GPT-SoVITS服务本身工作正常,能够接收请求并生成音频。现在,问题范围缩小到pyVideoTrans软件调用GPT-SoVITS服务时,生成的音频文件没有声音。根据你最初的日志,pyVideoTrans成功调用了服务并保存了.wav文件,但最终合成的音频无声音。核心原因可能是:GPT-SoVITS服务返回的音频数据在pyVideoTrans后续处理(格式转换、拼接)过程中出现了问题,或者服务返回的音频本身就是静音(但命令行测试正常,这种可能性降低)。请按以下步骤排查:在pyVideoTrans中测试单句配音:这是最关键的一步。在pyVideoTrans主界面,不要进行视频翻译,而是使用“工具”->“TTS设置”。在TTS设置窗口中:选择“GPT-SoVITS”作为配音渠道。填写API地址(http://127.0.0.1:9880)。填写参考音频路径(使用绝对路径,例如 F:/ai/GPT-SoVITS/马保国.wav)。填写提示文本(与命令行测试一致)。在“测试文本”框中输入一句简短的话(例如“你好,世界”)。点击“测试”按钮。观察结果:如果测试生成的音频有声音,说明pyVideoTrans的GPT-SoVITS配置和单次调用是正常的。问题可能出在批量处理或后续对齐合成阶段。如果测试生成的音频也没有声音,请进行下一步。检查pyVideoTrans生成的中间文件:根据你最初的日志,pyVideoTrans在 tmp 目录下生成了像 dubb-0.wav.wav 这样的中间文件。找到这些文件(例如 F:/ai/win-pyvideotrans-v3.96/tmp/1148/b676fa3c1c/)。用系统自带的媒体播放器(如Windows Media Player)直接播放 dubb-0.wav.wav 或 dubb-0.wav。如果这些中间文件有声音:问题出在pyVideoTrans后续的音频拼接或格式转换步骤。如果这些中间文件没有声音:问题出在pyVideoTrans调用GPT-SoVITS服务并保存音频的环节。对比命令行与pyVideoTrans的请求参数:确保你在pyVideoTrans“TTS设置”中配置的参数(特别是参考音频路径和提示文本)与命令行测试时完全一致。路径必须使用绝对路径,且确保GPT-SoVITS服务有权限读取该文件。检查音频采样率/格式:GPT-SoVITS返回的音频格式可能与pyVideoTrans期望的不匹配。在pyVideoTrans的“高级选项”->“通用设置”中,检查“音频采样率”和“音频声道”设置。尝试将“音频采样率”设置为 32000 或 44100(GPT-SoVITS常用采样率)。查看更详细的日志:在pyVideoTrans的 logs 目录下,找到最新的日志文件,搜索“GPT-SoVITS 返回”或“dubb”相关的行,看是否有警告或错误信息。请查阅相关文档:GPT-SoVITS API 使用方法AI配音出错分析

r日志文件如下


Application started at 2026-02-01 21:25:10

[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': 'D:\GPT-SoVITS-v2pro-20250604/马保国.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/924/1769952464.531373-gptsovits.wav.wav', '-ar', '48000', '-ac', '2', '-c:a', 'pcm_s16le', 'F:/ai/win-pyvideotrans-v3.96/tmp/924/1769952464.531373-gptsovits.wav']
[DEBUG] [字幕配音]渠道8:共耗时:7s

日志显示pyVideoTrans已成功调用GPT-SoVITS并生成了中间文件 gptsovits.wav.wav,随后ffmpeg对其进行了格式转换。问题很可能出在GPT-SoVITS返回的原始音频数据本身,或者ffmpeg转换过程中出现了静音。请按以下步骤操作:检查中间音频文件:找到日志中提到的文件 F:/ai/win-pyvideotrans-v3.96/tmp/924/1769952464.531373-gptsovits.wav.wav 和转换后的 F:/ai/win-pyvideotrans-v3.96/tmp/924/1769952464.531373-gptsovits.wav。用系统自带的媒体播放器(如Windows Media Player)直接播放这两个文件。如果 .wav.wav 文件有声音,但 .wav 文件没有声音:问题出在ffmpeg格式转换命令上。可能是采样率或声道设置导致。如果 .wav.wav 文件本身就没有声音:问题出在GPT-SoVITS服务返回的音频数据上。检查参考音频路径:日志中显示 ref_audio_path'D:\GPT-SoVITS-v2pro-20250604/马保国.wav'。这个路径混合了反斜杠 \ 和正斜杠 /,虽然Python通常能处理,但最好统一。请确保该路径下的 马保国.wav 文件确实存在,并且是GPT-SoVITS训练时使用的正确参考音频。在pyVideoTrans的TTS设置中,将参考音频路径改为纯正斜杠的绝对路径,例如:D:/GPT-SoVITS-v2pro-20250604/马保国.wav。在pyVideoTrans中执行单句测试并检查文件:在软件主界面,进入“工具”->“TTS设置”。选择GPT-SoVITS渠道,填写正确的API地址、参考音频路径和提示文本。在“测试文本”框中输入“你好啊我的朋友”。点击“测试”按钮。测试完成后,不要关闭弹出的音频播放窗口(如果有)。直接去pyVideoTrans软件根目录下的 tmp 文件夹中,按修改时间排序,找到最新的 .wav.wav 文件,用播放器打开听是否有声音。如果测试音频有声音:说明单次调用正常,问题可能出在批量处理时的某个特定句子或参数上。如果测试音频无声音:请进行下一步。检查GPT-SoVITS服务端日志:查看运行GPT-SoVITS服务的终端窗口,在pyVideoTrans进行测试时,服务端是否打印了任何错误或警告信息。可能存在加载模型失败或推理错误。尝试简化请求:在TTS设置中,暂时将“提示文本”清空,只保留“参考音频”进行测试。有些GPT-SoVITS版本可能对提示词要求严格。请查阅相关文档:GPT-SoVITS API 使用方法AI配音出错分析

参考音频路径以改为纯正斜杠的绝对路径,但是两个音频都没有声音。终端信息INFO: 127.0.0.1:1960 - "GET /tts?text=%E4%BD%A0%E5%A5%BD%E5%95%8A%E6%88%91%E7%9A%84%E6%9C%8B%E5%8F%8B&text_lang=zh&ref_audio_path=D%3A%5CGPT-SoVITS-v2pro-20250604%5C%E9%A9%AC%E4%BF%9D%E5%9B%BD.wav&prompt_text=%E6%9C%89%E4%B8%A4%E4%B8%AA%E5%B9%B4%E8%BD%BB%E4%BA%BA%EF%BC%8C%E4%B8%89%E5%8D%81%E5%A4%9A%E5%B2%81%EF%BC%8C%E4%B8%80%E4%B8%AA%E4%BD%93%E9%87%8D%E4%B9%9D%E5%8D%81%E5%A4%9A%E5%85%AC%E6%96%A4%EF%BC%8C%E4%B8%80%E4%B8%AA%E4%BD%93%E9%87%8D%E5%85%AB%E5%8D%81%E5%A4%9A%E5%85%AC%E6%96%A4%E3%80%82%E4%BB%96%E4%BB%AC%E8%AF%B4%E5%91%83%EF%BC%8C%E6%9C%89%E4%B8%80%E4%B8%AA%E8%AF%B4%E6%98%AF%E3%80%82&prompt_lang=zh&speed_factor=1.0&text_split_method=cut0 HTTP/1.1" 200 OK

关键发现:终端日志显示,pyVideoTrans 是以 GET 请求 的方式调用 GPT-SoVITS 的 /tts 接口,并且返回了 200 OK。这与之前通过网页或curl使用 POST 请求 测试成功的方式不同。GET 请求通常将参数放在 URL 中,而 POST 请求将参数放在请求体(JSON)中。问题很可能在于:GPT-SoVITS 服务对 GET 请求的处理方式可能不同,或者返回的数据格式不是 pyVideoTrans 期望的音频流,导致保存的文件是静音。请按以下步骤操作:验证GPT-SoVITS对GET请求的响应:在浏览器中直接访问终端日志里的那个长URL(已解码如下):http://127.0.0.1:9880/tts?text=你好啊我的朋友&text_lang=zh&ref_audio_path=D:\GPT-SoVITS-v2pro-20250604\马保国.wav&prompt_text=有两个年轻人,三十多岁,一个体重九十多公斤,一个体重八十多公斤。他们说呃,有一个说是。&prompt_lang=zh&speed_factor=1.0&text_split_method=cut0访问后,浏览器可能会直接下载一个音频文件,或者播放音频。请检查下载的文件是否有声音。如果浏览器下载的文件有声音:说明GPT-SoVITS的GET接口工作正常,问题可能出在pyVideoTrans接收或保存音频数据的环节。如果浏览器下载的文件也是静音:说明GPT-SoVITS服务在处理此特定GET请求时未能生成有效音频,需要检查服务端配置。在pyVideoTrans中强制使用POST请求(如果支持):检查pyVideoTrans的GPT-SoVITS配置界面,看是否有“请求方法”或类似选项,可以将其从“GET”改为“POST”。目前版本可能默认或仅支持GET。修改pyVideoTrans的GPT-SoVITS API地址:尝试在API地址末尾添加明确的路径,强制其使用某种格式。在pyVideoTrans的“TTS设置”中,将GPT-SoVITS的API地址从 http://127.0.0.1:9880 改为以下两种之一进行测试:http://127.0.0.1:9880/tts? (保留问号,表示GET参数)http://127.0.0.1:9880/ (仅根目录,让软件自己拼接)查看pyVideoTrans的GPT-SoVITS模块源码(可选):定位到 pyvideotrans/tts/gptsovits.py 文件,查看其中 get_tts_wav 函数是如何构建请求的(是GET还是POST)。这有助于理解其行为。临时解决方案 - 使用兼容层:如果确认是GET/POST问题,一个解决办法是部署一个简单的中间转发服务,接收pyVideoTrans的GET请求,然后以POST方式转发给GPT-SoVITS,再将音频返回。但这需要一定的开发能力。请查阅相关文档:GPT-SoVITS API 使用方法(注意文档中可能提及请求方法)AI配音出错分析

pyvideotrans/tts/gptsovits.py 这个文件路径在哪啊

该文件位于 pyVideoTrans 软件的源码目录中。根据你的安装方式,路径不同:如果你使用的是 Windows 预打包版(.exe):该文件被封装在 sp.exe 中,无法直接查看。你需要从 GitHub 源码仓库获取。访问 https://github.com/jianchang512/pyvideotrans,在 videotrans/tts/ 目录下找到 gptsovits.py 文件。如果你使用的是 macOS/Linux 源码部署:该文件就在你克隆的仓库目录下,路径为 你的仓库路径/videotrans/tts/gptsovits.py。查看该文件的目的:确认 pyVideoTrans 调用 GPT-SoVITS 时使用的请求方法(GET 或 POST)和参数构建方式。快速解决方案(无需看源码):根据之前的终端日志,已经确认 pyVideoTrans 发送的是 GET 请求。现在需要验证这个 GET 请求返回的音频数据本身是否有问题。请在浏览器中直接访问以下链接(这是从你日志中提取并解码的URL):点击这里测试GET请求访问后,浏览器可能会直接下载一个音频文件(如 tts.wav)。请下载并播放这个文件。关键验证:如果这个直接下载的音频文件 有声音:说明 GPT-SoVITS 的 GET 接口工作正常,并能生成有效音频。问题出在 pyVideoTrans 接收、保存或处理这个音频流的环节(例如,它可能错误地处理了响应内容)。如果这个直接下载的音频文件 没有声音:那么问题根源在 GPT-SoVITS 服务端。它虽然返回了 200 OK,但音频数据是无效的。这可能是因为 GET 请求的参数传递方式(如路径编码)导致服务端解析参考音频路径失败,从而生成了静音。请先完成这个浏览器测试,这是确定问题方向的最直接方法。

没声音

问题根源已确定:GPT-SoVITS 服务虽然以 200 OK 响应了 GET 请求,但返回的音频数据是静音。这表明服务端在处理此特定 GET 请求时,未能成功生成有效音频。最可能的原因是 参考音频路径在 GET 请求的 URL 参数中传递时,服务端未能正确解析或读取。请按以下步骤操作:在浏览器中测试简化请求(排除路径问题):在浏览器地址栏输入以下 URL(将参考音频路径和提示文本参数移除):http://127.0.0.1:9880/tts?text=测试&text_lang=zh访问该链接。如果生成的音频有声音(可能是默认音色),则证明服务基本功能正常,问题确实出在 ref_audio_path 和 prompt_text 参数的传递或处理上。在浏览器中测试 POST 请求(确认服务正常):使用你之前成功过的 curl 命令或 API 文档页面,再次发送一个包含正确参考音频和提示词的 POST 请求,确保生成的音频有声音。这将最终确认 GPT-SoVITS 服务本身是好的。检查 GPT-SoVITS 服务端日志:查看运行 GPT-SoVITS 的终端窗口,当你在浏览器中发送上述 GET 请求时,服务端是否打印了任何错误信息?例如“无法找到参考音频文件”、“加载模型失败”等。修复参考音频路径问题:GET 请求中,路径参数 D:\GPT-SoVITS-v2pro-20250604\马保国.wav 被 URL 编码了。但其中的中文部分 马保国.wav 以及反斜杠 \ 可能导致服务端解析异常。尝试以下方法:将参考音频文件 马保国.wav 复制到 GPT-SoVITS 项目根目录下(即启动服务的目录)。在 pyVideoTrans 的 TTS 设置中,将参考音频路径改为简单的文件名 马保国.wav(仅文件名,无路径)。重新测试。如果必须使用绝对路径,请确保路径中只使用正斜杠 / 且不包含中文(可暂时将文件名改为英文,如 mabaoguo.wav)。例如:D:/GPT-SoVITS-v2pro-20250604/mabaoguo.wav。在 pyVideoTrans 和浏览器测试中都使用这个修改后的路径。检查 GPT-SoVITS 的 API 兼容性:不同版本的 GPT-SoVITS 其 API 接口和参数要求可能不同。请确认你运行的 GPT-SoVITS 版本是否官方支持 GET 请求方式的 /tts 接口。查阅你的 GPT-SoVITS 项目文档或源码。临时解决方案:如果 GET 请求方式始终无法正常工作,而 POST 请求正常,你可以考虑修改 pyVideoTrans 中 GPT-SoVITS 模块的源码,将其请求方式从 GET 改为 POST。这需要你找到并编辑 gptsovits.py 文件(从 GitHub 下载对应版本),修改其中的请求函数。或者,等待 pyVideoTrans 官方更新对 GPT-SoVITS 的支持。请查阅相关文档:GPT-SoVITS API 使用方法

打开链接显示Internal Server Error,终端INFO: 127.0.0.1:2359 - "GET /tts?text=%E6%B5%8B%E8%AF%95&text_lang=zh HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application

怎么
修改 pyVideoTrans 中 GPT-SoVITS 模块的源码,将其请求方式从 GET 改为 POST

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