Back to skills
extension
Category: Content & MediaNo API key required

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.

personAuthor: jakexiaohubgithub

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:

# 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:

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:

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

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