Skip to main content

srt-translator

字幕翻译助手。将 .srt 字幕文件翻译成指定语言,保持时间轴和格式不变。 当用户提到"翻译字幕"、"translate subtitle"、"srt翻译"、"字幕翻译"、"把字幕转成"时触发此 skill。 适用于视频后期制作、多语言内容发布、播客国际化等场景。

Ir para a instalação

Informações da origem

Repositório
yang0/srt-translator
Última atividade na origem
9 de maio de 2026 às 00:25
Idioma detectado do SKILL.md
chinês
Estrelas
0
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
2 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
srt-translator
description
字幕翻译助手。将 .srt 字幕文件翻译成指定语言,保持时间轴和格式不变。 当用户提到"翻译字幕"、"translate subtitle"、"srt翻译"、"字幕翻译"、"把字幕转成"时触发此 skill。 适用于视频后期制作、多语言内容发布、播客国际化等场景。
tags
["subtitle","translation","srt","i18n","video-production"]
# SRT 字幕翻译助手 将 SRT 字幕文件翻译成指定语言,保持时间轴、序号和格式不变。 ## 何时使用 - 用户要求翻译 .srt 文件 - 需要将字幕转换为其他语言 - 批量翻译多个字幕文件 - 翻译视频字幕用于多语言发布 ## 执行步骤 ### 1. 读取并解析 SRT 文件 使用 read 工具读取源文件,按以下格式解析: ``` 序号 时间轴 (HH:MM:SS,mmm --> HH:MM:SS,mmm) 字幕文本(可有多行) 空行(分隔条目) ``` 解析规则: - **序号行**:纯数字 - **时间轴行**:包含 `-->` 分隔起始和结束时间 - **文本行**:字幕内容,可能包含 `[说话人X]` 标记 - **空行**:表示一个字幕条目结束 ### 2. 提取待翻译文本 从每个字幕条目中提取文本内容: - 跳过序号行和时间轴行 - 提取文本行 - 保留说话人标记(如 `[说话人1]`),只翻译标记后的实际内容 ### 3. 术语提取与管理(关键步骤) 在翻译前先提取术语,确保全文术语一致: **步骤 3a:提取候选术语** 读取全部字幕文本,识别可能的专业术语、人名、产品名、技术名词等。 **步骤 3b:生成术语表** 向 LLM 请求术语翻译: ``` 请从以下字幕内容中提取专业术语、技术名词、人名、产品名等, 并给出{目标语言}的标准译法。格式:原文|译文 字幕内容: [全部字幕文本] 要求: 1. 技术术语优先采用业界通用译法 2. 品牌名/产品名可选择保留原文或音译 3. 缩写词首次出现时给出全称 4. 歧义项列出所有可能译法并标注推荐 5. **中文中已出现的英文术语**(如 AI、GPU、API 等):英文字幕中直接沿用,不重复翻译 ``` **步骤 3c:保存术语表** 将术语表保存到项目目录,文件名:`{srt文件名}_glossary_{语言代码}.md` 格式示例: ```markdown # 术语表:test1 → English | 原文 | 译文 | 备注 | |------|------|------| | 大模型 | AI model | | | 豆包 | Doubao | 产品名,保留原文 | | 播客 | podcast | | | AI | AI | 中文中已出现的英文术语,直接沿用 | ``` **步骤 3d:用户确认术语表(可选但推荐)** - 如果术语表中有不确定的翻译,展示给用户确认 - 用户可以修改、添加或删除术语条目 - 确认后的术语表用于后续翻译 ### 4. 翻译文本 使用 LLM 翻译提取的文本,注入术语表确保一致性: **高效翻译策略(大文件 >100条必须遵循)**: 1. **脚本预处理合句**:翻译前用脚本计算合并组,减少翻译条目数 ```bash # 基于同说话人+间隙<300ms+语义不完整自动合并 python merge_srt.py video_en.srt _merged_groups.txt ``` 合并后条目通常减少 40-60%,大幅降低翻译工作量。 2. **分批并行翻译**:将合并后的条目拆成 3-4 批,每批 40-60 条,并行启动子任务翻译 - 每批任务独立工作,互不依赖 - 翻译完成后用脚本合并为最终 SRT 3. **脚本做数字转换**:翻译时不逐条手工转换数字,翻译完成后用 merge_srt.py 的 `num_to_chinese()` 批量处理 4. **集中翻译,减少来回**:每批一次翻译完直接写入,不用反复 edit 追加 - ✅ 一批 50 条 → 一次 write 写入 - ❌ 一批 50 条 → 5 次 edit 追加 **翻译策略**: - 分批次翻译(每批 20-30 条,避免超出上下文长度) - 每次翻译时附带术语表,同时附带上一条和下一条的原文作为上下文 - 保持说话人标记不变 - 处理口语化表达(播客、访谈类) - 技术术语严格遵循术语表 - ⚠️ **口语化优先**:用中国网民的自然表达,不要直译 例:`extremely bullish` → `涨疯了`,不是 `极度看涨`;`reversed lower` → `反手就跌了` - ⚠️ **非术语英文不留**:AI/GPU/ETF/MACD 等业界通用缩写保留,但普通英文词("setup"/"anyway")必须翻译 - ⚠️ **字数控时**:根据字幕时间轴控制翻译字数,按中文正常语速约 4 字/秒计算 例:时间轴 3 秒 → 最多 12 字 | 5 秒 → 最多 20 字 | 8 秒 → 最多 32 字 超时必须精简,宁可拆分也不让 TTS 被迫加速 **提示词模板**: ``` 请将以下字幕翻译成{目标语言}。 【术语表】(必须严格遵循): {术语表内容} 【翻译要求】: 1. 保持 [说话人X] 标记不变 2. ⚠️ 口语化优先:用中国网民的日常表达,不要直译。反例:"极度看涨"→正例:"涨疯了" 3. 术语必须严格使用术语表中的译法 4. ⚠️ 字数控时:按中文语速 4 字/秒计算最大字数。时长3秒→最多12字,5秒→20字,超时精简 5. 同一概念在全文中翻译必须一致 6. ⚠️ 数字转文字:所有数字翻译成中文全文字形式。2%→百分之二,2026年→二零二六年,50,000→五万 7. ⚠️ 语义不截断:如果原文一句话被拆到多条字幕中,合并为一条完整语义 8. ⚠️ 同人不截断:同一说话人、间隙<300ms,合并为一条 9. ⚠️ 非术语英文不留:翻译结果中不能有非术语英文单词。金融术语(如 AI、GPU、ETF、MACD)保留, 但普通英文词(如 "setup"、"anyway"、"basically")必须翻译成中文 【字幕列表】: 1. [原文1] 2. [原文2] ... ``` ### 5. 重构 SRT 文件 将翻译后的文本替换回原位置: - 序号 → 不变 - 时间轴 → 不变 - 文本 → 翻译后的内容 - 空行 → 不变 ### 6. 配音用字幕后处理(关键步骤) 翻译完成后、输出前,对字幕进行**配音优化**处理。 **为什么要做这一步**:原字幕是给人看的,视觉上可以跨行理解。但配音是给 TTS 引擎听的,每条字幕会被独立克隆——如果一条字幕内容是半句话(如"...发现"),TTS 会用错误的语调收尾,导致配音不自然。 **步骤 6a:识别不完整条目** 遍历所有字幕条目,标记以下情况: - 文本末尾不是句末标点(。!?…)的条目 → 语义不完整 - 与下一条时间间隙 < 300ms 且文本可自然衔接 → 同人连续说话 - 文本中包含阿拉伯数字(0-9)→ 需要数字转文字 **步骤 6b:合并规则** | 条件 | 操作 | |------|------| | 上条不完整 + 下条可衔接 | 合并为一条,时间轴取上条开始→下条结束 | | 连续2条都不完整 | 继续向下合并,直到遇到句末标点(最多合并4条) | | 间隙 < 300ms + 同语义 | 合并,即使上条有句末标点(说话人未停顿) | **步骤 6c:数字转文字** 合并完成后,将所有阿拉伯数字替换为目标语言的全文字形式: | 英文 | 中文 | |------|------| | 2% | 百分之二 | | 5.5% | 百分之五点五 | | 2026 | 二零二六年(年份)/ 两千零二十六(数量) | | 50,000 | 五万 | | 1.5 | 一点五 | | #1 / No.1 | 第一 | | $100 | 一百美元 | | 3rd | 第三 | **步骤 6d:输出合并后的 SRT** - 重新编号(1, 2, 3... 连续) - 文件名:`{原文件名}_dub.srt`(如 `video_zh_dub.srt`) - 同时保留未合并的原版 SRT(给 subburn 烧字幕用) ### 步骤 7:输出文件 ### 步骤 7:输出文件 - 生成配音优化版 SRT 文件 - 文件名格式:`原文件名_{语言代码}_dub.srt`(如 `video_zh_dub.srt`) - 编码:UTF-8 with BOM - 行尾:保持 LF > ⚠️ 不输出原版字幕(未合句版),因为后续 align-video 会导致时间戳漂移。 > 烧字幕用的最终字幕在步骤11由 volc-srt 重新生成。 ## 语言代码 | 语言 | 代码 | |------|------| | 中文 | zh | | 英文 | en | | 日文 | ja | | 韩文 | ko | | 法文 | fr | | 德文 | de | | 西班牙文 | es | | 俄文 | ru | | 葡萄牙文 | pt | | 意大利文 | it | | 阿拉伯文 | ar | ## 说话人标记处理 **保留标记**: - 原始:`[说话人1] 欢迎收听` - 翻译:`[说话人1] Welcome to` **标记格式**: - 方括号格式:`[说话人X]`、`[Speaker X]` - 可根据源语言自动识别 ## 口语化翻译指南 ### 常见处理 | 中文原文 | 英文翻译建议 | |---------|------------| | 咱们 | let's / we | | 哈喽 | hello / hi | | 啊 / 呃 | uh / um(或省略) | | 来看一下 | let's take a look | | 聊一聊 | let's talk about | | 挺...的 | quite / pretty | ### 播客/访谈类 - 保留自然流畅的对话感 - 适当省略无意义的填充词 - 保持句子简短(适合字幕阅读) ## 术语管理指南 ### 为什么需要术语管理 长字幕文件(如播客、课程)中,同一术语可能出现数十次: - **无术语表**:第 3 条翻译为"大语言模型",第 50 条翻译为"大规模语言模型",第 120 条又变成"LLM"——前后不一致 - **有术语表**:所有出现统一译为"large language model (LLM)",专业且一致 ### 术语提取时机 **自动提取**:翻译前自动扫描全部字幕,生成术语表草案 **用户补充**:用户可以添加术语表中遗漏的条目 **后续复用**:同一项目的多个字幕文件可共享术语表 ### 术语表位置 默认保存到与源 SRT 文件同一目录: ``` test/ ├── test1.srt # 源文件 ├── test1_en.srt # 翻译后文件 └── test1_glossary_en.md # 术语表 ``` ## 质量检查清单 翻译完成后检查: - [ ] 时间轴格式正确(`HH:MM:SS,mmm --> HH:MM:SS,mmm`) - [ ] 序号连续无遗漏 - [ ] 空行分隔每个条目 - [ ] 说话人标记保留 - [ ] **术语一致性**:同一术语在全文中翻译一致 - [ ] 文本长度适中(单行不超过 40 字) - [ ] 编码正确(UTF-8) - [ ] 术语表已保存(如适用) ## 示例 ### 示例 1:单文件翻译(含术语管理) **输入**:test/test1.srt ``` 1 00:00:01,790 --> 00:00:03,950 [说话人1] 欢迎收听豆包 AI 播客节目。 ``` **执行过程**: 1. **读取字幕**:提取全部 8 条字幕文本 2. **提取术语**: - 豆包 → Doubao(产品名) - 播客 → podcast - 大模型 → AI model - AI → AI(中文中已出现的英文术语,直接沿用) 3. **生成术语表**:保存为 `test1_glossary_en.md` 4. **翻译字幕**:使用术语表统一翻译 5. **输出文件**:保存为 `test1_en.srt` **术语表**:test/test1_glossary_en.md ```markdown # 术语表:test1 → English | 原文 | 译文 | 备注 | |------|------|------| | 豆包 | Doubao | 字节跳动产品名,保留拼音 | | 播客 | podcast | | | 大模型 | large language model | 首次出现可写全称 | | 人工智能 | artificial intelligence (AI) | | | 技术突破 | breakthrough | | ``` **输出**:test/test1_en.srt ``` 1 00:00:01,790 --> 00:00:03,950 [Speaker 1] Welcome to the Doubao AI Podcast. ``` ### 示例 2:批量翻译 用户请求:"翻译 test 目录下所有 srt 文件到英文" 执行步骤: 1. 扫描目录下所有 .srt 文件 2. 逐个读取、翻译、保存 3. 输出为 `*_en.srt` ## 输出格式 完成翻译后向用户报告: ``` ✅ 翻译完成 📄 源文件: {原路径} 💾 输出文件: {新路径} 📖 术语表: {术语表路径}(如适用) 🎯 目标语言: {语言} 📊 翻译条目: {N} 条 📋 术语数量: {N} 个 ``` ## 注意事项 1. **备份原文件**:翻译前确认原文件已有备份 2. **检查编码**:确保输出为 UTF-8,避免乱码 3. **单行长度**:字幕文本建议每行不超过 40 个字符 4. **时间轴不变**:只翻译文本,绝不修改时间轴 5. **空行保留**:每个字幕条目之间必须有空行 6. **禁止使用 Python 脚本生成翻译输出**:🚨 绝对不要通过 bash + Python 脚本的方式将翻译内容写入 SRT 文件。原因: - Windows PowerShell 下 Python 字符串中的中文转义极其容易出错 - 会导致大量调试重试,浪费时间 - 正确做法:直接使用 `write` 或 `edit` 工具写入翻译后的 SRT 文件 - 即使是几百条字幕,也直接逐批用 `write` 工具输出,不要绕道 Python ## 大文件翻译指南 当字幕条目超过 100 条时,采用以下策略: 1. **分批写入,而非逐条**:每批 30-50 条,用 `write` 工具追加到目标文件 2. **先写术语表,再翻译正文**:术语表写完后立即用 `write` 保存,不要等全部翻译完 3. **用 `edit` 工具追加**:后续批次用 `edit` 在文件末尾追加新内容 4. **禁止的操作**: - ❌ `bash` + Python 脚本生成翻译 → PowerShell 转义地狱 - ❌ 一次性翻译 200+ 条而不分批写入 → 丢失进度风险 - ❌ 用 `bash` 的 `echo` 写中文内容 → 编码乱码 --- **版本**: v1.0 **最后更新**: 2026-05-03 **维护者**: Claude Code
Ver no GitHub