#1024 启用了llm重新断句后,需要删除空的字幕行,否则自定义的tts给空行配音会报错

130.51* Posted at: 5 days ago 👁18

由于初步的原文断句较差,llm重新断句翻译后较好,将原来的多行断句为较少的行后,会出现空行。如果可以手动删除翻译后的空行,或者发送给自定义配音服务时忽略空字幕就好了。
image

1 Replies

本条内容由 gpt-5-mini 回复

问题原因:LLM 重新断句后产生了没有文本的空字幕行,导致自定义 TTS 对空行调用时报错(TTS 接口通常期待有文本)。可用两种思路解决:在送入配音前删除/忽略空行,或让软件在发送请求时跳过空字幕。

推荐解决方案(按优先级):

1) 最快速的手工修正(推荐用于少量文件)

  1. 用常见字幕编辑器打开翻译后的 .srt(例如 Subtitle Edit、Aegisub 等)。
  2. 使用编辑器的“删除空字幕/移除空行”功能(大多数字幕编辑器都有该项)。
  3. 保存并再次运行“为字幕配音”或主流程。

2) 用记事本/Notepad++ 快速删除(适合单次手工操作)

  • 在 Notepad++ 中可以用正则替换删除没有文本的条目。也可直接搜索两个连续空行并手动检查删除(注意备份原文件以防误删)。

3) 批量/自动化处理(脚本方式,推荐用于多文件或流水线)

  • 用下面的简单 Python 脚本过滤掉没有任何文本的字幕块(把 input.srt 换成你的文件名,输出到 output.srt):

    1. 创建文件 remove_empty_srt.py,内容:
      with open('input.srt','r',encoding='utf-8') as f:

      blocks = f.read().strip().split('\n\n')

      out = []
      for b in blocks:

      lines = b.strip().splitlines()
      # lines[0] = index, lines[1] = 时间轴, lines[2:] = 文本行
      if len(lines) >= 3 and any(line.strip() for line in lines[2:]):
          out.append(b.strip())

      with open('output.srt','w',encoding='utf-8') as f:

      f.write('\n\n'.join(out) + '\n')
    2. 运行:python remove_empty_srt.py
    3. 将 output.srt 用于配音步骤(或替换原文件)。

4) 在 pyVideoTrans 内流程中跳过空行的建议与临时方案

  • 如果你在界面上直接使用“批量为字幕配音”或主流程且软件当前会把空行一并发送给自定义 TTS,会报错;目前没有内置“自动忽略空字幕”的确认设置(若需要我可以帮你确认是否存在此选项,请提供界面截图/版本)。
  • 临时方案:在开始配音前先用上面的脚本或编辑器清理一遍翻译后的 .srt 再送入配音模块。
  • 我会将“在发送到自定义 TTS 时自动忽略空字幕”作为建议反馈给开发者,建议在后续版本中加入开关(自动过滤空行或在发送前做非空校验)。

5) 如果问题仍然存在或你需要我给出更精准的处理方式,请提供以下信息以便进一步分析:

  • 出错的 TTS 服务的具体错误信息或截图(在日志里或界面报错)。
  • 出问题的翻译后 .srt 示例(可粘贴含空行的片段)。
  • 最新日志文件(位于 videotrans/logs/ 目录下),有日志我可以更精确地定位错误原因并给出修复建议。

如果你希望我直接给出批量处理多个 .srt 的脚本或提供 Notepad++ 的具体正则,我可以基于你的环境再给出精确命令。

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