#5603 保存字幕前格式化srt失败:file='D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt'Tr

103.151* Posted at: 3 hours ago

保存字幕前格式化srt失败:file='D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt'
Traceback (most recent call last):
File "videotrans\task\_base.py", line 81, in _save_srt_target
File "videotrans\util\help_srt.py", line 255, in get_srt_from_list
ValueError: not enough values to unpack (expected 2, got 1)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "videotrans\task\only_one.py", line 46, in run
File "videotrans\task\trans_create.py", line 341, in recogn
File "videotrans\task\_base.py", line 86, in _save_srt_target
videotrans.configure.excepts.VideoTransError: 保存字幕前格式化srt失败:file='D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt'

cfg=[TaskCfgVTT]当前工作模式: 翻译视频或音频 单视频模式
原始输入文件名: C:/Users/30453/Desktop/YouTubeDownloads/Minecraft but I get sent to PARKOUR PRISON.mp4,
输出结果保存到文件夹: D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4,
临时文件夹: D:/pyvideotrans/win-pyvideotrans-v4.03-0626/tmp/130388/ccbd2420ea
已选 清理已存在
已选 启用CUDA加速
未选 降噪
已选 识别说话人,最大说话人数量5
语音识别:WhisperX(本地API), model_name: distil-large-v3.5, 发音语言: 英语, 断句方式:LLM重新断句
翻译渠道:DeepSeek,原始语言:英语,目标语言:简体中文, 已选 发送完整字幕
配音渠道:Edge-TTS(免费), 角色:Yunxi(Male/CN), 配音语言:简体中文, 已选 二次语音识别
音量:+0%, 语速:+10%, 未选 音频加速, 未选 视频慢速
未选 移除字幕间空隙, 已选 强制对齐字幕和声音
字幕: 嵌入硬字幕
未选 分离人声与背景声, 手动添加了背景音频:C:/Users/30453/Desktop/Consistency.mp3

代理地址:http://127.0.0.1:7890

5 Replies

这个错误是由于语音识别返回的字幕数据格式异常,导致软件在拼接 SRT 文件时无法正确解析(遇到了既不是时间行也不是文本行的无效行)。

主要原因:
WhisperX(本地API) + LLM 重新断句 组合下,LLM 可能返回了格式错乱的内容(例如缺少时间戳、多出空行、或者将时间轴和文本合并到一行),导致 get_srt_from_list 函数在解包时发现数量不匹配。

解决方案:

  1. 立即尝试取消勾选“LLM重新断句”,使用默认断句方式重新执行。这是最直接的排查方法。
  2. 检查原始字幕文件:打开 D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt,查看是否有异常行(例如某行只有时间戳没有文本,或只有文本没有时间戳),截图或复制异常内容。
  3. 检查 WhisperX 服务配置:确认本地 WhisperX API 接口返回的字幕数据是标准 SRT 格式(行号、时间轴、文本三行一组),没有额外的 JSON 包裹或格式错误。
  4. 临时替换渠道:将语音识别渠道改为 faster-whisper(本地内置) + large-v3 模型,关闭 LLM 断句,测试是否正常。如果正常,说明问题出在 WhisperX 或 LLM 断句上。

如果上述步骤无法解决:提供 en.srt 文件的前 20 行内容,以及 WhisperX 服务返回的原始日志片段,以便进一步分析。

保存字幕前格式化srt失败:file='D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt'
Traceback (most recent call last):
File "videotrans\task\_base.py", line 81, in _save_srt_target
File "videotrans\util\help_srt.py", line 255, in get_srt_from_list
ValueError: not enough values to unpack (expected 2, got 1)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "videotrans\task\only_one.py", line 46, in run
File "videotrans\task\trans_create.py", line 341, in recogn
File "videotrans\task\_base.py", line 86, in _save_srt_target
videotrans.configure.excepts.VideoTransError: 保存字幕前格式化srt失败:file='D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt'

cfg=[TaskCfgVTT]当前工作模式: 翻译视频或音频 单视频模式
原始输入文件名: C:/Users/30453/Desktop/YouTubeDownloads/Minecraft but I get sent to PARKOUR PRISON.mp4,
输出结果保存到文件夹: D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4,
临时文件夹: D:/pyvideotrans/win-pyvideotrans-v4.03-0626/tmp/130388/ccbd2420ea
已选 清理已存在
已选 启用CUDA加速
未选 降噪
已选 识别说话人,最大说话人数量5
语音识别:WhisperX(本地API), model_name: distil-large-v3.5, 发音语言: 英语, 断句方式:LLM重新断句
翻译渠道:DeepSeek,原始语言:英语,目标语言:简体中文, 已选 发送完整字幕
配音渠道:Edge-TTS(免费), 角色:Yunxi(Male/CN), 配音语言:简体中文, 已选 二次语音识别
音量:+0%, 语速:+10%, 未选 音频加速, 未选 视频慢速
未选 移除字幕间空隙, 已选 强制对齐字幕和声音
字幕: 嵌入硬字幕
未选 分离人声与背景声, 手动添加了背景音频:C:/Users/30453/Desktop/Consistency.mp3

代理地址:http://127.0.0.1:7890

ValueError: not enough values to unpack (expected 2, got 1) 说明 WhisperX(本地API) 返回的字幕数据中,某一行既不是标准时间轴(如 00:01,000 --> 00:03,000),也不是纯文本,导致解析时解包失败。这通常由LLM重新断句产生的格式错乱引起,或 WhisperX 服务本身返回了不规范的输出。

解决方案(按优先级尝试)

  1. 立即尝试:取消LLM重新断句
    在主界面将“断句方式”从“LLM重新断句”改为“默认断句”,然后重新执行任务。这是最直接的排查方法,因为LLM可能返回了拼合了时间轴的文本、多余空行或缺少行号。
  2. 检查并修正 en.srt 文件
    打开 D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt,查看是否有以下异常行:

    • 某行只包含时间轴但没有文本(或相反)
    • 两行文本被错误合并到一行中
    • 行号重复或缺失
      如果存在此类问题,手动调整为标准格式(三行一组:序号、时间轴、文本,然后空行),重新保存后再运行。
  3. 更换ASR渠道
    将“语音识别渠道”改为 faster-whisper(本地内置) + large-v3 模型,取消“LLM重新断句”并保持“默认断句”,观察是否正常。如果正常,则问题出在 WhisperX 或 LLM 断句上。
  4. 检查 WhisperX 服务配置
    确保本地 WhisperX API 返回的是纯 SRT 格式文本,没有额外 JSON 包裹或调试信息。可尝试直接调用 WhisperX API 测试返回值是否格式正确。

如果以上步骤仍无法解决

请提供:

  • en.srt 文件的前 30 行 内容(粘贴到回复中)
  • WhisperX 服务端返回的原始日志(或控制台输出)

以便进一步定位。

请查阅相关文档:

我按你说的,关了llm断句啊

理解了。关闭LLM断句后问题依然存在,说明根源不在LLM断句,而在于 WhisperX(本地API) 返回的字幕内容本身格式异常,或者“说话人识别”功能干扰了SRT行解析。

请按以下步骤排查:

  1. 暂时关闭“识别说话人”
    在“设置更多参数”中,取消勾选“识别说话人”,然后重新执行任务。如果正常,说明是说话人识别添加的 [SPEAKER_XX] 标签或格式导致解析失败。
  2. 检查 en.srt 文件内容
    打开 D:/pyvideotrans/win-pyvideotrans-v4.03-0626/Minecraft but I get sent to PARKOUR PRISON-mp4/en.srt,查看前30行内容。
    典型的异常情况

    • 某一行只有时间轴没有文本(或只有文本没有时间轴)
    • 两行文本错误地合并到一行(例如 [SPEAKER_00]Hello world 与时间戳放在同一行)
    • 行号丢失或乱序
      请将前30行内容粘贴出来,我帮你判断具体格式问题。
  3. 更换语音识别渠道
    暂时改用 faster-whisper(本地内置) + large-v3 渠道,保持其他设置不变(关闭LLM断句、关闭说话人识别),看是否能成功生成字幕。如果成功,则问题锁定在 WhisperX 服务或模型 distil-large-v3.5 上。
  4. 确认 WhisperX 服务返回值
    检查你的WhisperX本地服务日志,看是否返回了非标准SRT格式的数据(例如JSON包裹、空行过多等)。确保API返回的是纯文本SRT格式。
  5. 手动修复 en.srt 后重试
    如果急用,可以手动编辑 en.srt,将明显错乱的行修正为标准格式(三行一组:序号、时间轴、文本,然后空行)。保存后重新运行软件,软件会跳过ASR阶段直接进入后续流程(前提是文件路径正确)。

请先尝试 步骤1步骤2 ,提供结果后进一步分析。

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. Dondate: ko-fi.com/jianchang512

Related resource