Agent skill · Media & Video

wjs-burning-subtitles

Use when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track. Also handles the final composite step for the localization pipeline — burn subs, mix a dub track, and keep the original audio as a low-volume bed, all in ONE ffmpeg encode (no cascade). Verifies libass availability and auto-downloads a static evermeet ffmpeg build when Homebrew's stripped binary lacks it. Triggers — "烧字幕", "硬字幕", "burn subtitles", "burn-in subs", "embed subtitle", "soft mux SRT", "把字幕烧进视频", "做最终合成".

jianshuogithub.com/jianshuoGitHub ↗
claude-codecodexships scriptsMIT
Install
npx skills add jianshuo/claude-skills --skill wjs-burning-subtitles --agent claude-code

Same command for any agent — swap --agent for codex, cursor, copilot.

Facts
Files in the skill folder: 2
SKILL.md size: 12 KB
Bundled scripts: yes
Path: wjs-burning-subtitles/SKILL.md
Open the folder on GitHub →
Where it comes from
Stars: 112
Language: Python

Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.

From the SKILL.md

# wjs-burning-subtitles Video + SRT → video with subtitles. Also the final-encode stage for the localization pipeline: takes a video, an optional dub track from `/wjs-dubbing-video`, and an optional SRT to burn, and produces the upload-ready MP4 in **one** ffmpeg pass. No cascade of decodes/re-encodes. ## When to use - User has an SRT and wants it always-visible on the video (burn-in for 微信视频号 / 抖音 / WeChat — players that won't honor embedded subtitle tracks). - User wants a togglable subtitle track (soft-mux) for QuickTime / VLC / IINA / mobile players that support `mov_text`. - Final composite after `/wjs-dubbing-video`: burn target-language subs + mix dub over original-as-bed in one encode. ## When NOT to use - No SRT yet → run `/wjs-transcribing-audio` then `/wjs-translating-subtitles` first. - HTML/CSS captions (kinetic, per-word highlights, custom fonts) on a clip composed in HyperFrames → use `/wjs-overlaying-video` instead. Don't mix libass burn-in with HyperFrames captions on the same output. - The "subtitles" are actually motion graphics (animated callouts, lower-thirds with logos, kinetic typography) → that's `/wjs-overlaying-video`, not this skill. ## The 3 modes of `re

What's inside
Steps it walks through
  1. When to use
  2. When NOT to use
  3. The 3 modes of render.py
  4. Soft-mux (togglable subtitle track)
  5. Hardcoded burn-in (always visible, libass)
  6. Verify libass is available BEFORE promising burn-in
  7. Fastest fix on macOS — drop in a static build, no system changes
  8. Burn-in render with style overrides
  9. Fontsize calibration — critical
  10. Style cheatsheet
  11. SRT line-length discipline for burn-in
  12. Audio mixing — keep the original as a low-volume bed
  13. Combining dub + burn-in + bed (the full job)
  14. Running render.py
Ships with 1 file
  • scripts/render.py
Commands it runs
ffmpeg -i input.mp4 -i input.zh-CN.srt \
output.mp4
ffmpeg -filters 2>&1 | grep -E "subtitles|^.. ass "
curl -fsSL -o /tmp/ff.zip https://evermeet.cx/ffmpeg/getrelease/zip
unzip -o /tmp/ff.zip -d /tmp/ff_bin >/dev/null
then Read /tmp/frame.png to verify the longest-line cue fits
Subtitles only (burn):
python3 ~/.claude/skills/wjs-burning-subtitles/scripts/render.py \
Dub only (replace audio, no subs):
Full localized cut (burn + dub + original bed):
More from claude-skills
All skills →
About this skill
What does the wjs-burning-subtitles skill do?

Use when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track. Also handles the final composite step for the localization pipeline — burn subs, mix a dub track, and keep the original audio as a low-volume bed, all in ONE ffmpeg encode (no cascade). Verifies libass availability and auto-downloads a static evermeet ffmpeg build when Homebrew's stripped binary lacks it. Triggers — "烧字幕", "硬字幕", "burn subtitles", "burn-in subs", "embed subtitle", "soft mux SRT", "把字幕烧进视频", "做最终合成".

How do I install it?

Run `npx skills add jianshuo/claude-skills --skill wjs-burning-subtitles --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.

Where does this skill come from?

From jianshuo/claude-skills, a repository with 112 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.

Is a popular skill a good skill?

Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.

Keep going