Loading...
Loading...
Compare original and translation side by side
_Claude_{lang}_Claude_{lang}omnicaptions translate input.srt -l zh --bilingualinput_Gemini_zh.srtomnicaptions translate input.srt -l zh --bilingualinput_Gemini_zh.srt/omnicaptions:transcribe/omnicaptions:convert/omnicaptions:transcribe/omnicaptions:convertpip install omni-captions-skillspip install omni-captions-skillsGEMINI_API_KEY.env~/.config/omnicaptions/config.jsonPlease enter your Gemini API key (get from https://aistudio.google.com/apikey):-k <key>GEMINI_API_KEY.env~/.config/omnicaptions/config.json请输入您的Gemini API密钥(获取地址:https://aistudio.google.com/apikey):-k <密钥>| Approach | Problem | Result |
|---|---|---|
| Line-by-line | No context | Robotic, disconnected translations |
| Batch + Context | Sees surrounding lines | Natural, coherent dialogue |
| 翻译方式 | 问题 | 结果 |
|---|---|---|
| 逐行翻译 | 无上下文参考 | 翻译生硬、上下文脱节 |
| 批量+上下文 | 可查看前后行内容 | 翻译自然、对话连贯 |
┌─────────────────────────────────────────┐
│ Batch size: 30 lines │
│ Context: 5 lines before/after │
├─────────────────────────────────────────┤
│ [5 previous lines] → context │
│ [30 current lines] → translate │
│ [5 next lines] → preview │
└─────────────────────────────────────────┘┌─────────────────────────────────────────┐
│ 批量大小:30行 │
│ 上下文范围:前后各5行 │
├─────────────────────────────────────────┤
│ [前5行内容] → 上下文参考 │
│ [当前30行内容] → 待翻译内容 │
│ [后5行内容] → 前置预览 │
└─────────────────────────────────────────┘undefinedundefined
Output example:
```srt
1
00:00:01,000 --> 00:00:03,500
Welcome to the show.
欢迎来到节目。
2
00:00:03,500 --> 00:00:06,000
Thank you for having me.
感谢邀请我。
输出示例:
```srt
1
00:00:01,000 --> 00:00:03,500
Welcome to the show.
欢迎来到节目。
2
00:00:03,500 --> 00:00:06,000
Thank you for having me.
感谢邀请我。undefinedundefined
Glossary format:
```json
{
"API": "接口",
"Token": "令牌",
"Machine Learning": "机器学习"
}
术语表格式:
```json
{
"API": "接口",
"Token": "令牌",
"Machine Learning": "机器学习"
}from omnicaptions import GeminiCaption
gc = GeminiCaption()
gc._translation_prompt = """
You are translating captions for a medical documentary.
Use formal Chinese medical terminology.
Glossary: {glossary}
"""
gc.translate("input.srt", "output.srt", "zh")from omnicaptions import GeminiCaption
gc = GeminiCaption()
gc._translation_prompt = """
您正在为一部医疗纪录片翻译字幕。
请使用正式的中文医学术语。
术语表:{glossary}
"""
gc.translate("input.srt", "output.srt", "zh")| Model | Best For |
|---|---|
| Fast, everyday content |
| Complex, nuanced content |
| 模型 | 适用场景 |
|---|---|
| 日常内容,翻译速度快 |
| 复杂、需要精细处理的内容 |
undefinedundefined
| Option | Description |
|--------|-------------|
| `-k, --api-key` | Gemini API key (auto-prompted if missing) |
| `-o, --output` | Output file or directory (default: same dir as input) |
| `-l, --language` | Target language code (required) |
| `--bilingual` | Output both original and translation |
| `-m, --model` | Model name (default: gemini-3-flash-preview) |
| `-v, --verbose` | Verbose output |
| 参数 | 描述 |
|--------|-------------|
| `-k, --api-key` | Gemini API密钥(若未设置将自动提示) |
| `-o, --output` | 输出文件或目录(默认:与输入文件同一目录) |
| `-l, --language` | 目标语言代码(必填) |
| `--bilingual` | 输出原文+译文双语字幕 |
| `-m, --model` | 模型名称(默认:gemini-3-flash-preview) |
| `-v, --verbose` | 显示详细输出信息 || Language | Code |
|---|---|
| Chinese (Simplified) | |
| Chinese (Traditional) | |
| Japanese | |
| Korean | |
| English | |
| Spanish | |
| French | |
| German | |
| 语言 | 代码 |
|---|---|
| 中文(简体) | |
| 中文(繁体) | |
| 日语 | |
| 韩语 | |
| 英语 | |
| 西班牙语 | |
| 法语 | |
| 德语 | |
lattifai-captionslattifai-captions| Mistake | Fix |
|---|---|
| No API key | Use |
| Wrong language code | Use ISO codes: zh, ja, en, etc. |
| Lost formatting | ASS styles preserved; SRT basic only |
| Inconsistent terms | Use glossary for technical content |
| 问题 | 解决方法 |
|---|---|
| 无API密钥 | 使用 |
| 语言代码错误 | 使用ISO标准代码:zh、ja、en等 |
| 格式丢失 | ASS样式将被保留;SRT仅保留基础格式 |
| 术语翻译不一致 | 对专业内容使用术语表功能 |
| Skill | Use When |
|---|---|
| Need transcript first |
| Align timing before translation |
| Convert format after translation |
| Download captions to translate |
| 技能 | 适用场景 |
|---|---|
| 先需要生成转录文本时 |
| 翻译前需要对齐时间轴时 |
| 翻译后需要转换格式时 |
| 需要先下载字幕再翻译时 |
video.en.vtt → video.en_LaiCut.json → video.en_LaiCut.srt → video.en_LaiCut_Claude_zh.srt → video.en_LaiCut_Claude_zh_Color.ass| 翻译方式 | 后缀 | 示例 |
|---|---|---|
| Claude (默认) | | |
| Gemini API | | |
undefinedvideo.en.vtt → video.en_LaiCut.json → video.en_LaiCut.srt → video.en_LaiCut_Claude_zh.srt → video.en_LaiCut_Claude_zh_Color.ass| 翻译方式 | 后缀 | 示例 |
|---|---|---|
| Claude(默认) | | |
| Gemini API | | |
undefinedundefinedundefinedundefinedundefined
Why? JSON preserves word timing for karaoke, but translation only needs segment text. SRT is 10-20x smaller.
原因:JSON格式保留词级时间轴用于卡拉OK等场景,但翻译仅需段落文本内容。SRT文件体积更小,处理效率更高。| Feature | Claude (Default) | Gemini API |
|---|---|---|
| API Key | None needed | Required |
| Invocation | Skill (Read/Write) | CLI command |
| Output suffix | | |
| Best for | Most tasks | Large files, automation |
| 特性 | Claude(默认) | Gemini API |
|---|---|---|
| API密钥 | 无需 | 必填 |
| 调用方式 | 技能(读写操作) | CLI命令 |
| 输出后缀 | | |
| 最佳适用场景 | 大多数常规任务 | 大文件处理、自动化流程 |