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★ 128⑂ 20AI score 9/10Last updated: Aug 20, 2026
What it does
- Hardcoded burn-in: renders subs into the pixels via libass
subtitlesfilter — required for WeChat Channels / Douyin players that ignore embedded subtitle tracks. - Soft-mux: adds a togglable
mov_texttrack 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 subtitlesand 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_stylecomma-escaping errors and overflowing CJK text.
Example uses
- "Burn this Chinese SRT into my vertical clip" → libass check → 30s preview + frame inspection → approved full render to
*_burned.mp4. - "Just attach the subtitle track, don't re-encode" → instant stream-copy
*_softsub.mp4with amov_texttrack. - "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)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the 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.
- Open a terminal and confirm prerequisites:
ffmpeg -versionandpython3 --version. - Clone the repo:
git clone https://github.com/jianshuo/claude-skills.git /tmp/claude-skills - Create the skills directory:
mkdir -p ~/.claude/skills - Copy the skill in:
cp -r /tmp/claude-skills/wjs-burning-subtitles ~/.claude/skills/ - Sanity-check the bundled script:
python3 ~/.claude/skills/wjs-burning-subtitles/scripts/render.py --help - 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). - Restart Claude Code and ask something like "burn these subtitles into my video" to trigger the skill.
View source on GitHub ↗License: MIT