Claude Skill MartBrowse skillsQuick linesLearn by videoTerminal guideWhat is a Skill?
← Back to list

Burn Subtitles & Final Composite (wjs-burning-subtitles)

Takes a video plus an SRT and either burns the subtitles into the pixels with libass or soft-muxes a togglable track, and can mix a dub over the original audio in a single ffmpeg pass.

Image & VideoIntermediate★ 131⑂ 23AI score 9/10Last updated: Aug 20, 2026

What it does

  • Hardcoded burn-in: renders subs into the pixels via libass subtitles filter — required for WeChat Channels / Douyin players that ignore embedded subtitle tracks.
  • Soft-mux: adds a togglable mov_text track with stream-copy (no re-encode), ideal for QuickTime/VLC/YouTube.
  • Full localized cut: burns target-language subs, mixes a dub track at 1.0, and keeps the original audio as a 0.15–0.25 "bed" for that professional-translation feel — all in ONE ffmpeg encode, no cascade.
  • Environment guardrails: verifies libass with ffmpeg -filters | grep subtitles and auto-downloads an evermeet static build when Homebrew's ffmpeg is stripped.
  • Font calibration discipline: start at Fontsize=12, extract a frame at the longest cue, confirm with the user before committing to a full render.

Who it's for

  • Creators shipping subtitled video to multiple platforms with different subtitle support.
  • Anyone building a localization pipeline (transcribe → translate → dub → final composite).
  • Users tired of force_style comma-escaping errors and overflowing CJK text.

Example uses

  1. "Burn this Chinese SRT into my vertical clip" → libass check → 30s preview + frame inspection → approved full render to *_burned.mp4.
  2. "Just attach the subtitle track, don't re-encode" → instant stream-copy *_softsub.mp4 with a mov_text track.
  3. "Combine the dub with the original and make the upload cut" → one pass: burned subs + dub at 1.0 + original bed at 0.18 → *_final.mp4.

· · · Install guide · · ·

Try it now, no install

Paste this into Claude to use the skill without installing anything.

Read the instructions in this file and follow them to help me:
https://raw.githubusercontent.com/jianshuo/claude-skills/HEAD/wjs-burning-subtitles/SKILL.md

What I want: (describe your task here)

If Claude can't open the link, open it yourself and paste the contents instead.

↓ If it works for you, download the ZIP below and install it. Then it runs on its own — no pasting each time.

Install in the Claude app (no terminal)
  1. Download the ZIP with the button below.
  2. In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
  3. Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
↓ Download ZIP
Install in Claude Code

Let Claude do it — paste this into Claude Code

Install the skill I found on Claude Skill Mart.
Copy the wjs-burning-subtitles folder from the GitHub repo jianshuo/claude-skills into my ~/.claude/skills/wjs-burning-subtitles/.
When it's done, tell me in one line what this skill can do.

Install with a command instead

git clone https://github.com/jianshuo/claude-skills.git /tmp/claude-skills && mkdir -p ~/.claude/skills && cp -r /tmp/claude-skills/wjs-burning-subtitles ~/.claude/skills/

⚠ This is a third-party skill. Check the source repository before installing.

  1. Open a terminal and confirm prerequisites: ffmpeg -version and python3 --version.
  2. Clone the repo: git clone https://github.com/jianshuo/claude-skills.git /tmp/claude-skills
  3. Create the skills directory: mkdir -p ~/.claude/skills
  4. Copy the skill in: cp -r /tmp/claude-skills/wjs-burning-subtitles ~/.claude/skills/
  5. Sanity-check the bundled script: python3 ~/.claude/skills/wjs-burning-subtitles/scripts/render.py --help
  6. Verify libass support: ffmpeg -filters | grep subtitles (empty output means burn-in needs a libass build; on macOS the script auto-downloads one, on Windows/Linux install an ffmpeg with libass yourself).
  7. Restart Claude Code and ask something like "burn these subtitles into my video" to trigger the skill.