skills/edit-video/SKILL.md
Conversational video editing: transcribe, plan edits using transcript analysis, and render. Use when: (1) User wants to edit a video by reviewing its transcript (2) User asks to trim, cut, or rearrange video segments (3) User wants to create a highlight reel or narrative cut from a longer video (4) User mentions EDL, transcript analysis, or video editing workflow (5) User wants to remove filler, dead air, or silence from a video (6) User wants to combine multiple clips into one video Triggers: "edit video", "transcribe video", "trim video", "cut video", "EDL", "video editing", "remove filler", "combine videos", "stitch clips", "multiple clips", "add captions", "shorts captions", "burn captions"
npx skillsauth add silvabyte/skills edit-videoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Conversational video editing in three phases: transcribe, plan the edit, render.
Environment variables (optional, have defaults):
| Variable | Purpose | Default |
|----------|---------|---------|
| AUDETIC_API_URL | Audetic transcription service URL | https://audio.audetic.link |
All paths are relative to this skill's directory. Run with bun run.
| Command | Purpose |
|---------|---------|
| scripts/transcribe.ts <video> | Transcribe a single video file — produces JSON + markdown transcript + analysis alongside the file |
| scripts/transcribe.ts <directory> | Transcribe all video files in a directory — produces merged JSON + markdown transcript + analysis in the directory |
| scripts/preview.ts <edl.json> | Validate and preview an EDL before rendering |
| scripts/render.ts <edl.json> | Render final video from EDL using ffmpeg stream copy |
| scripts/adjust.ts <edl.json> --segment N --start/--end <value> | Adjust timestamps or remove segments in an existing EDL |
| scripts/caption.ts <video> <transcript.json> | Burn Shorts-style captions into video (optional --edl, --output) |
bun run scripts/transcribe.ts <video-file>
Compresses audio to MP3, uploads to the audetic transcription service, and produces three files alongside the video:
.json — transcription result (used by tools)-transcript.md — readable transcript table-analysis.md — transcript with signal flags (gaps, speech rate)Read both the transcript and the analysis. The analysis provides mechanical signals:
| Flag | Meaning |
|------|---------|
| gap:Xs | Silence of X seconds before this segment |
| slow | Fewer than 0.5 words/second (typing, long pauses, dead air) |
| silence | Zero words detected in segment |
| WPS column | Words per second (higher = denser speech) |
See references/signal-interpretation.md for detailed signal guidance.
Use these signals combined with your understanding of the content to decide what to keep/cut. The tool detects silence and pacing; you judge what's filler vs. substance.
When the edit plan is decided, write an EDL (Edit Decision List) JSON file:
{
"output": "/absolute/path/to/output.mp4",
"segments": [
{ "source": "/absolute/path/to/video.mp4", "start": "00:00:00.000", "end": "00:02:15.500", "label": "Introduction" },
{ "source": "/absolute/path/to/video.mp4", "start": "00:05:30.000", "end": "00:12:45.200", "label": "Main discussion" }
]
}
source field with the absolute path to its source videoHH:MM:SS.mmm format (ffmpeg-native)label is optional, helps communicate what each segment isSee references/edl-schema.md for the full schema reference.
bun run scripts/preview.ts <edl.json>
Always preview before rendering. Shows segment breakdown, kept/cut percentages, and validates the EDL.
After previewing, use adjust.ts for targeted tweaks instead of rewriting the EDL:
# Trim 0.5s off the end of segment 1
bun run scripts/adjust.ts <edl.json> --segment 1 --end -0.5s
# Move the start of segment 2 earlier by 1 second
bun run scripts/adjust.ts <edl.json> --segment 2 --start -1s
# Extend the end of segment 3 by 2 seconds
bun run scripts/adjust.ts <edl.json> --segment 3 --end +2s
# Set end of segment 1 to an exact timestamp
bun run scripts/adjust.ts <edl.json> --segment 1 --end 00:05:30.000
# Remove segment 2 entirely
bun run scripts/adjust.ts <edl.json> --remove 2
Segment numbers are 1-based, matching the preview output. Relative deltas use +Xs/-Xs (supports decimals). Absolute values use HH:MM:SS.mmm format. The tool validates the result and prints an updated summary.
Repeat preview + adjust as needed until the edit is right, then render.
bun run scripts/render.ts <edl.json>
Uses ffmpeg stream copy (fast, cuts at nearest keyframe). Produces the final video.
bun run scripts/caption.ts <edited-video.mp4> <transcript.json> --edl <edl.json>
Burns bold, centered captions (Hormozi style) into the video. Use --edl to remap transcript times to the edited video's timeline. Requires a full re-encode.
See references/caption-style.md for style defaults and customization.
Use this when the user has multiple short clips that should be edited into a single video.
bun run scripts/transcribe.ts <directory>
Finds all video files (*.mp4, *.mkv, *.mov, *.webm, *.ts), transcribes each one, and produces merged output in the directory:
transcript.json — merged transcript with source field on each segmenttranscript.md — merged readable table with Source columnanalysis.md — merged analysis with Source column (gap detection resets at clip boundaries)Same process as single-file, but the transcript and analysis include a Source column showing which clip each segment came from. Write an EDL with per-segment source paths:
{
"output": "/absolute/path/to/combined.mp4",
"segments": [
{ "source": "/absolute/path/to/clip001.mp4", "start": "00:00:02.000", "end": "00:00:12.000", "label": "Opening" },
{ "source": "/absolute/path/to/clip003.mp4", "start": "00:00:00.000", "end": "00:00:08.500", "label": "Key moment" },
{ "source": "/absolute/path/to/clip007.mp4", "start": "00:00:01.000", "end": "00:00:14.000", "label": "Closing" }
]
}
Same as single-file workflow. Preview lists all sources with durations and shows source filename per segment.
Same as single-file — run caption.ts with --edl on the rendered output.
Use narrative editing when the user provides a goal beyond "trim the filler" — a theme, tone, target duration, or audience.
See references/narrative-patterns.md for the full pattern catalog.
Thinking process:
Labels as narrative roles: Use the label field to document function (e.g., "HOOK: the punchline", "SETUP: context", "PAYOFF: resolution").
Narrative notes: Use the optional narrative_notes field in the EDL to document editorial reasoning.
Example:
{
"output": "/path/to/output.mp4",
"narrative_notes": "Goal: 60s punchy clip. Led with the reaction for hook, then backed into the setup.",
"segments": [
{ "source": "/path/to/video.mp4", "start": "00:05:30.000", "end": "00:05:55.000", "label": "HOOK: surprised reaction" },
{ "source": "/path/to/video.mp4", "start": "00:01:00.000", "end": "00:02:15.500", "label": "SETUP: reading the tweet" },
{ "source": "/path/to/video.mp4", "start": "00:06:00.000", "end": "00:06:30.000", "label": "PAYOFF: final take" }
]
}
The outputPaths function in scripts/lib/config.ts generates standard paths relative to the video:
| Output | Pattern |
|--------|---------|
| Transcript JSON | <name>.json |
| Transcript MD | <name>-transcript.md |
| Analysis MD | <name>-analysis.md |
| EDL | <name>-edl.json |
| Edited video | <name>-edited.mp4 |
| Captioned video | <name>-captioned.mp4 |
The directoryOutputPaths function generates paths inside the directory:
| Output | Pattern |
|--------|---------|
| Transcript JSON | transcript.json |
| Transcript MD | transcript.md |
| Analysis MD | analysis.md |
transcribe.ts on it-analysis.md and -transcript.md filessource pointing to the video)preview.ts to validate — review with user
6a. If adjustments needed, run adjust.ts for targeted tweaks (repeat preview + adjust as needed)render.ts to produce the final videocaption.ts with --edl if user wants Shorts-style captionstranscribe.ts on the directoryanalysis.md and transcript.md in the directorysource pointing to its clip)preview.ts to validate — review with user
6a. If adjustments needed, run adjust.ts for targeted tweaks (repeat preview + adjust as needed)render.ts to produce the combined videocaption.ts with --edl if user wants Shorts-style captionsDur column values from the analysis for selected segments. Iterate until the EDL fits.adjust.ts for minor tweaks like trimming or extending segments. It handles timestamp arithmetic so you don't need to rewrite the EDL for small changes.tools
Weekend Business Shared Drive: Browse, search, upload, and manage files. Triggers: 'weekend business drive', 'wb drive', 'upload to brand', 'shared drive', 'WB shared drive', 'list WB files', 'find in drive'
documentation
--- name: unglaze description: Rewrite glazy, eye-glazing generated content into a tight, scannable, bullet-tight engineering voice. Use when the user says "unglaze", "ungloss this", "punch this up", "tighten this", "less glazy", "eyes glaze", "make my eyes not glaze", "cut the fluff", "rewrite punchier", "make it sharper", "less corporate", "de-fluff", "less LLM-flavored". Also auto-triggers on dissatisfaction signals like "ugh too long", "tldr this", "this is boring", "too much". Applies to PR
content-media
Transcribe audio and video files using Audetic whisper service. Use when: (1) User wants to transcribe an audio or video file (2) User has a recording and needs a text transcript (3) User wants transcript analysis (gaps, speech rate, silence detection) (4) User wants to transcribe all media files in a directory Triggers: "transcribe", "transcription", "transcript", "speech to text", "audio to text", "transcribe audio", "transcribe video", "transcribe recording"
development
Testing Trophy philosophy for JS/TS. Use when: writing tests, deciding what/how to test, reviewing tests, choosing unit/integration/E2E, mocking decisions. Triggers: "write tests", "what should I test", "test this component", "review my tests", "testing strategy", "mock this", "test setup".