embed-subtitles

Burn subtitles onto videos using FFmpeg. Use for: hardcode subtitles, embed captions, video subtitling.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "embed-subtitles" with this command: npx skills add aviz85/claude-skills-library/aviz85-claude-skills-library-embed-subtitles

Embed Subtitles

Burn SRT subtitles into video files using FFmpeg.

Prerequisites

No SRT file? Use the transcribe skill first to generate subtitles from audio/video.

Need translation? After transcribing, read the SRT, translate each entry preserving timestamps, write new SRT file. No API needed.

Quick Start

cd ~/.claude/skills/embed-subtitles/scripts

# Burn SRT into video
npx ts-node embed-subtitles.ts -i video.mp4 -s subtitles.srt -o output.mp4

# Custom styling
npx ts-node embed-subtitles.ts -i video.mp4 -s subtitles.srt -o output.mp4 \
  --font-size 24 --position bottom --margin 40

# Add credit text overlay at end
npx ts-node embed-subtitles.ts -i video.mp4 -s subtitles.srt -o output.mp4 \
  --credit "Your Name" --credit-position top

Options

OptionShortDefaultDescription
--input-i(required)Input video file
--subtitles-s(required)SRT subtitle file
--output-o(required)Output video file
--font-size20Font size in pixels
--font-nameArialFont family name
--positionbottomSubtitle position: top, center, bottom
--margin25Margin from edge in pixels
--colorwhiteText color
--outline2Outline thickness
--shadow1Shadow depth
--creditCredit text to show at end
--credit-positiontopCredit position: top, bottom
--credit-duration2.5Credit display duration in seconds
--extract-frameExtract frame at specified second for verification

Position Values

  • top - Near top of video (good for credits, avoids bottom burned-in text)
  • center - Middle of video
  • bottom - Near bottom of video (traditional subtitle position)

Dependencies

  • FFmpeg (must be installed and in PATH)

RTL Auto-Detection & Fix (CRITICAL)

Before embedding ANY SRT file, Claude MUST check if the content is RTL.

Detection

Read the SRT file and check if the majority of text lines contain Hebrew/Arabic/Farsi characters:

  • Hebrew range: \u0590-\u05FF
  • Arabic range: \u0600-\u06FF
  • Farsi additional: \u0750-\u077F

If RTL content is detected, apply the fix BEFORE passing to FFmpeg.

RTL Fix

Wrap each text line (not index numbers, not timestamps) with Unicode directional marks:

python3 -c "
import re

with open('SRT_FILE_PATH', 'r', encoding='utf-8') as f:
    content = f.read()

lines = content.split('\n')
result = []
for line in lines:
    stripped = line.strip()
    if stripped and not re.match(r'^\d+$', stripped) and not re.match(r'\d{2}:\d{2}:\d{2}', stripped):
        line = '\u202B' + line + '\u202C'
    result.append(line)

with open('SRT_FILE_PATH', 'w', encoding='utf-8') as f:
    f.write('\n'.join(result))
"
  • U+202B (RLE - Right-to-Left Embedding): forces RTL paragraph direction
  • U+202C (PDF - Pop Directional Formatting): closes the embedding

This fixes: English words at line start, periods/commas on wrong side, mixed bidi text.

When to apply

Claude should analyze the SRT content intelligently:

  • If most text is Hebrew/Arabic/Farsi → apply RTL fix
  • If mixed but predominantly RTL → apply RTL fix
  • If LTR (English, Spanish, etc.) → skip
  • No flag needed from the user - detect automatically

Notes

  • For Arabic credits, use English text due to FFmpeg drawtext RTL limitations
  • Use --extract-frame to verify subtitle positioning before final render

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

html-to-pdf

No summary provided by upstream source.

Repository SourceNeeds Review
495-aviz85
General

presentation-architect

No summary provided by upstream source.

Repository SourceNeeds Review
186-aviz85
General

gh-pages-deploy

No summary provided by upstream source.

Repository SourceNeeds Review
146-aviz85
General

youtube-uploader

No summary provided by upstream source.

Repository SourceNeeds Review
106-aviz85