#4972 Resegment:ended之后就不动了,卡住了

120.229* Posted at: 18 hours ago

Resegment:ended之后就不动了,卡住了

18 Replies

Resegment ended 卡住通常与 LLM 重新断句 功能有关,该阶段会调用 AI 大模型对字幕文本进行再处理,若模型无响应或配置错误,会导致进程挂起。

排查步骤

  1. 检查 AI 渠道配置
    进入 菜单 → 工具/选项 → 高级选项 → 通用设置,确认 LLM 重新断句所用 AI 渠道 对应的 API Key 和接口地址已正确填写且网络通畅(如 DeepSeek 或 OpenAI)。
  2. 临时关闭 LLM 重新断句
    若不需要重新断句,可在高级选项中取消勾选 启用 LLM 重新断句 或改为 默认断句,然后重试任务。
  3. 调整批量和超时
    在高级选项中将 LLM 重新断句每批字幕行数 减小(如改为 10 或 5),并确保对应 AI 渠道的 max_token 足够大(建议 4096 以上)。
  4. 查看日志
    如果以上无效,请提供 logs/ 目录下最新日志文件底部约 30 行报错信息,以便进一步分析。

请查阅相关文档:

语音识别阶段出错[faster-whisper(本地)] No transcription results returned. Please check the original audio/video or model and try again.
Traceback (most recent call last):

File "videotrans\task\job.py", line 35, in run

File "videotrans\task\job.py", line 100, in process_task

File "videotrans\task\trans_create.py", line 322, in recogn

File "videotrans\recognition\__init__.py", line 190, in run

File "videotrans\recognition\_base.py", line 94, in run

File "videotrans\recognition\_whisper.py", line 36, in _exec

File "videotrans\recognition\_whisper.py", line 109, in _faster

File "videotrans\configure\base.py", line 253, in _new_process

videotrans.configure.excepts.VideoTransError: No transcription results returned. Please check the original audio/video or model and try again.
TaskCfgVTT(uuid='3b4adc18ae', name='F:/02_Godot/video/10/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080].mp4', dirname='F:/02_Godot/video/10', noextname='Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]', basename='Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080].mp4', ext='mp4', target_dir='F:/02_Godot/_video_out/video/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]-mp4', cache_folder='D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae', is_cuda=True, source_language='英语', source_language_code='en', source_sub='F:/02_Godot/_video_out/video/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]-mp4/en.srt', source_wav='D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae/en.wav', source_wav_output='F:/02_Godot/_video_out/video/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]-mp4/en.m4a', target_language='简体中文', target_language_code='zh-cn', target_sub='F:/02_Godot/_video_out/video/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]-mp4/zh-cn.srt', target_wav='D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae/target.wav', target_wav_output='F:/02_Godot/_video_out/video/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]-mp4/zh-cn.m4a', translate_type=4, tts_type=9, volume='+0%', pitch='+0Hz', voice_rate='+0%', voice_role='Sound_005_90.m4a', voice_autorate=True, video_autorate=False, remove_silent_mid=False, align_sub_audio=True, detect_language='en', recogn_type=0, model_name='large-v3-turbo', shibie_audio=None, remove_noise=False, enable_diariz=False, nums_diariz=0, rephrase=1, fix_punc=True, subtitle_language=None, app_mode='biaozhun', subtitles='', targetdir_mp4='F:/02_Godot/_video_out/video/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080]-mp4/Godot Demo- Destructible Objects-[Ax1WCBW47LY]-[1920x1080].mp4', novoice_mp4='D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae/novoice.mp4', is_separate=True, embed_bgm=True, instrument='D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae/instrument.wav', vocal='D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae/vocal.wav', clear_cache=False, background_music='', subtitle_type=3, only_out_mp4=False, recogn2pass=False, output_srt=2, copysrt_rawvideo=False, loop_backaudio=1, backaudio_volume=0.8)

核心原因:faster-whisper 未从音频中提取到任何文字,通常由三方面导致:音频文件本身几乎无声或静音文件名/路径含特殊符号导致音频提取失败、或模型/显存异常

排查步骤

  1. 简化文件名与路径
    将视频复制到短路径(如 D:\test\video.mp4),并重命名为纯英文数字,不含 [-、空格等特殊符号。原文件名极长且含特殊字符,极易引起 ffmpeg 处理失败。
  2. 检查音频源文件
    在软件 tmp 文件夹中找到对应任务的 en.wav(位于 D:/win-pyvideotrans-v4.01-0602/tmp/32384/3b4adc18ae/en.wav),用播放器试听是否有清晰人声。若无声,说明前方分离人声/背景声步骤或提取音频步骤失效。
  3. 关闭“分离人声背景声”
    错误日志中 is_separate=True,此步骤耗时且易出错。先取消勾选 设置更多参数 → 分离人声背景声,再重新翻译。
  4. 检查显存与模型

    • 若显存不足(特别在使用 large-v3-turbo 时),可在 菜单 → 工具 → 高级选项 → 语音识别参数 中将 CUDA数据类型 改为 int8,并调低 beam_sizebest_of1
    • 也可尝试换用 smallmedium 模型。
  5. 查看日志更多细节
    请提供 logs/ 目录下与当前时间对应的日志文件底部约 30 行内容,可进一步定位是否为 ffmpeg 解码或模型加载问题。

请查阅相关文档:

Transcribe

卡住

“Transcribe” 指的是“批量语音转字幕”功能,该错误与翻译视频模式下的语音识别阶段本质相同,核心原因仍是音频提取失败或模型未能产出文字。请在“批量语音转字幕”面板中按以下步骤排查。

  1. 简化文件名和路径
    将视频移动到短路径(如 D:\test\),并重命名为纯英文数字(去掉 [-、空格等特殊符号)。原文件名过长且含特殊字符,ffmpeg 解码时极易失败。
  2. 检查原始语言选择
    在“批量语音转字幕”面板中,发音语言可选择 自动检测(知识库第32条),避免语言代码指定错误导致无输出。
  3. 确认音频包含人声
    若视频背景嘈杂或无人说话,模型会返回空结果。可尝试勾选 降噪 提升识别率。
  4. 降低模型规模与显存占用
    若使用 large-v3-turbo 且显卡显存不足,换成 smallmedium 模型。同时在“高级选项→语音识别参数”中将 CUDA数据类型 设为 int8beam_sizebest_of 设为 1
  5. 查看日志
    若上述步骤后仍报错,请提供 logs/ 文件夹中最新日志文件底部约 30 行内容,以便进一步定位是解码失败还是模型问题。

上面这些问题好像就是在我关闭 Whisper 预分割音频 开始出现的,有什么关联吗

有关联,很可能是直接原因

关闭 Whisper 预分割音频 后,模型会尝试一次性处理整段长音频,而非预先切成短句再识别。这会导致:

  1. 显存/内存耗尽 – 长音频需要更高的连续显存,若显卡显存不足,模型会直接返回空结果(即您的 No transcription results returned)。
  2. 模型无法处理超长时长 – 某些模型对单次输入时长有隐性上限,超出后静默失败。
  3. 语音阈值失效 – 未预分割时,VAD 参数(如最长语音持续秒数)的作用被削弱,模型可能直接将整段音频判定为无效。

解决方案(任选其一)

方案 A:重新开启“Whisper 预分割音频”
回到 菜单 → 工具 → 高级选项 → 语音识别参数,勾选 Whisper 预分割音频?,同时将 “最长语音持续秒数” 设为 6, “最短语音持续毫秒” 设为 1000。这能保证音频被合理切割后再识别,避免失败。

方案 B:保持关闭但配合参数调整
如果您必须关闭预分割(例如为了更好的断句效果),请同步做以下调整:

  • 高级选项 → 语音识别参数 中,将 CUDA 数据类型 改为 int8beam_sizebest_of 均设为 1,降低显存压力。
  • 采样温度 适当调低(如 0.0),重复惩罚 调高(如 1.2),减少因长音频产生的幻觉。
  • 手动检查音频长度:若原始视频超过 30 分钟,建议先裁剪成短片段再处理。

另外,您之前的视频文件名含大量特殊符号([、-、空格等),即使预分割关闭,也务必先重命名为纯英文短名,否则 ffmpeg 解码仍可能失败导致无声输入,从而返回空结果。

建议您先开启预分割,再配合简化文件名重试,大概率可以解决。

Whisper 预分割音频有什么好处

Whisper 预分割音频 的主要好处有两点:降低显存/内存压力 提前将音频切成短句再送入模型,避免一次性处理长音频导致显存溢出(尤其在使用 large 模型时),从而减少 No transcription results returned 等空结果错误。提升语音克隆效果 若配音角色选了 clone,需要每条参考音频时长在 3~10 秒之间。预分割能确保每段音频长度合理,为克隆提供更可靠的参考片段。若关闭预分割,模型直接处理整段长音频,容易因资源不足或时长超限而失败,这正是您先前报错的原因。

是根据什么来分割

Whisper 预分割音频 依赖 VAD(语音活动检测) 将音频切割成独立片段,具体依据以下参数(位于菜单 → 工具/选项 → 高级选项 → 语音识别参数):语音阈值 音频片段被判定为语音的概率下限,默认 0.5。静音分割持续毫秒 连续静音达到此值(默认 500ms)时视为两段语音的分界点。最短语音持续毫秒 长度小于此值(如 1000ms)的片段会被合并到相邻片段。最长语音持续秒数 超过此值(如 6s)的片段会被强制分割,防止过长音频导致显存溢出。选择 VAD 可在 sileroten-vad 等模型间切换,不同 VAD 的分割灵敏度不同。总结:预分割基于 VAD 模型结合这些阈值参数,在送入 Whisper 之前将长音频切成短句,从而降低显存占用并提升语音克隆时的参考音频质量。

是根据我所设置的最长语音持续秒数,最短语音持续毫秒,静音分割持续毫秒来直接分割吗,是处于整个过程中的第几步?

Whisper 预分割音频 位于整个处理流程的第一步(即最前端),在音频送入 Whisper 模型进行转录之前执行。分割并非直接按您设置的三个参数进行简单的均分或硬切,而是基于 VAD(语音活动检测)模型智能判断语音片段的起止点,并根据您设置的参数进行微调。具体流程如下:第一步:VAD 模型识别语音边界 软件使用 VAD 模型(如 Silero VAD)对音频逐帧分析,标记出哪些区域有人声(语音概率超过 语音阈值),哪些是静音/噪音。这决定了原始的语言边界。第二步:按静音分割持续毫秒切分 在上述识别出的语音区域内,检测相邻语音片段间的静音长度。若静音时长 大于等于 静音分割持续毫秒(默认 500ms),则在此处切分成独立的字幕。若静音较短则合并为同一段。第三步:约束片段最大时长 若某片段时长 超过 最长语音持续秒数(如 6s),会被强制分割为更小的段(即使中间无足够静音)。这是为了防止单段音频过长导致显存溢出。第四步:合并过短片段 若某片段时长 小于 最短语音持续毫秒(如 1000ms),且开启了 合并过短字幕到邻近,则会尝试合并到相邻片段中。总结:参数角色

  • 语音阈值 – 决定哪些片段被认为是“有语音”
  • 静音分割持续毫秒 – 决定在语音片段间何处切开
  • 最长语音持续秒数 – 兜底限制每段最大长度
  • 最短语音持续毫秒 – 合并极短片段的门槛

整个预分割在送入 Whisper 之前完成,是 ASR 处理流程的第 1 步(音频预处理 → 第 2 步 VAD 预分割 → 第 3 步 Whisper 转录)。

如果配字幕,会造成与声音不能精确对齐的情况吗

Whisper 预分割音频 不会导致字幕与声音错位。它对音频的切割仅发生在语音识别阶段(ASR 之前),目的是降低显存消耗并提高识别准确率。后续的配音、合成、对齐阶段会基于原始视频的音视频时间轴进行同步处理,不受预分割影响。最终字幕与配音的对齐依赖于以下两个环节:音频加速/视频慢速(主界面选项) 当配音时长与字幕时间不匹配时,通过加速配音或慢放视频片段进行主动补偿,以实现同步。二次识别(可选) 若勾选“二次识别”,软件会在配音完成后对配音音频再次进行 ASR 转录,生成与配音语音精确对齐的新字幕。此步骤可彻底消除因预分割或其他因素导致的微小时间偏差。总结:预分割只影响转录阶段的输入切片,不影响最终输出的时间精度。若仍担心对齐问题,建议在单视频模式下启用“二次识别”,或选中“音频加速”与“移除字幕间静音”。

二次识别会导致错别字,有什么方法能与识别前的字幕作比对,来纠正识别中的错字吗

二次识别(recogn2pass)本身是对配音后的音频再次进行 ASR 转录,目的是生成与配音精确对齐的简短字幕。由于两次转录使用的模型和语音(原始音频 vs 配音音频)不同,产生错别字是常见现象。软件暂无自动与识别前字幕逐行比对的纠错功能,但可通过以下方式减轻错别字影响:使用单视频交互模式 在单视频翻译时,二次识别后会弹出字幕编辑框(如知识库第 5.3 节所述),您可以手动将出现错别字的行与之前校对过的原始字幕或目标字幕进行比对并修正。启用 LLM 重新断句(谨慎使用) 在菜单 → 工具 → 高级选项 → 通用设置中,将 LLM 重新断句所用 AI 渠道配置好(如 DeepSeek 或 ChatGPT),二次识别的结果会经过 AI 大模型重新修正断句和错别字。注意:若配音角色为 clone 时,不建议使用 LLM 重新断句,因为它会重新划分时间轴,影响截取参考音频的精度。外部工具比对 对于批量处理的视频,您可以手动使用文本比对软件(如 Beyond Compare、Notepad++ 的 Compare 插件)对比二次识别产生的字幕文件与之前较准确的原始字幕文件,快速定位差异并用正确文字替换。总结:二次识别的错别字无法完全避免,最可靠的方案是在单视频交互编辑框中人工比对修改;若依赖 AI 修复,可开启 LLM 重新断句(注意使用场景)。

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