#4141 识别说话人后并没有标记角色

182.107* Posted at: 3 hours ago 👁19

image

5 Replies

识别说话人后没有标记角色,通常是因为说话人分离模型未能成功区分不同说话人,或者识别出的说话人ID未正确映射到字幕文本中。

请按以下步骤排查和解决:

  1. 确认设置:确保在“翻译视频或音频”界面中,已勾选“识别说话人”选项,并正确设置了预计的说话人数量(如不确定可留空或设为0)。
  2. 检查高级选项:点击 菜单 -> 工具/选项 -> 高级选项,在“语音识别参数”区域:

    • 确认“说话人分离模型”已选择(如“内置模型”、“阿里cam++”或“pyannote”)。
    • 如果选择“pyannote”模型,必须拥有HuggingFace Token并已填写在“Huggingface的token”字段中,且需同意pyannote的授权协议。
  3. 验证音频质量:说话人分离对音频质量有要求。背景噪音过大、多人同时说话或语音不清晰都可能导致分离失败。可以尝试开启“降噪”或“分离人声背景声”功能来提升音频质量。
  4. 查看日志:处理完成后,检查软件根目录下 logs 文件夹中的日志文件,搜索“diarization”或“说话人”相关条目,看是否有错误信息。
  5. 尝试其他模型:如果使用“内置模型”效果不佳,可以尝试切换到“阿里cam++”(对中文优化)或配置“pyannote”(效果最好但需Token)。
  6. 手动校对:在单视频翻译模式下,识别完成后会弹出字幕编辑窗口,可以在此手动为不同行的字幕指定说话人角色。

请查阅相关文档:

image
在批量语音转字幕中是正常的

在“翻译视频或音频”功能中识别说话人无标记,而在“批量语音转字幕”中正常,这通常是因为两个功能模块在处理说话人分离时的流程或默认参数存在差异。

核心原因是“翻译视频或音频”功能的工作流更复杂,可能未将说话人分离的结果正确传递到最终的字幕输出环节。

请按以下步骤解决:

  1. 检查并调整“翻译视频或音频”的高级设置

    • 点击 菜单 -> 工具/选项 -> 高级选项
    • “语音识别参数” 区域,确保 “说话人分离模型” 已正确选择(例如“内置模型”)。
    • 如果选择“pyannote”,请确认已填写有效的 “Huggingface的token”
  2. 验证处理后的中间文件

    • 处理一个视频后,进入其临时文件夹(通常位于软件根目录的 tmp 文件夹下,以任务ID命名的子文件夹)。
    • 查找并打开生成的原始语言字幕文件(通常命名为 {视频名}_raw.srt)。检查这个文件中的字幕行是否已包含说话人标记(如 [SPEAKER_00])。
    • 如果 _raw.srt 文件中说话人标记,但最终输出的字幕没有,则问题出在后续的翻译或合成流程中,说话人信息被剥离了。
    • 如果 _raw.srt 文件中没有说话人标记,则说明说话人分离步骤在“翻译视频或音频”流程中本身就没有成功执行。
  3. 临时解决方案

    • 如果需要带说话人标记的字幕,可以暂时使用 “批量语音转字幕” 功能先生成带说话人标记的SRT文件。
    • 然后,在 “翻译视频或音频” 界面中,点击 “导入已有字幕” 按钮,导入这个SRT文件,再进行后续的翻译和配音。
  4. 反馈日志

    • 如果上述步骤无法解决,请提供软件 logs 目录下最新日志文件中,处理该视频时与“diarization”(说话人分离)相关的错误或警告信息,以便进一步分析。

请查阅相关文档:

2026-04-18 16:25:09,249 - modelscope - WARNING - We can not confirm the cached file is for revision: master

[DEBUG] 开始说话人分离:使用阿里cam++模型
[DEBUG] 说话人分离原始返回结果:result={'text': [[3.35, 4.62, 0], [5.74, 6.79, 0], [12.15, 13.45, 0], [13.92, 16.22, 0], [17.24, 17.77, 0], [20.63, 21.27, 1], [21.92, 22.52, 1], [23.87, 24.67, 2], [25.56, 26.93, 2], [28.7, 30.04, 2], [30.46, 39.23, 2], [39.51, 44.26, 2], [44.54, 47.38, 2], [47.66, 52.5, 2], [53.56, 56.27, 3], [58.45, 60.53, 3], [62.05, 65.68, 3], [66.94, 68.18, 3], [69.92, 72.08, 3], [73.22, 78.55, 3], [78.83, 81.0, 3], [81.83, 83.31, 3], [83.59, 89.69, 3], [90.08, 91.57, 3], [92.31, 94.64, 3], [95.32, 97.03, 2], [99.62, 100.56, 2], [104.07, 107.59, 2], [108.07, 109.11, 2], [109.39, 111.21, 2], [111.49, 113.28, 2], [113.28, 115.15, 0], [115.15, 116.6, 2], [119.59, 121.7, 2], [122.0, 124.31, 2], [127.96, 128.57, 0], [129.21, 134.32, 0], [149.19, 150.16, 4], [151.28, 155.97, 4], [156.93, 161.33, 4], [161.33, 162.87, 2], [163.27, 165.2, 2], [166.21, 167.44, 2], [167.95, 170.17, 2], [170.75, 171.69, 2], [171.97, 173.35, 2], [173.67, 183.56, 2]]}
[DEBUG] 说话人分离成功结束,识别出个 0 说话人,耗时:24s
self.trans_thread=10,self.aisendsrt=False,self.translate_type=1
[DEBUG] 以普通文本行按行翻译:原始行数:74,翻译后行数:74
[DEBUG] [字幕翻译]渠道1,:共耗时:0s

根据日志,问题已明确:说话人分离模型(阿里cam++)已成功运行并返回了结果(识别出多个说话人ID:0, 1, 2, 3, 4),但后续处理中,这些说话人标记未能成功关联并写入到最终的字幕文件。日志显示“识别出个 0 说话人”是格式错误,实际已识别出多个ID。

核心原因是:在“翻译视频或音频”的流程中,说话人分离产生的时间戳-说话人ID映射结果,未能与语音识别生成的字幕文本行进行正确匹配和对齐。这通常是由于两个步骤(语音识别VAD分割 与 说话人分离模型分割)对音频的切割点不一致导致的。

解决方案:

  1. 调整语音识别参数以改善对齐

    • 进入 菜单 -> 工具/选项 -> 高级选项
    • “语音识别参数” 区域,进行以下调整:

      • 静音分割持续毫秒:尝试增大此值(例如从500调整到800或1000),使语音识别的切割点更倾向于在长静音处,这可能与说话人分离模型的切割点更一致。
      • 最长语音持续秒数:确保此值设置合理(例如6-10秒),避免单条字幕过长。
      • 语音阈值:可微调(如0.4到0.6),确保语音片段检测稳定。
  2. 验证并尝试其他说话人分离模型

    • 在“高级选项”的 “说话人分离模型” 中,尝试切换到 “内置模型” 看是否能正确标记。
    • 如果问题依旧,可以尝试使用效果更好但需要配置的 “pyannote” 模型(需HuggingFace Token)。
  3. 处理流程建议(当前最可靠的方法)

    • 由于“批量语音转字幕”功能正常,请优先使用该功能生成带说话人标记的SRT字幕文件。
    • 然后,在“翻译视频或音频”界面中,不要进行语音识别,而是直接点击 “导入已有字幕” 按钮,导入上一步生成的SRT文件,再进行后续的翻译和配音。这样可以确保说话人标记不丢失。
  4. 检查输出

    • 处理完成后,在输出文件夹中找到 {视频名}_raw.srt 文件,用文本编辑器打开,检查字幕行开头是否已有 [SPEAKER_00] 之类的标记。如果这里没有,则问题出在更早的匹配环节;如果有,但最终视频字幕没有,则可能是后续渲染环节的问题。

请查阅相关文档:

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