# Translate Subtitles

用户要把视频的转写或字幕翻译成另一种语言、做双语字幕，或更新原文改动后过期的译文时用：逐句翻译写成视频里的译文文档，再放到画面上、按需导出。有媒体时「翻译」默认指字幕翻译。不用...

- Repository: https://github.com/JimLiu/baocut (1645 stars)
- Category: Engineering
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add JimLiu/baocut --skill translate-subtitles -g -a claude-code -y`
Codex: `npx skills add JimLiu/baocut --skill translate-subtitles -g -a codex -y`
Cursor: `npx skills add JimLiu/baocut --skill translate-subtitles -g -a cursor -y`
Gemini CLI: `npx skills add JimLiu/baocut --skill translate-subtitles -g -a gemini-cli -y`

## Description

用户要把视频的转写或字幕翻译成另一种语言、做双语字幕，或更新原文改动后过期的译文时用：逐句翻译写成视频里的译文文档，再放到画面上、按需导出。有媒体时「翻译」默认指字幕翻译。不用于翻译与视频无关的文章、文档或一段纯文本；对话里没有视频或字幕、又看不出指的是什么时先问一次。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 翻译字幕

观众是在说话人还在说的时候读字幕的：一行很窄，停留两三秒，读完就换下一行。所以成品是字幕，不是散文。你写每句的整句译文；放到画面上时（captions_create）BaoCut 按句把译文对上原文那一句的时间，再按宽度切成字幕条。句子的边界要和原文一一对应，句内的语序要让切开的每一段大致对得上那时说的话，字要少到两三秒读得完。

最容易做坏的样子：译得像一篇好文章。把两句并成一句、把一句拆成两句、为了通顺把后半句挪到前面、把原文的口语写成书面语、每句都比原文长一截。这样的译文单独读很好，放到画面上就对不上声音，观众读到一半字幕已经换了。

用户明确只要翻译一个字幕文件、没有视频时也可以用，做法见最后的「用户明确只要字幕文件时」一节。

## 1. 先确认

- **目标语言**：用 BCP 47 标签（如 `zh-Hans`、`en`、`ja`）。用户没说要译成什么时问一次。原文语言取转写文档的 language。
- **哪份转写**：videos_inspect 列出的文档里 kind 为 speech 的那份；有几份时按来源素材（sourceAssetId）对上用户说的那段，对不上就问。
- **转写润色过没有**：没有润色过（错字、术语、标点都还是识别出来的样子）时，先按 `polish-transcript` 的做法润色再翻译。润色会改分句与句子指纹：先润色、写回，再读句子来翻译；已有译文的视频润色之后，多数句子要重译。先翻译再润色等于做两遍。
- **已有译文**：已经有同一目标语言、sourceDocumentId 指向这份转写的译文（kind translation）时，在它上面改（同一个 documentId），不新建第二份；用户明确要另起一份时才新建。

## 2. 通读，定下译法

用 documents_read 读转写，translateTo 给目标语言：BaoCut 据此在视频卡与字幕面板显示「正在翻译」，写入这门语言的译文时结束。它带的 translationBasis 给出切好的句子。动笔前先通读全文，定下这几件事，翻译时全文照它们。它们不进成品：

- **内容概要**：一两句话说清这个视频讲什么。听岔的词、含糊的指代，都要靠它判断。
- **术语**：认出原文里的术语（转写可能把它们拼错，留意同一个术语的几种错写），每个术语全文只用一种译法。
- **专名**：人名、产品名、机构名保留并全文一致。
- **用户的术语表**：用户点名的译法是硬性要求，逐字照用：不变形、不改拼写、不增减空格、不翻译、不省略；用户只说「最好这样译」的是偏好，保持一致，但可以随上下文让步。每个术语只有一种译法。
- **用户的要求**：语气、风格等明确要求的优先级最高，但不违反用户点名的术语译法，也不违反下面的成品规则。

## 3. 逐句翻译的规则

- 每句翻译一次：不合并、不拆分、不漏、不调序，不把一句挪到别的段落。前后句只是理解上下文用的。
- 先理解整句，再按目标语言自己地道的语序，忠实而自然地翻译。之后的对时会把自然的整句映射到时间上；不要为了跟着原文的分句顺序写出生硬的句子。
- 同样自然的几种译法里，选分句顺序**跟着原文**的那一种（同声传译的做法）：字幕行按原文的语音对时，展开顺序与原文一致的译文，切出来的每一行和正在听到的意思对得上。只在目标语言确实需要时才调序。
- 长度是正确性的一部分，不是风格问题：意思一样、字更少的译文是更好的译文。先删口头填充、多余的连接词、重复的主语和铺垫；两种同样忠实的说法选短的。
- 长度永远排在意思后面。不为了变短删掉必要的意思、否定、限定、数字、名字、语气或语体：这句确实需要那么长，就用那么长。
- 保留每一个明确的因果、转折、条件与结果关系（因为、但是、如果、所以这一类）以及它们管着的内容，哪怕因此变长。切行可以拆开一句完整的译文，但补不回漏掉的分句。
- 每句只给**一种**译法：不写斜杠分隔或括号里的备选。斜杠只在逐字照抄的术语里出现（例如 `/compact` 这样的命令，不论它来自原文还是用户的术语表）。
- 术语全文一致。
- 遵守目标语言自己的空格习惯：中文、日文的字与字之间不加空格；韩文按词分写，助词、量词贴着前面的词或数字。
- 句子里不加换行或分段标记；只输出译文本身，不带注释、引号或原文。

对比一下（英译中，只是示意）：

原文：`So what we ended up doing, and this took us a while to figure out, was to let the model review first.`

The rest: https://github.com/JimLiu/baocut/blob/HEAD/skills/baocut/built-in-skills/translate-subtitles/SKILL.md
