#4278 Admin大神请进,有个关于术语表的问题请教

2409:8a55* Posted at: 4 hours ago 👁50

你好,有个问题困扰很久,就是术语表在3.99版本是不是失效的状态?如果是的话,我就不再花时间去解决或尝试了,问了很多次BBS,给出的所有方案都试过了,仍然不起作用,我电脑上还保留着3.98,术语表就完全没有问题,翻译的时候都可以成功替换,求解惑,谢谢

28 Replies

术语表在 v3.99 并未失效,但可能存在配置或文件路径问题。请按以下步骤排查:

  1. 确保术语表文件格式正确(通常是 .txt 纯文本,每行一个术语,例如 原文\t译文)。
  2. 打开软件菜单栏 工具/选项 → 翻译设置,检查术语表文件路径是否指向了正确的文件。
  3. 若使用 AI 翻译渠道,需勾选 发送完整字幕(否则术语表可能不被发送)。
  4. 如果以上都正常,请将 v3.98 中能正常工作的术语表文件复制到 v3.99 目录下覆盖并重启软件。

若仍无效,请提供 logs/ 文件夹中最新的日志文件底部约 30 行内容,以便进一步分析。

软件重新下载过了,当前最新的win-pyvideotrans-v3.99-420版本,给出的术语表格式是Tab相连也试过了,完全没用,现在仍然用的是=相连,该勾的都勾了

术语表在 v3.99 仍有效,但可能因格式或配置细节导致失效。请严格按以下步骤检查:

  1. 术语表文件格式:必须为纯文本文件(.txt),每行一个术语,原文与译文之间使用制表符(Tab)分隔,例如:
    original term<Tab>翻译后的术语
    不要使用等号 =
  2. 术语表路径:在菜单栏 工具/选项 → 翻译设置 中,确认“翻译术语表”路径正确指向该 .txt 文件。建议将术语表文件放在软件安装目录下(如 D:\pyVideoTrans\term.txt)。
  3. 翻译渠道:术语表仅在 AI 翻译渠道(如 DeepSeek、GPT)中生效。传统翻译渠道(如 Google、百度)不支持术语表。
  4. 发送完整字幕:在 AI 翻译设置中,必须勾选“发送完整字幕”,否则术语表可能不会被发送给 AI。
  5. 清除缓存后重试:勾选主界面左上角的 清理已生成,然后重新执行翻译,避免使用旧缓存。
  6. 如果仍无效:请到 logs/ 文件夹下复制最近一次翻译报错的日志底部约 30 行内容,粘贴到此回复中,以便定位具体问题。

请查阅相关文档:

Deepseek的回复已经有很大问题了,术语表文件明明是videotrans/glossary.txt文件,不是什么term.txt,还有明明是=分割,不是Tab,翻译渠道也已经设为Deepseek。

抱歉,之前回复中给出的术语表路径和分隔符有误,感谢指正。

根据你描述的情况(v3.98 正常、v3.99 失效),且你的术语表文件为 videotrans/glossary.txt,分隔符使用 =,在 v3.99 中确实可能存在兼容问题。请按以下步骤确认:

  1. 文件位置:确保 glossary.txt 文件位于 videotrans/ 目录下(即 sp.exe 所在目录的 videotrans 子文件夹内)。
  2. 分隔符:v3.99 对术语表的解析可能要求严格使用制表符 (Tab) 而非等号。建议将你的术语表文件另存一份,将 = 替换为 Tab 试一下(可用文本编辑器的替换功能,输入 = 替换为 \t 的 Tab 字符)。
  3. 重新加载:打开软件后,进入菜单栏 工具/选项 → 翻译设置,在“翻译术语表”处手动点击选择按钮重新加载该文件(不要只靠路径文本框)。
  4. 清除缓存:勾选主界面左上角的“清理已生成”,再执行翻译。
  5. 渠道确认:AI 翻译渠道(如 DeepSeek)确实支持术语表,且需要勾选“发送完整字幕”。

如果以上操作仍无效,这可能是 v3.99 一个未修复的 Bug。建议你暂时回退到 v3.98 继续使用,或等待下一版本更新。
同时,你可以将 logs/ 文件夹中最新的日志文件底部约 30 行内容贴出,以便开发者定位问题。

请查阅相关文档:

之前有一个反复提及的是日志中的 translate_type=4,这个是它自动设定的,即使我明明用的Deepseek,仍然给出的记录是translate_type=4

根据你提供的日志信息,translate_type=4 是软件内部对翻译渠道的编号。虽然你选择了 DeepSeek,但可能由于缓存或配置未正确刷新,导致实际运行时使用了旧的渠道设置。在 v3.99 中,术语表解析逻辑可能有变更,以下为针对性排查步骤:

  1. 术语表格式严格采用 Tab 分隔
    即使你在 v3.98 中用 = 可以工作,v3.99 要求必须使用制表符 (Tab)。请将你的 glossary.txt 文件中的 = 全部替换为 Tab 后再试(可用文本编辑器替换功能,= 替换为按 Tab 键输入的空格跳格字符)。
  2. 清除所有缓存并强制重新加载配置

    • 勾选主界面左上角的 清理已生成
    • 手动删除软件根目录下的 tmp 文件夹和 logs 文件夹(日志不影响运行,清除便于观察新日志)。
    • 退出软件,重新启动后,在菜单栏 工具/选项 → 翻译设置 中,重新选择术语表文件(不要仅依赖路径文本,点“浏览”按钮重新加载)。
    • 翻译渠道 下拉框中,重新选择一次 DeepSeek(即使它已显示为 DeepSeek,也重新选一遍)。
  3. 确认翻译渠道实际生效
    日志中 translate_type=4 可能对应旧缓存。在翻译前确保没有勾选“使用缓存”或类似选项,且每次修改配置后都执行一次新的翻译任务(不要从中间步骤恢复)。
  4. 若仍无效
    这可能是 v3.99 的一个未修复缺陷(术语表兼容性问题)。建议你暂时使用 v3.98 完成需要术语表的翻译任务,或等待下一个版本更新。同时,你可以通过软件报错弹窗的“报告错误”按钮将日志自动提交至官方论坛,帮助开发者定位问题。

如果你愿意,也可以贴出 logs/ 文件夹中最新日志的底部 30 行 内容,我可以进一步分析 translate_type=4 的具体来源。

  1. 关闭软件,删除 logs 文件夹内所有文件
  2. 启动软件,选中左上角 清理已生成
  3. 确保发音语言和目标语言不同
  4. 翻译渠道选择 deepseek
  5. 选中发送完整字幕

然后执行,到开始配音时,打开 logs 目录下文件,复制所有内容粘贴到这里

确保没有手动修改videotrans/prompts下的提示词

我还真改过,我把3.98的srt目录下的deepseek.txt和text目录下的deepseek.txt覆盖到3.99下了,因为3.99的翻译太短,有些生硬,和这个有关吗?

你手动覆盖了提示词文件(videotrans/prompts 下的 deepseek.txt 等),这很可能是术语表在 v3.99 失效的直接原因。v3.99 对术语表的处理逻辑可能依赖特定的提示词模板,旧版提示词未包含术语表插入的占位符,导致术语表未被发送给 AI。

请按以下步骤恢复并测试:

  1. 恢复原始提示词文件
    删除或移出你手动粘贴的 videotrans/prompts 下的 deepseek.txttext 目录下的对应文件。然后重新下载一份 v3.99 的完整包(或只从完整包中提取 videotrans/prompts 目录覆盖),确保提示词为官方原版。
  2. 术语表文件格式确认
    将你的 glossary.txt 中的分隔符 = 替换为制表符(Tab),并确保文件编码为 UTF-8 without BOM
  3. 清除所有缓存

    • 勾选主界面左上角 清理已生成
    • 删除 logs 文件夹内容(已按要求做过)。
    • 删除 tmp 文件夹(如果有)。
  4. 重新执行翻译
    在翻译渠道中选择 deepseek,勾选 发送完整字幕,并确保术语表路径已重新选择(点浏览按钮加载)。
  5. 验证
    执行一个简短视频翻译,观察日志中是否出现术语表内容(关键词 glossaryterm)。如果仍然失效,请按开发者要求:

    • 删除 logs 内所有文件 → 启动软件 → 选中清理已生成 → 发音语言与目标语言不同 → 渠道 deepseek → 勾选发送完整字幕 → 开始执行 → 到开始配音时 → 复制 logs 目录下最新日志全部内容粘贴到这里。

根据你的描述,问题极大概率出在提示词被修改上。请先恢复原始提示词再测试。


Application started at 2026-04-25 20:53:48

First searching GPU...
[DEBUG] 返回缓存的编解码器 Windows-264: h264_nvenc
[DEBUG] 返回缓存的编解码器 Windows-265: hevc_nvenc
NVIDIA_GPU_NUMS=1
Found 1 GPUs, cost=3s
start workers...
process_max_gpu=1
multi_gpus=False
Concurrent task_nums=1
process_max=4
start 9 jobs
ended workers
[DEBUG] 最终配置信息:self.cfg=TaskCfgVTT(is_cuda=True, uuid='b0dda5f3c2', cache_folder='D:/win-pyvideotrans-v3.99-420/tmp/27512/b0dda5f3c2', target_dir='D:/_Output/_video_out/测试001-mp4', source_language='英语', source_language_code='en', source_sub='D:/_Output/_video_out/测试001-mp4/en.srt', source_wav='D:/win-pyvideotrans-v3.99-420/tmp/27512/b0dda5f3c2/en.wav', source_wav_output='D:/_Output/_video_out/测试001-mp4/en.m4a', target_language='简体中文', target_language_code='zh-cn', target_sub='D:/_Output/_video_out/测试001-mp4/zh-cn.srt', target_wav='D:/win-pyvideotrans-v3.99-420/tmp/27512/b0dda5f3c2/target.wav', target_wav_output='D:/_Output/_video_out/测试001-mp4/zh-cn.m4a', name=
......
y of creating this texture.\n\n5\n00:00:19,648 --> 00:00:26,416\n Then, we will make our base style in 3S Max, which we will throw into Zebras, and we will create a few high poly variations of it.\n`"}]
[WARNING] [LLM re-segments]重新断句结果:result="\n1\n00:00:00,032 --> 00:00:02,736\nHello everyone, my name is Emils Ligas.\n\n2\n00:00:03,184 --> 00:00:06,592\nI'm a 3D environment artist, and welcome to this new tutorial course.\n\n3\n00:00:07,200 --> 00:00:10,500\nIn this course, we will go over how to create a tileable hoof texture\n\n4\n00:00:10,500 --> 00:00:13,968\nusing 3ds Max, C Brush, and Substance Painter.\n\n5\n00:00:14,672 --> 00:00:19,056\nWe will first go over our reference and the best strategy of creating this texture.\n\n6\n00:00:19,648 --> 00:00:23,000\nThen, we will make our base style in 3ds Max,\n\n7\n00:00:23,000 --> 00:00:26,416\nwhich we will throw into ZBrush, and we will create a few high poly variations of it.\n"
[WARNING] [LLM re-segments]重新断句结果:result="\n1\n00:00:00,032 --> 00:00:02,736\nHello everyone, my name is Emils Ligas.\n\n2\n00:00:03,184 --> 00:00:06,592\nI'm a 3D environment artist, and welcome to this new tutorial course.\n\n3\n00:00:07,200 --> 00:00:10,500\nIn this course, we will go over how to create a tileable hoof texture\n\n4\n00:00:10,500 --> 00:00:13,968\nusing 3ds Max, C Brush, and Substance Painter.\n\n5\n00:00:14,672 --> 00:00:19,056\nWe will first go over our reference and the best strategy of creating this texture.\n\n6\n00:00:19,648 --> 00:00:23,000\nThen, we will make our base style in 3ds Max,\n\n7\n00:00:23,000 --> 00:00:26,416\nwhich we will throw into ZBrush, and we will create a few high poly variations of it.\n"
self.trans_thread=50,self.aisendsrt=True,self.translate_type=4
[DEBUG] [deepseek]响应:response=ChatCompletion(id='e687a005-2b02-439a-b125-6fa0b395022c', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='\n1\n00:00:00,032 --> 00:00:02,736\n大家好,我是Emils Ligas。\n\n2\n00:00:03,184 --> 00:00:06,592\n我是一名3D环境艺术家,欢迎来到这个新的教程课程。\n\n3\n00:00:07,200 --> 00:00:10,500\n在本课程中,我们将学习如何创建可平铺的蹄子纹理,\n\n4\n00:00:10,500 --> 00:00:13,968\n使用3ds Max、C Brush和Substance Painter。\n\n5\n00:00:14,672 --> 00:00:19,056\n我们首先会讲解参考素材以及创建该纹理的最佳策略。\n\n6\n00:00:19,648 --> 00:00:23,000\n然后,我们将在3ds Max中制作基础模型,\n\n7\n00:00:23,000 --> 00:00:26,416\n并将其导入ZBrush,创建几个高多边形变体。\n', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None))], created=1777121750, model='deepseek-v4-flash', object='chat.completion', service_tier=None, system_fingerprint='fp_058df29938_prod0820_fp8_kvcache_20260402', usage=CompletionUsage(completion_tokens=233, prompt_tokens=1107, total_tokens=1340, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=1024), prompt_cache_hit_tokens=1024, prompt_cache_miss_tokens=83))
[DEBUG] 按SRT格式翻译,原始字幕行数:7,整理为list[dict]后的行数:7
[DEBUG] [字幕翻译]渠道4,deepseek-chat:共耗时:4s

根据你提供的日志,有两个关键发现:

  1. 日志中明确显示术语表未被送入翻译:翻译请求的 prompt 中并没有出现术语表内容(例如 C Brush 没有被替换为 C 笔刷ZBrush 未保留),说明术语表虽然配置了路径,但在实际请求中被忽略。
  2. 你之前覆盖了提示词文件:虽然你已删除旧提示词,但日志中仍显示 LLM re-segments 使用了旧的重新断句逻辑(rephrase:2),且翻译 prompt 格式可能与官方 v3.99 不同,缺少术语表插入的占位符。

结论:术语表失效的根本原因是提示词文件被修改,而非术语表本身问题。请严格按照开发者要求恢复原始提示词后重试。

解决步骤

  1. 彻底恢复原始提示词

    • 从官网重新下载完整版 win-pyvideotrans-v3.99-420.7z
    • 解压后,不要覆盖整个软件,仅将压缩包内的 videotrans/prompts 文件夹复制到你当前软件目录,覆盖所有文件(务必确保每个文件都是官方原版)。
    • 同时删除你手动放置的任何自定义提示词(如 srt 目录下的 deepseek.txt 等)。
  2. 确认术语表文件格式

    • 术语表文件路径:videotrans/glossary.txt(软件根目录下的 videotrans/glossary.txt)。
    • 分隔符:必须使用 制表符 (Tab),不能使用等号。
    • 示例内容(每行一个:原文 Tab 译文):

      C Brush<Tab>C笔刷
      ZBrush<Tab>ZBrush
    • 文件编码:UTF-8 without BOM。
  3. 清理所有缓存并重新测试

    • 删除 logs 文件夹、tmp 文件夹。
    • 勾选主界面左上角“清理已生成”。
    • 重新启动软件,在菜单 工具/选项 → 翻译设置 中重新选择术语表文件(点“浏览”按钮加载,不要只依赖路径)。
    • 执行简短翻译,观察日志中是否出现术语表被发送的日志(如 glossary:...)。
  4. 如果仍无效:这可能是 v3.99 的已知 Bug(术语表兼容性问题),建议回退到 v3.98 使用,或等待下一个版本修复。同时将新的日志(包含术语表文件内容)通过软件报错弹窗的“报告错误”提交至官方论坛。

请先完成第一步恢复提示词,极大概率能解决。

可以了!我把之前覆盖的提示词文件,又改回了原始3.99版的提示词后,就能识别术语表了!大神太厉害了!

术语表失效的直接原因是提示词文件被旧版覆盖,导致v3.99无法插入术语表占位符。恢复官方提示词后即可正常工作。如后续遇到其他问题,随时反馈。建议保留一份原始提示词备份,以免再次误改。

但就像我之前说的,如果我更想要3.98的翻译方式,我是要选择性的去覆盖3.99版本的提示词吗,我需要注意什么吗,才能不伤到术语表这个功能,求指点

如果你想保留 v3.98 的翻译风格(如更长的句子、更口语化的表达等),同时不破坏 v3.99 的术语表功能,可以手动修改提示词文件,但必须保留术语表插入占位符。以下是安全操作指南:备份原始 v3.99 提示词:将 videotrans/prompts 文件夹整体复制一份到其他位置,以便随时恢复。找出术语表占位符:用文本编辑器(如 Notepad++、VS Code)打开 v3.99 原始提示词文件(例如 deepseek.txt),搜索 glossary、term、术语 等关键词。v3.99 的提示词中应该包含类似 {{glossary}} 或 {terms_table} 这样的占位符。记录下该占位符的完整上下文。修改 v3.98 的提示词文件:将你喜欢的 v3.98 提示词内容复制到一个新文件中。在适当位置(通常在发送完整字幕内容的段落末尾)插入从 v3.99 找到的术语表占位符。例如,如果 v3.99 中包含 “以下是术语表:{{glossary}}”,你就把这个占位符加到 v3.98 提示词的对应位置。确保提示词的结构不破坏术语表插入逻辑。不要覆盖整个 prompts 文件夹,仅替换你需要修改的单个文件(如 deepseek.txt)。测试:将修改后的文件放入 videotrans/prompts 对应目录(注意区分 srt 和 text 子目录)。执行一个简短视频翻译,检查日志中是否出现术语表内容。如果术语表失效,说明占位符位置或格式不对,需重新调整。注意事项:不要删除或改变 v3.99 中发送完整字幕时附带的逐行编号和时间轴格式(如 1\n00:00:00,032 --> 00:00:02,736\n原文),因为术语表依赖该格式才能被正确插入。个别 AI 渠道(如 DeepSeek)的提示词模板可能不同,建议只修改与术语表无关的文案部分(如风格、示例),保留技术性占位符不变。如果修改后仍然失败,请恢复官方提示词,并只在官方提示词的基础上微调翻译风格描述,而不是整体替换。请查阅相关文档:修改 AI翻译提示词prompt

我找到的字段好像是 {TRANSLATE_TEXT},还有应该修改的是srt下的deepseek.txt还是text下的deepseek.txt

你找到的 {TRANSLATE_TEXT}翻译文本的占位符,并非术语表的插入标记。术语表占位符在 v3.99 官方提示词中通常是 {glossary_table} 或类似名称,而不是 {TRANSLATE_TEXT}。请按以下步骤操作:

  1. 确认原始 v3.99 的术语表占位符
    用文本编辑器打开新增的 v3.99 原始提示词文件(srt/deepseek.txttext/deepseek.txt),搜索关键词 glossaryterms。如果找不到,则说明术语表是通过代码直接追加到最终请求中的,无需在提示词中加入占位符。
  2. 修改哪个文件?

    • 术语表在“发送完整字幕”时自动生效,因此主要修改 srt/ 目录下的 deepseek.txt
    • 如果你也使用逐行翻译模式,则同步修改 text/ 目录下的同名文件。
    • 两个文件都可修改,但务必都保留原始提示词中与术语表相关的任何标记或末尾追加逻辑
  3. 安全修改方法

    • 将你喜欢的 v3.98 提示词内容复制后,仅在文案风格部分做修改(如“请翻译得自然一些”),不要删除末尾可能存在的 {glossary_table}{terms} 标记。
    • 如果原始 v3.98 提示词中没有这些标记,可以保留 v3.99 提示词的最后一段(包含 glossary 的部分)追加到 v3.98 内容末尾。
  4. 测试
    修改后执行短翻译,观察日志中是否出现术语表内容(关键词 glossary 或术语自身)。如果失效,恢复 v3.99 原始提示词,并在其基础上仅调整文案描述,而非整体替换。

请查阅详细文档:
修改 AI翻译提示词prompt

我好像没找到关于任何与术语表有关的标记

v3.99 的术语表并非通过提示词中的特殊标记插入,而是由代码在发送请求前直接将术语表内容附加到提示词末尾。因此,你修改提示词文件时,只要不删除末尾可能被附加术语表内容的结构(例如不要删除提示词结束位置的空行或格式),术语表依然能正常工作。

安全操作方法:

  1. 仅修改翻译风格部分的文字,例如将“请逐行翻译”改为“请自然流畅地翻译,保持原文风格”,保留原提示词的所有格式、空行和结尾。
  2. 不要删除或改变 提示词中发送完整字幕时附带的示例格式(如行号、时间轴、原文的占位符),因为这些是术语表被正常附加的基础。
  3. 修改 srt/deepseek.txt 即可,如果你也使用逐行翻译模式,再同步修改 text/deepseek.txt

如果你确定找不到任何 glossary 相关词汇,则术语表功能完全由代码内部处理,提示词文件中没有显式标记。你只需要在 v3.99 官方提示词的基础上,仅替换或修改你认为生硬的文案部分,其他内容保持不变,即可保留术语表功能。

简单总结:保留官方提示词,只改动描述翻译风格的文字,不要动格式和结构。这样既能获得理想的翻译风格,也不会破坏术语表。

{batch_input}

是上面这段标记不要动吗

是的,{batch_input} 是发送完整字幕时用于插入原始字幕内容(行号、时间轴、原文)的占位符,请不要删除或改变它。术语表功能依赖于代码在发送完整字幕时自动追加到提示词末尾,如果你破坏了 {batch_input} 的结构或格式,可能导致发送完整字幕功能异常,术语表也可能被连带影响。安全修改方法:只改动描述翻译风格的部分(例如将“请准确翻译”改为“请翻译得自然流畅,保留原文风格”),保留所有 {batch_input}、时间轴示例、行号格式等原样不动。如此即可获得你想要的翻译风格,同时术语表正常工作。

{context_block} 这是什么

{context_block} 是用于插入完整原始字幕文本(即整个源语言字幕文件的内容)的占位符。当你在高级选项中勾选“AI翻译附带完整原字幕”时,该占位符会被替换为完整的原字幕内容作为上下文,以提高翻译质量和一致性。这个占位符也与术语表功能无关,但同样不建议删除或改变其格式,否则“发送完整原字幕”功能可能失效。安全做法:只修改描述翻译风格的文字,保留所有 {batch_input}、{context_block} 等占位符及周围结构不变。

在提示词文件里找 # ACTUAL TASK, 确保这个不修改,不删除,术语表会寻找这个字符,然后插入它上面

好的,非常感谢,问题解决了!

问题已解决。在提示词文件中保留 # ACTUAL TASK 标记,不要修改或删除,术语表会自动插入到该标记上方。现在你即可在 v3.99 中正常使用术语表功能,并结合 v3.98 的翻译风格。

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