$npx -y skills add affaan-m/ECC --skill video-editingAI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vl
| 1 | # Video Editing |
| 2 | |
| 3 | AI-assisted editing for real footage. Not generation from prompts. Editing existing video fast. |
| 4 | |
| 5 | ## When to Activate |
| 6 | |
| 7 | - User wants to edit, cut, or structure video footage |
| 8 | - Turning long recordings into short-form content |
| 9 | - Building vlogs, tutorials, or demo videos from raw capture |
| 10 | - Adding overlays, subtitles, music, or voiceover to existing video |
| 11 | - Reframing video for different platforms (YouTube, TikTok, Instagram) |
| 12 | - User says "edit video", "cut this footage", "make a vlog", or "video workflow" |
| 13 | |
| 14 | ## Core Thesis |
| 15 | |
| 16 | AI video editing is useful when you stop asking it to create the whole video and start using it to compress, structure, and augment real footage. The value is not generation. The value is compression. |
| 17 | |
| 18 | ## The Pipeline |
| 19 | |
| 20 | ``` |
| 21 | Screen Studio / raw footage |
| 22 | → Claude / Codex |
| 23 | → FFmpeg |
| 24 | → Remotion |
| 25 | → ElevenLabs / fal.ai |
| 26 | → Descript or CapCut |
| 27 | ``` |
| 28 | |
| 29 | Each layer has a specific job. Do not skip layers. Do not try to make one tool do everything. |
| 30 | |
| 31 | ## Layer 1: Capture (Screen Studio / Raw Footage) |
| 32 | |
| 33 | Collect the source material: |
| 34 | - **Screen Studio**: polished screen recordings for app demos, coding sessions, browser workflows |
| 35 | - **Raw camera footage**: vlog footage, interviews, event recordings |
| 36 | - **Desktop capture via VideoDB**: session recording with real-time context (see `videodb` skill) |
| 37 | |
| 38 | Output: raw files ready for organization. |
| 39 | |
| 40 | ## Layer 2: Organization (Claude / Codex) |
| 41 | |
| 42 | Use Claude Code or Codex to: |
| 43 | - **Transcribe and label**: generate transcript, identify topics and themes |
| 44 | - **Plan structure**: decide what stays, what gets cut, what order works |
| 45 | - **Identify dead sections**: find pauses, tangents, repeated takes |
| 46 | - **Generate edit decision list**: timestamps for cuts, segments to keep |
| 47 | - **Scaffold FFmpeg and Remotion code**: generate the commands and compositions |
| 48 | |
| 49 | ``` |
| 50 | Example prompt: |
| 51 | "Here's the transcript of a 4-hour recording. Identify the 8 strongest segments |
| 52 | for a 24-minute vlog. Give me FFmpeg cut commands for each segment." |
| 53 | ``` |
| 54 | |
| 55 | This layer is about structure, not final creative taste. |
| 56 | |
| 57 | ## Layer 3: Deterministic Cuts (FFmpeg) |
| 58 | |
| 59 | FFmpeg handles the boring but critical work: splitting, trimming, concatenating, and preprocessing. |
| 60 | |
| 61 | ### Extract segment by timestamp |
| 62 | |
| 63 | ```bash |
| 64 | ffmpeg -i raw.mp4 -ss 00:12:30 -to 00:15:45 -c copy segment_01.mp4 |
| 65 | ``` |
| 66 | |
| 67 | ### Batch cut from edit decision list |
| 68 | |
| 69 | ```bash |
| 70 | #!/bin/bash |
| 71 | # cuts.txt: start,end,label |
| 72 | while IFS=, read -r start end label; do |
| 73 | ffmpeg -i raw.mp4 -ss "$start" -to "$end" -c copy "segments/${label}.mp4" |
| 74 | done < cuts.txt |
| 75 | ``` |
| 76 | |
| 77 | ### Concatenate segments |
| 78 | |
| 79 | ```bash |
| 80 | # Create file list |
| 81 | for f in segments/*.mp4; do echo "file '$f'"; done > concat.txt |
| 82 | ffmpeg -f concat -safe 0 -i concat.txt -c copy assembled.mp4 |
| 83 | ``` |
| 84 | |
| 85 | ### Create proxy for faster editing |
| 86 | |
| 87 | ```bash |
| 88 | ffmpeg -i raw.mp4 -vf "scale=960:-2" -c:v libx264 -preset ultrafast -crf 28 proxy.mp4 |
| 89 | ``` |
| 90 | |
| 91 | ### Extract audio for transcription |
| 92 | |
| 93 | ```bash |
| 94 | ffmpeg -i raw.mp4 -vn -acodec pcm_s16le -ar 16000 audio.wav |
| 95 | ``` |
| 96 | |
| 97 | ### Normalize audio levels |
| 98 | |
| 99 | ```bash |
| 100 | ffmpeg -i segment.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 -c:v copy normalized.mp4 |
| 101 | ``` |
| 102 | |
| 103 | ## Layer 4: Programmable Composition (Remotion) |
| 104 | |
| 105 | Remotion turns editing problems into composable code. Use it for things that traditional editors make painful: |
| 106 | |
| 107 | ### When to use Remotion |
| 108 | |
| 109 | - Overlays: text, images, branding, lower thirds |
| 110 | - Data visualizations: charts, stats, animated numbers |
| 111 | - Motion graphics: transitions, explainer animations |
| 112 | - Composable scenes: reusable templates across videos |
| 113 | - Product demos: annotated screenshots, UI highlights |
| 114 | |
| 115 | ### Basic Remotion composition |
| 116 | |
| 117 | ```tsx |
| 118 | import { AbsoluteFill, Sequence, Video, useCurrentFrame } from "remotion"; |
| 119 | |
| 120 | export const VlogComposition: React.FC = () => { |
| 121 | const frame = useCurrentFrame(); |
| 122 | |
| 123 | return ( |
| 124 | <AbsoluteFill> |
| 125 | {/* Main footage */} |
| 126 | <Sequence from={0} durationInFrames={300}> |
| 127 | <Video src="/segments/intro.mp4" /> |
| 128 | </Sequence> |
| 129 | |
| 130 | {/* Title overlay */} |
| 131 | <Sequence from={30} durationInFrames={90}> |
| 132 | <AbsoluteFill style={{ |
| 133 | justifyContent: "center", |
| 134 | alignItems: "center", |
| 135 | }}> |
| 136 | <h1 style={{ |
| 137 | fontSize: 72, |
| 138 | color: "white", |
| 139 | textShadow: "2px 2px 8px rgba(0,0,0,0.8)", |
| 140 | }}> |
| 141 | The AI Editing Stack |
| 142 | </h1> |
| 143 | </AbsoluteFill> |
| 144 | </Sequence> |
| 145 | |
| 146 | {/* Next segment */} |
| 147 | <Sequence from={300} durationInFrames={450}> |
| 148 | <Video src="/segments/demo.mp4" /> |
| 149 | </Sequence> |
| 150 | </AbsoluteFill> |
| 151 | ); |
| 152 | }; |
| 153 | ``` |
| 154 | |
| 155 | ### Render output |
| 156 | |
| 157 | ```bash |
| 158 | npx remotion render src/index.ts VlogComposition output.mp4 |
| 159 | ``` |
| 160 | |
| 161 | See the [Remotion docs](https://www.remotion.dev/docs) for detai |