# video > Edit, process, and render videos using FFmpeg and Remotion. Handles stitching, transitions, captions, teasers, and transcription. USE THIS SKILL WHEN: - User mentions video, clip, footage, mp4, mov, avi, mkv, or any video format - User wants to combine, stitch, merge, or join video files - User asks about transitions, fades, crossfades, or effects between clips - User needs captions, subtitles, or TikTok-style word highlighting - User wants a teaser, trailer, or highlight reel from longer video - User mentions FFmpeg, ffprobe, Remotion, or related errors - User asks about video transcription or whisper speech-to-text - User asks about video duration, resolution, fps, or trimming - User has .mp4, .mov, .captions.json files or video folders - User asks about thumbnails, overlays, title cards, or graphics for video - Author: prabha-oss - Repository: prabha-oss/benai-skills-develop - Version: 20260209084150 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-09 - Source: https://github.com/prabha-oss/benai-skills-develop - Web: https://mule.run/skillshub/@@prabha-oss/benai-skills-develop~video:20260209084150 --- --- name: video description: | Edit, process, and render videos using FFmpeg and Remotion. Handles stitching, transitions, captions, teasers, and transcription. USE THIS SKILL WHEN: - User mentions video, clip, footage, mp4, mov, avi, mkv, or any video format - User wants to combine, stitch, merge, or join video files - User asks about transitions, fades, crossfades, or effects between clips - User needs captions, subtitles, or TikTok-style word highlighting - User wants a teaser, trailer, or highlight reel from longer video - User mentions FFmpeg, ffprobe, Remotion, or related errors - User asks about video transcription or whisper speech-to-text - User asks about video duration, resolution, fps, or trimming - User has .mp4, .mov, .captions.json files or video folders - User asks about thumbnails, overlays, title cards, or graphics for video --- # Video Editing Skill Edits, processes, and renders videos using FFmpeg and Remotion. --- ## Intelligent Editing Workflow This skill enables Claude to act as a smart video editor. Before executing commands: 1. **Analyze** - Examine videos (duration, resolution, audio) using ffprobe 2. **Transcribe** - Get speech content for smart cuts (if needed) 3. **Ask** - Clarify user intent and preferences 4. **Plan** - Propose edit approach for approval 5. **QA Test** - Run automated tests before user preview (see [references/qa-testing.md](references/qa-testing.md)) 6. **Preview** - Only show to user after QA passes 7. **Iterate** - Refine based on feedback See [references/intelligent-editing.md](references/intelligent-editing.md) for detailed workflow, questions to ask, and quality checks. --- ## Tool Selection | Task | FFmpeg | Remotion | |------|--------|----------| | **Stitching** | Same codec, no effects | Transitions, overlays, programmatic | | **Transitions** | Simple crossfades | Multiple types, custom timing | | **Captions** | SRT burn-in | TikTok-style word highlighting | | **Teasers** | Quick clips | Text overlays, branded elements | **General guidance:** - **FFmpeg**: Fast CLI operations, batch processing, format conversion - **Remotion**: Styled content, animations, preview before render, React components --- ## Reference Files Read these files as needed using the Read tool: ### Intelligence Layer | File | Contents | |------|----------| | [references/intelligent-editing.md](references/intelligent-editing.md) | Smart editing workflow, questions, quality checks | | [references/video-analysis.md](references/video-analysis.md) | Analyze videos with ffprobe | | [references/transcription.md](references/transcription.md) | Whisper transcription for speech analysis | | [references/qa-testing.md](references/qa-testing.md) | **QA tests before user preview** | ### Core Editing | File | Contents | |------|----------| | [references/stitching.md](references/stitching.md) | Combine multiple clips into one video | | [references/transitions.md](references/transitions.md) | Add fade, slide, wipe between clips | | [references/captions.md](references/captions.md) | Add subtitles and TikTok-style captions | | [references/teasers.md](references/teasers.md) | Create 30-second teasers/trailers | | [references/title-cards.md](references/title-cards.md) | Add chapter headers, bumpers, section titles | | [references/graphics-generation.md](references/graphics-generation.md) | Generate thumbnails, overlays, social graphics | ### Technical Reference | File | Contents | |------|----------| | [references/ffmpeg-basics.md](references/ffmpeg-basics.md) | Common FFmpeg patterns and troubleshooting | | [references/remotion-setup.md](references/remotion-setup.md) | Remotion project setup and workflow | | [references/remotion-tips.md](references/remotion-tips.md) | Animations, timing, springs, sequences, and captions | | [references/reference-implementation.md](references/reference-implementation.md) | **Complete working code to recreate the project** | --- ## Quick Start ### Transcription (Fast) ```bash # 1. Setup whisper.cpp (one-time) npx ts-node scripts/setup-whisper.ts # 2. Transcribe all videos (GPU accelerated) npx ts-node scripts/transcribe-fast.ts ``` ### FFmpeg (CLI) ```bash # Check installation which ffmpeg || brew install ffmpeg # Basic concat (same codec) ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4 # Burn in subtitles ffmpeg -i video.mp4 -vf "subtitles=captions.srt" output.mp4 ``` ### Remotion (React) ```bash # Start preview (always do this first) npm run dev # Render (only when user requests) npx remotion render CompositionName out/video.mp4 ``` --- ## Key Lessons Learned ### Transcription (IMPORTANT) - **Use `@remotion/install-whisper-cpp`** - NOT Python whisper (10x faster with GPU) - Use `base.en` model for speed, `medium.en` for final quality - **Required parameter**: `whisperCppVersion: '1.5.5'` in transcribe() call - Enable `tokenLevelTimestamps: true` for word-level captions - Whisper.cpp uses Metal GPU on Mac - 8.5min video in ~85 seconds ### Teasers - **Never start clips with**: "But", "And", "So", "Now", "It", "This", "That", "They" - Each clip must have an **explicit subject** - not pronouns or references - Aim for 3-4 clips totaling 25-30 seconds - **Playback speed**: 1.3x for energy (1.5x is too fast) - **Transitions**: Smooth fade (0.4s) between clips - **First clip**: Must NOT overlap with intro start (avoid repetition) ### Captions - **Active word**: Yellow `#FFD700` - **Spoken words**: White `#FFFFFF` - **Upcoming words**: Light gray `#E0E0E0` - **Font**: Roboto at 48px for 1080p - **Black stroke outline** (works on ANY background): ```css WebkitTextStroke: '3px black', paintOrder: 'stroke fill', textShadow: '0px 0px 4px rgba(0,0,0,1), 0px 0px 8px rgba(0,0,0,0.8)' ``` ### Remotion Video Trimming - Use `OffthreadVideo` component - Set BOTH `startFrom` AND `endAt` props - Convert ms to frames: `Math.round((ms / 1000) * fps)` --- ## Edge Cases & Gotchas ### File Naming - Avoid spaces in video filenames: use `intro.mp4` not `Intro Video.mp4` - Remotion Folder names can only contain letters, numbers, and hyphens ### Ports - Remotion Studio may start on port 3001 if 3000 is in use ### Codec Mismatch - FFmpeg concat demuxer (`-c copy`) fails silently with mismatched codecs - Use `ffprobe` to check codecs before concatenating - Use filter_complex for different codecs/resolutions ### Workflow - **Always preview in Remotion Studio before rendering** - Never render automatically - wait for user approval - Copy videos to `public/` folder for Remotion projects