caption-burn
Use when BURNING captions / subtitles / karaoke INTO a video as hardcoded pixels (hardsub) via libass through ffmpeg, OR soft-muxing them as a selectable, removable subtitle track. Covers ASS document generation sized to the export canvas, libass styling (font / size / colour / outline / box), the OpusClip word-by-word KARAOKE preset (per-word alternating yellow/green + scale-pop), hook-title / hook-card overlays, the CaptionOverride tuning patch, safe-area placement for 9:16, and the Netflix CPS/CPL/min-gap polish pass. Burn = lossy re-encode, permanent, styling survives anywhere; soft-mux = lossless stream-copy, toggleable, but loses ASS styling in MP4 (mov_text). NOT for moving/animated watermark removal (use video-watermark-removal), NOT for transcription/cue generation (this consumes an existing cue list), NOT for repositioning an already-burned track (burned pixels are permanent — re-burn from source). Source of truth: media_studio/features/caption.py, caption_karaoke.py, caption_override.py, caption_polish.py, tracks.py.
- License 许可
- MIT
- 最近更新
- 2026-11-02
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- caption-burn
- description
- Use when BURNING captions / subtitles / karaoke INTO a video as hardcoded pixels (hardsub) via libass through ffmpeg, OR soft-muxing them as a selectable, removable subtitle track. Covers ASS document generation sized to the export canvas, libass styling (font / size / colour / outline / box), the OpusClip word-by-word KARAOKE preset (per-word alternating yellow/green + scale-pop), hook-title / hook-card overlays, the CaptionOverride tuning patch, safe-area placement for 9:16, and the Netflix CPS/CPL/min-gap polish pass. Burn = lossy re-encode, permanent, styling survives anywhere; soft-mux = lossless stream-copy, toggleable, but loses ASS styling in MP4 (mov_text). NOT for moving/animated watermark removal (use video-watermark-removal), NOT for transcription/cue generation (this consumes an existing cue list), NOT for repositioning an already-burned track (burned pixels are permanent — re-burn from source). Source of truth: media_studio/features/caption.py, caption_karaoke.py, caption_override.py, caption_polish.py, tracks.py.
03 SKILL.md 正文
Caption Burn (hardsub) & Soft-mux — libass / ffmpeg
Render an existing cue list onto a video, either burned in (hardcoded pixels, permanent, re-encode) or soft-muxed (a selectable, removable subtitle stream, stream-copy). This is the libass/ASS path; the styled/karaoke output path is libass burn (mov_text cannot carry the styling).
Source modules read (cite these, do not invent commands):
media_studio/features/caption.py—CaptionEngine,build_ass, escaping,build_burn_argv/build_softmux_argv, hook title/card, karaoke routing.media_studio/features/caption_karaoke.py— OpusClip word-by-word karaoke ASS preset.media_studio/features/caption_override.py—CaptionOverride->ResolvedCaptionStyle, the ASS colour byte-swap.media_studio/features/caption_polish.py— Netflix CPS/CPL/min-gap + punct/casing/emphasis/profanity polish.media_studio/features/tracks.py—tracks.burn/soft_mux/stripRPC + the simpler V1 ASS builder.media_studio/ffmpeg.py— the sharedrun()(argv-only, stderr-drain) andffmpeg_path().
When to use / when NOT
- USE for: painting transcript cues into a clip (standard captions, styled captions, OpusClip karaoke), adding a hook-title/hook-card headline, or muxing a removable subtitle track.
- DO NOT use for: removing a logo/watermark (
video-watermark-removal); generating the cues themselves (this skill consumes{index,start,end,text}cues already produced upstream); moving a caption that is already burned in (pixels are baked — change the position/style and re-burn from the original source); soft-muxing styled ASS into an MP4 and expecting the styling to survive (MP4 only carriesmov_text, which drops ASS overrides — burn instead).
Burn vs soft-mux — the tradeoff (decide first)
Recipe (the real flow, from CaptionEngine.render)
Exact ffmpeg argv — BURN (caption.build_burn_argv)
Exact ffmpeg argv — SOFT-MUX (caption.build_softmux_argv)
STRIP a soft sub (tracks.build_strip_argv)
ASS document structure (build_ass)
libass styling fields you actually touch (CaptionOverride -> ResolvedCaptionStyle)
ASS colour format — the silent-wrong-colour trap (hex_to_ass_color)
Karaoke preset (caption_karaoke.build_karaoke_ass, style id opusclip-karaoke)
Caption polish (caption_polish.polish_cues) — run BEFORE building the ASS
Pitfalls that actually bite
GPU / model notes
04 同仓库更多 Skills
clarify-requirements
Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.
openmm-md
Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein / protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.
visual-review
Take screenshots of web pages and UI using Playwright for visual review and iteration
status
Diagnostic status report — shows metaswarm installation state, project setup, and potential issues
start
Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work
setup
Interactive project setup — detects your project, configures metaswarm, writes project-local files