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 & VideoIntermediate12820AI 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.