edit-video
GitHub用于编辑 ClassroomIO 视频,利用 ffmpeg 和 Python 脚本进行剪辑、降噪、字幕及品牌化包装,生成适合多平台的短视频内容。
Trigger Scenarios
Install
npx skills add classroomio/classroomio --skill edit-video -g -y
SKILL.md
Frontmatter
{
"name": "edit-video",
"description": "Edit ClassroomIO videos (talking heads, team discussions, product demos, screen recordings, tutorials, webinars) into branded, professional cuts for YouTube, Shorts, Reels, LinkedIn and X using the ClassroomIO design system. Covers pause trimming, noise removal, word-by-word captions, explainer split screens and full-screen takeovers (news screenshots, flows, lists), short-form hooks, the ClassroomIO sign-off, thumbnails, QA and a posting-guide PDF. Use when the user asks to edit, cut, clip, caption, brand, repurpose or prepare a ClassroomIO video for social media or YouTube.",
"user-invocable": true
}
Edit ClassroomIO videos
Turn a recording into short, independent clips that look like ClassroomIO made them. One JSON project file describes the job, and scripts/cio-video does the editing. The look comes entirely from the classroomio-design skill; this skill adds the steps and the motion.
Nothing here depends on a particular machine or account. Every input path comes from the project file the user gives you, and the tool only needs the requirements below.
Requirements
- ffmpeg 6+ with the
arnndn,afftdn,silencedetect,loudnormandebur128filters. - Python 3.10+.
scripts/cio-videocreates its own venv and installsscripts/requirements.txton first run. - Chrome or Chromium for screenshots and the guide PDF. It's found on PATH, or set
CIO_VIDEO_CHROME. - Network on first run to download the RNNoise
shmodel. - The
classroomio-designskill next to this one (skills/classroomio-design/). Fonts, logo geometry and image assets are read from it. - Caches live in
$CIO_VIDEO_CACHE, or$XDG_CACHE_HOME/cio-video, or~/.cache/cio-video.
Run skills/edit-video/scripts/cio-video check first. It names anything missing.
The design system in video
Load classroomio-design before choosing any colour, type, copy or layout. This is how the skill maps it to video:
| Design system | Used for |
|---|---|
Palette (tokens/colors.css, docs/visual.md): paper, sand, ink, one blue #0233BD, sky #ADC3FF |
Panels on paper or sand, the vertical background and caption chips in ink, the current caption word and swipes in sky. One blue element per visual. |
Geist 700 / 800 and Geist Mono (fonts/) |
Headlines and captions in Geist 700, the wordmark in Geist 800, uppercase eyebrows and labels in Geist Mono with 0.12em tracking. |
Logo (assets/logo-mark.svg + lowercase wordmark) |
Built from the SVG geometry. Never lift a logo or animation from old footage. |
| Block / BlockStack (notch cards) | Explainer flows and stacks, and the sign-off's Lesson / Quiz / Certificate blocks. |
| BrowserFrame, DetailRows, FlowLines, Stamp | Screenshot panels, comparison rows, dashed connectors, date stamps. |
Launch-gallery frame 02 “Pain” (templates/launch-gallery/) |
The YouTube thumbnail layout. |
Motion (docs/visual.md): block drop with bounce, marker swipe, typed caret |
Every entrance animation. |
Voice (docs/content.md) |
Titles, hooks and social copy: sentence case, plain claims, no emoji, no exclamation marks, no em dashes. |
Rules (docs/brand-assets.md) |
No shadows, no decorative gradients, square corners except BrowserFrame and Stamp, one idea per clip. |
Steps
- Collect inputs. You need the source recording and a transcript with word timings. A YouTube auto-caption VTT is best (
yt-dlp --write-auto-subs --sub-format vtt --skip-download <url>). SRT or[[seconds, "word"], …]JSON also work; SRT words are spread across each cue, so they land less precisely. Ask the user where the files are. Never assume a path. - Look before you cut.
- Grab a few frames from the source to learn the framing: talking head or screen, and where the speaker sits.
- Read the transcript with
cio-video words project.json --start 0 --end 300. - Pick windows that stand alone: one idea, a strong first line, a full-sentence ending.
- Write
project.jsonnext to the source. Start fromtemplates/project.example.json(talking head) ortemplates/project.screen.example.json(screen recording).references/project-file.mdlists every field. - Plan and clean. Run
cio-video plan project.json --transcript. It trims pauses and removes noise (cached), prints each cleaned transcript, and lists every explainer and hook with its timing. Addcorrectionsuntil the transcript reads right, then fix every!warning. - Add explainers and hooks. See
references/explainers.md.- Tie each visual to the phrase that introduces it.
- For news, verify the claim with web search, capture the real article with
cio-video screenshot, crop it, and credit it on screen. - Ask the user for anything the web won't give you, such as banners or logged-in pages.
- The hook is a 2–5 s line from the same clip.
- Preview one clip with
cio-video render project.json --clip 01 --out preview/, then build its QA sheet. Show the user before rendering the rest: hooks, visual choices and split versus full are taste calls. - Render everything. Run
cio-video render project.json --jobs 3, thencaptions,thumbnailsandguide. Write the copy in each clip'sposts, followingdocs/content.md. - QA. Run
cio-video qa project.json. Every row must readok: loudness within 1 LU of target and at least 90% of words landing on speech. Then look at every contact sheet in<work>/qa/:- captions don't cover a visual
- text is legible at phone size
- nothing sits in the 9:16 platform UI zones
- one blue element per visual
- Report back. Give the output folder, what changed, the QA numbers, and what the user must check before posting:
- consent from everyone on camera or named
- facts and sources
- visuals that are illustrative rather than real
Ask the user, don't assume
- Where the source and transcript are, and where the output should go.
- News and third-party pages: real credited screenshots, or brand cards that quote the headline.
- Which formats get the hook (the default is 9:16 only).
- The sign-off headline and the series eyebrow (
INSIGHTS,PRODUCT TOUR,CHANGELOG, …). - Anything said on camera about customers, numbers or other companies that will be published.
References
| Need | File |
|---|---|
| Every project-file field | references/project-file.md |
| Explainer kinds, props, modes, timing rules | references/explainers.md |
| Audio, captions, layout safe zones, hooks, sign-off | references/editing-rules.md |
| Platform specs, posting guide, copy | references/publishing.md |
| Errors and fixes | references/troubleshooting.md |
Commands
V=skills/edit-video/scripts/cio-video
$V check
$V words project.json --start 120 --end 240 # source transcript with times
$V plan project.json [--clip 01 02] [--transcript] # trim, denoise, print timelines and warnings
$V render project.json [--clip 01] [--format 9x16] [--jobs 3] [--out preview/]
$V sign-off project.json [--force] # standalone sign-off clips (16:9 and 9:16)
$V thumbnails | captions | qa | guide project.json [--clip …]
$V screenshot <url> out.png [--crop x0,y0,x1,y1] [--no-js]
Clip ids match by prefix, so --clip 01 selects 01-why-onboarding-fails. Outputs go to the project's output folder; caches, timelines and QA sheets go to its work folder.
Version History
- 6f392c4 Current 2026-10-19 22:38


