subtitle-burner
subtitle-burner embeds SRT subtitles directly into an MP4 file using ffmpeg's libass renderer, re-encoding the video stream while preserving audio. Use this as a final subtitling step when you need hardcoded captions with CJK language support through its built-in font fallback chain (Microsoft YaHei, SimHei, Arial Unicode MS, Arial) and customizable styling via configurable font size, margins, and x264 encoding parameters.
git clone --depth 1 https://github.com/opensquilla/opensquilla /tmp/subtitle-burner && cp -r /tmp/subtitle-burner/src/opensquilla/skills/bundled/subtitle-burner ~/.claude/skills/subtitle-burnerSKILL.md
# subtitle-burner Burns an SRT subtitle stream into an MP4. The video is re-encoded (H.264 + faststart), the audio is copied untouched. libass renders the text per ASS-style override flags, so Chinese / Japanese / Korean characters survive when the host has any of the listed fallback fonts installed (on Windows, Microsoft YaHei and SimHei ship with the OS). ## Inputs (`with:`) | key | required | default | notes | |---|---|---|---| | `input` | yes | — | Source MP4 path. | | `subtitles` | yes | — | `.srt` path (UTF-8). | | `output` | yes | — | Output MP4 path. Parent dir created if missing. | | `font` | no | `Microsoft YaHei,SimHei,Arial Unicode MS,Arial` | libass `FontName` fallback chain. First wins. | | `font_size` | no | `42` | Font size. When `play_res=auto` this is in source-video pixels. | | `margin_v` | no | `80` | Bottom margin in source-video pixels (because `play_res=auto` sets PlayRes to the input W×H). | | `play_res` | no | `auto` | `auto` probes the input MP4 for resolution; or pass `WxH` like `720x1280`. Setting this makes FontSize/MarginV act in source pixels rather than libass's 384×288 default. | | `crf` | no | `20` | x264 CRF (0-51, lower = better quality). | | `preset` | no | `medium` | x264 preset. | ## Output Prints the absolute path of the subtitled MP4 on stdout. Non-zero exit on any ffmpeg failure; stderr tails the last 2.5 KB of the encoder log for diagnosis. ## Dependencies - ffmpeg ≥ 5.0 (libass support is standard in any modern build). - Python 3.8+. The script auto-locates ffmpeg via PATH; on Windows it falls back to the winget Gyan.FFmpeg / scoop / chocolatey install paths if PATH inheritance failed (matches the resolution logic in `video-merger` and `video-still-animator`). ## Path-escaping notes ffmpeg's `subtitles=` filter is picky on Windows: - Drive-letter colons (`C:/…`) must be backslash-escaped (`C\:/…`). - The path uses forward slashes regardless of host OS. - Single quotes inside the path get backslash-escaped. The script applies these rules so callers don't have to. ## Style chain The `force_style` defaults render white text with a 2-px black outline on a transparent background (`BorderStyle=3`), bottom-centred, 80 px above the frame edge. Override any of the `--*` flags via `with.*` if you want a different look.
Submit audio or video for multilingual dubbing, poll status, and download dubbed audio. Use when the user asks for dubbing, 多语言配音, 视频翻译配音, 译制片, or wants a source clip dubbed into another language.
Generate a structured short-video shooting script from a topic. Emits a strict, machine-parseable shot list (3 shots by default) with image prompt + video prompt + voiceover + on-screen text per shot. Trigger when the user asks for a video script, 分镜, 短视频文案, AI视频, 短剧脚本, or wants visual prompts ready for image/video generation.
Use when the user asks to schedule recurring tasks, one-off reminders, timers, or cron-style jobs through the OpenSquilla cron tool.
Multi-round research with explicit methodology, evidence tracking, and citation-tagged synthesis. Trigger on 'deep dive', 'research report', 'literature review', 'investigate X across sources', 'multi-round investigation'. Distinct from the `summarize` skill, which is a single-pass condensation; this skill maintains a state file across iterations, tracks coverage, and produces a long-form report with per-claim citations. Three execution stages: plan (scope into sub-questions), iterate (record evidence per round), compile (synthesize report). The skill itself does not fetch the web — it tells the host agent which fetches to perform via OpenSquilla's existing web tools, and records what comes back.
Read, edit, or create Microsoft Word `.docx` files. Trigger this skill whenever the user mentions a Word document, .docx file, contract, report, brief, memo, or asks to extract text, modify an existing doc, generate one from a brief, or audit tracked changes. Three execution paths: text-and-structure extraction, in-place edit-by-run (preserves styles), and create-from-scratch with python-docx. Falls back to OOXML unzip-and-patch for layout work python-docx cannot reach.
Capture the current git diff (staged, working-tree, or staged file list) as text. Direct shell call for workflows that need repository diffs without an LLM agent loop.
GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries. Use when: (1) checking PR status or CI, (2) creating/commenting on issues, (3) listing/filtering PRs or issues, (4) viewing run logs. NOT for: complex web UI interactions requiring manual browser flows (use browser tooling when available), bulk operations across many repos (script with gh api), or when gh auth is not configured.
Query the per-turn DecisionEntry log for skill co-occurrence patterns, meta-skill usage stats, and the router fixture corpus. Returns a JSON summary suitable for downstream LLM consumption. Used by meta-skill-creator's harvest step but also useful standalone for 'which skills did I use most this week?'