translate-video
Translate video subtitles to any language with native-quality refinement. Full pipeline: transcribe → translate → refine → embed RTL-safe subtitles. Use for: translate video, תרגם סרטון, video translation, foreign subtitles, Hebrew subtitles, translated captions.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install aviz85-claude-skills-library-translate-video
Repository
Skill path: plugins/translate-video/skills/translate-video
Translate video subtitles to any language with native-quality refinement. Full pipeline: transcribe → translate → refine → embed RTL-safe subtitles. Use for: translate video, תרגם סרטון, video translation, foreign subtitles, Hebrew subtitles, translated captions.
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Full Stack.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: aviz85.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install translate-video into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/aviz85/claude-skills-library before adding translate-video to shared team environments
- Use translate-video for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: translate-video
description: "Translate video subtitles to any language with native-quality refinement. Full pipeline: transcribe → translate → refine → embed RTL-safe subtitles. Use for: translate video, תרגם סרטון, video translation, foreign subtitles, Hebrew subtitles, translated captions."
argument-hint: "[video-path] [target-language]"
---
# Translate Video
End-to-end video translation pipeline. Takes a video, transcribes it, translates to target language with native-speaker refinement, and burns subtitles onto the video.
## Usage
```
/translate-video /path/to/video.mp4 he
/translate-video /path/to/video.mp4 ar
/translate-video /path/to/video.mp4 es
```
**Arguments:**
- `$1` - Path to video file (required)
- `$2` - Target language code (default: `he`). Codes: he, ar, es, fr, de, ru, zh, ja, etc.
## Pipeline
### Step 1: Transcribe (via `/transcribe` skill)
Extract audio if video is too large (>25MB audio), then transcribe:
```bash
# Extract audio if needed (reduces upload size)
ffmpeg -i "$VIDEO" -vn -acodec libmp3lame -ab 128k "$AUDIO_PATH" -y
# Transcribe using the transcribe skill's script
cd ~/.claude/skills/transcribe/scripts && [ -d node_modules ] || npm install --silent
npx ts-node transcribe.ts -i "$INPUT" -o "$SRT_PATH"
```
This generates:
- `{basename}.srt` - Raw SRT file
- `{basename}.md` - Readable text
### Step 2: Translate
Read the `.md` file to understand full context, then translate the `.srt` file.
**Translation rules:**
- Translate ALL subtitle text entries, preserving SRT index numbers and timestamps exactly
- Do NOT translate proper nouns (product names, people's names, brand names)
- Keep technical terms that are commonly used untranslated in the target language (API, CLI, SaaS, etc.)
- Adapt idioms and expressions to natural equivalents in the target language
- Match the speaker's register (casual/formal) in the translation
### Step 3: Semantic Refinement
The raw transcription chunks by time, not meaning. Regroup for the target language:
1. **Read all translated text** as continuous prose
2. **Identify natural sentence/clause boundaries** in the target language
3. **Regroup words** into semantically coherent subtitle entries (max 2 lines per entry, ~40 chars per line)
4. **Adjust timestamps**: each entry starts at first word's original time, ends at last word's time
5. **Merge fragmented entries** - aim for 150-250 entries for a ~15min video (vs 500-600 raw)
6. **Native speaker test** - read each subtitle aloud. If it sounds awkward, rephrase
**Quality checklist:**
- [ ] No sentence split mid-clause
- [ ] No orphaned words (single word carrying over from previous thought)
- [ ] Punctuation at natural break points
- [ ] Reading pace is comfortable (not too much text per subtitle)
- [ ] Sounds like a native speaker wrote it, not a translation
### Step 4: Embed Subtitles (via `/embed-subtitles` skill)
**RTL is handled automatically** by the `embed-subtitles` skill - it detects RTL content and applies Unicode directional marks before embedding. No need to handle RTL here.
Burn the translated SRT onto the video:
```bash
cd ~/.claude/skills/embed-subtitles/scripts
npx ts-node embed-subtitles.ts \
-i "$VIDEO" \
-s "$TRANSLATED_SRT" \
-o "$OUTPUT" \
--font-size 24 --margin 30
```
Or directly with FFmpeg:
```bash
ffmpeg -i "$VIDEO" \
-vf "subtitles='$TRANSLATED_SRT':force_style='FontName=Arial,FontSize=24,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,Outline=2,Shadow=1,Alignment=2,MarginV=30'" \
-c:v libx264 -preset fast -crf 23 -c:a copy \
"$OUTPUT" -y
```
### Step 5: Open Result
```bash
open "$OUTPUT" # macOS
```
## Output Files
All files saved next to the original video:
| File | Description |
|------|-------------|
| `{name}.srt` | Original language SRT |
| `{name}.md` | Original readable transcript |
| `{name}_{lang}.srt` | Translated + refined SRT (with RTL marks if applicable) |
| `{name}_{lang}_subtitled.mp4` | Final video with burned-in subtitles |
## Language Codes
| Code | Language | RTL? |
|------|----------|------|
| `he` | Hebrew | Yes |
| `ar` | Arabic | Yes |
| `fa` | Farsi | Yes |
| `en` | English | No |
| `es` | Spanish | No |
| `fr` | French | No |
| `de` | German | No |
| `ru` | Russian | No |
| `zh` | Chinese | No |
| `ja` | Japanese | No |
| `pt` | Portuguese | No |
| `it` | Italian | No |
## Examples
**Hebrew translation (most common use):**
```
/translate-video ~/Desktop/tutorial.mp4 he
```
Produces: `tutorial_he.srt` + `tutorial_he_subtitled.mp4`
**Spanish translation:**
```
/translate-video ~/Desktop/talk.mp4 es
```
**Default (Hebrew):**
```
/translate-video ~/Desktop/video.mp4
```