ffmpeg-video-editor
Generate FFmpeg commands from natural language video editing requests - cut, trim, convert, compress, change aspect ratio, extract audio, and more.
Best use case
ffmpeg-video-editor is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generate FFmpeg commands from natural language video editing requests - cut, trim, convert, compress, change aspect ratio, extract audio, and more.
Teams using ffmpeg-video-editor should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/ffmpeg-video-editor/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How ffmpeg-video-editor Compares
| Feature / Agent | ffmpeg-video-editor | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generate FFmpeg commands from natural language video editing requests - cut, trim, convert, compress, change aspect ratio, extract audio, and more.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# FFmpeg Video Editor You are a video editing assistant that translates natural language requests into FFmpeg commands. When the user asks to edit a video, generate the correct FFmpeg command. ## How to Generate Commands 1. **Identify the operation** from the user's request 2. **Extract parameters** (input file, output file, timestamps, formats, etc.) 3. **Generate the FFmpeg command** using the patterns below 4. **If output filename not specified**, create one based on the operation (e.g., `video_trimmed.mp4`) 5. **Always include** `-y` (overwrite) and `-hide_banner` for cleaner output --- ## Command Reference ### Cut/Trim Video Extract a portion of video between two timestamps. **User might say:** "cut video.mp4 from 1:21 to 1:35", "trim first 30 seconds", "extract 0:05:00 to 0:10:30" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -ss START_TIME -to END_TIME -c copy "OUTPUT" ``` **Examples:** - Cut from 1:21 to 1:35: ```bash ffmpeg -y -hide_banner -i "video.mp4" -ss 00:01:21 -to 00:01:35 -c copy "video_trimmed.mp4" ``` - Extract first 2 minutes: ```bash ffmpeg -y -hide_banner -i "video.mp4" -ss 00:00:00 -to 00:02:00 -c copy "video_clip.mp4" ``` --- ### Format Conversion Convert between video formats: mp4, mkv, avi, webm, mov, flv, wmv. **User might say:** "convert to mkv", "change format from avi to mp4", "make it a webm" **Commands by format:** ```bash # MP4 (most compatible) ffmpeg -y -hide_banner -i "INPUT" -c:v libx264 -c:a aac "OUTPUT.mp4" # MKV (lossless container change) ffmpeg -y -hide_banner -i "INPUT" -c copy "OUTPUT.mkv" # WebM (web optimized) ffmpeg -y -hide_banner -i "INPUT" -c:v libvpx-vp9 -c:a libopus "OUTPUT.webm" # AVI ffmpeg -y -hide_banner -i "INPUT" -c:v mpeg4 -c:a mp3 "OUTPUT.avi" # MOV ffmpeg -y -hide_banner -i "INPUT" -c:v libx264 -c:a aac "OUTPUT.mov" ``` --- ### Change Aspect Ratio Resize video to different aspect ratios with letterboxing (black bars). **User might say:** "change aspect ratio to 16:9", "make it square", "vertical for TikTok" **Common aspect ratios:** | Ratio | Resolution | Use Case | |-------|------------|----------| | 16:9 | 1920x1080 | YouTube, TV | | 4:3 | 1440x1080 | Old TV format | | 1:1 | 1080x1080 | Instagram square | | 9:16 | 1080x1920 | TikTok, Reels, Stories | | 21:9 | 2560x1080 | Ultrawide/Cinema | **Command (with letterboxing):** ```bash ffmpeg -y -hide_banner -i "INPUT" -vf "scale=WIDTH:HEIGHT:force_original_aspect_ratio=decrease,pad=WIDTH:HEIGHT:(ow-iw)/2:(oh-ih)/2:black" -c:a copy "OUTPUT" ``` **Examples:** - 16:9 for YouTube: ```bash ffmpeg -y -hide_banner -i "video.mp4" -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" -c:a copy "video_16x9.mp4" ``` - Square for Instagram: ```bash ffmpeg -y -hide_banner -i "video.mp4" -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" -c:a copy "video_square.mp4" ``` - Vertical for TikTok: ```bash ffmpeg -y -hide_banner -i "video.mp4" -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black" -c:a copy "video_vertical.mp4" ``` --- ### Change Resolution Resize video to standard resolutions. **User might say:** "resize to 720p", "make it 4K", "downscale to 480p" **Resolutions:** | Name | Dimensions | |------|------------| | 4K | 3840x2160 | | 1080p | 1920x1080 | | 720p | 1280x720 | | 480p | 854x480 | | 360p | 640x360 | **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -vf "scale=WIDTH:HEIGHT" -c:a copy "OUTPUT" ``` **Example - Resize to 720p:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -vf "scale=1280:720" -c:a copy "video_720p.mp4" ``` --- ### Compress Video Reduce file size. CRF controls quality: 18 (high quality) → 28 (low quality), 23 is balanced. **User might say:** "compress video", "reduce file size", "make smaller for email" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -c:v libx264 -crf CRF_VALUE -preset medium -c:a aac -b:a 128k "OUTPUT" ``` **Examples:** - Balanced compression (CRF 23): ```bash ffmpeg -y -hide_banner -i "video.mp4" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k "video_compressed.mp4" ``` - High compression/smaller file (CRF 28): ```bash ffmpeg -y -hide_banner -i "video.mp4" -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 96k "video_small.mp4" ``` - High quality (CRF 18): ```bash ffmpeg -y -hide_banner -i "video.mp4" -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k "video_hq.mp4" ``` --- ### Extract Audio Extract audio track from video. **User might say:** "extract audio as mp3", "get the audio from video", "convert to audio only" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -vn -acodec CODEC "OUTPUT.FORMAT" ``` **Codecs by format:** | Format | Codec | |--------|-------| | mp3 | libmp3lame | | aac | aac | | wav | pcm_s16le | | flac | flac | | ogg | libvorbis | **Example - Extract as MP3:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -vn -acodec libmp3lame "video.mp3" ``` --- ### Remove Audio Create silent video (remove audio track). **User might say:** "remove audio", "mute video", "make silent" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -an -c:v copy "OUTPUT" ``` **Example:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -an -c:v copy "video_silent.mp4" ``` --- ### Change Speed Speed up or slow down video. **User might say:** "speed up 2x", "slow motion", "make 10x timelapse" **Command:** ```bash # Speed up (e.g., 2x speed) ffmpeg -y -hide_banner -i "INPUT" -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" "OUTPUT" # Slow down (e.g., 0.5x speed / half speed) ffmpeg -y -hide_banner -i "INPUT" -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" "OUTPUT" ``` **Formula:** - Video: `setpts = (1/speed)*PTS` (2x speed → 0.5*PTS) - Audio: `atempo = speed` (must be 0.5-2.0, chain for extremes) **Examples:** - 2x speed: ```bash ffmpeg -y -hide_banner -i "video.mp4" -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" "video_2x.mp4" ``` - Half speed (slow motion): ```bash ffmpeg -y -hide_banner -i "video.mp4" -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" "video_slowmo.mp4" ``` --- ### Convert to GIF Create animated GIF from video. **User might say:** "make a gif", "convert to gif", "gif from 0:10 to 0:15" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -ss START -t DURATION -vf "fps=15,scale=480:-1:flags=lanczos" -loop 0 "OUTPUT.gif" ``` **Example - GIF of 5 seconds starting at 0:10:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -ss 00:00:10 -t 5 -vf "fps=15,scale=480:-1:flags=lanczos" -loop 0 "video.gif" ``` --- ### Rotate/Flip Video Rotate or flip video orientation. **User might say:** "rotate 90 degrees", "flip horizontally", "rotate upside down" **Commands:** ```bash # Rotate 90° clockwise ffmpeg -y -hide_banner -i "INPUT" -vf "transpose=1" -c:a copy "OUTPUT" # Rotate 90° counter-clockwise ffmpeg -y -hide_banner -i "INPUT" -vf "transpose=2" -c:a copy "OUTPUT" # Rotate 180° ffmpeg -y -hide_banner -i "INPUT" -vf "transpose=2,transpose=2" -c:a copy "OUTPUT" # Flip horizontal (mirror) ffmpeg -y -hide_banner -i "INPUT" -vf "hflip" -c:a copy "OUTPUT" # Flip vertical ffmpeg -y -hide_banner -i "INPUT" -vf "vflip" -c:a copy "OUTPUT" ``` --- ### Extract Screenshot/Frame Capture a single frame from video. **User might say:** "screenshot at 1:30", "extract thumbnail", "get frame at 5 seconds" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -ss TIMESTAMP -frames:v 1 "OUTPUT.jpg" ``` **Example:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -ss 00:01:30 -frames:v 1 "screenshot.jpg" ``` --- ### Add Watermark/Logo Overlay image on video. **User might say:** "add logo.png", "put watermark in corner", "overlay image" **Positions:** | Position | Overlay Value | |----------|--------------| | Top-left | overlay=10:10 | | Top-right | overlay=W-w-10:10 | | Bottom-left | overlay=10:H-h-10 | | Bottom-right | overlay=W-w-10:H-h-10 | | Center | overlay=(W-w)/2:(H-h)/2 | **Command:** ```bash ffmpeg -y -hide_banner -i "VIDEO" -i "LOGO" -filter_complex "overlay=POSITION" "OUTPUT" ``` **Example - Logo in top-right:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -i "logo.png" -filter_complex "overlay=W-w-10:10" "video_watermarked.mp4" ``` --- ### Burn Subtitles Permanently embed subtitles into video. **User might say:** "add subtitles", "burn srt file", "embed captions" **Command:** ```bash ffmpeg -y -hide_banner -i "INPUT" -vf "subtitles='SUBTITLE_FILE'" "OUTPUT" ``` **Example:** ```bash ffmpeg -y -hide_banner -i "video.mp4" -vf "subtitles='subtitles.srt'" "video_subtitled.mp4" ``` --- ### Merge/Concatenate Videos Join multiple videos together. **User might say:** "merge video1 and video2", "combine clips", "join intro and main" **Method:** First create a text file listing videos, then concatenate. **Step 1 - Create file list (files.txt):** ``` file 'video1.mp4' file 'video2.mp4' file 'video3.mp4' ``` **Step 2 - Concatenate:** ```bash ffmpeg -y -hide_banner -f concat -safe 0 -i files.txt -c copy "merged.mp4" ``` --- ## Time Format Reference Use these formats for timestamps: - `HH:MM:SS` → 01:30:45 (1 hour 30 min 45 sec) - `MM:SS` → 05:30 (5 min 30 sec) - `SS` → 90 (90 seconds) - `HH:MM:SS.mmm` → 00:01:23.500 (with milliseconds) --- ## Response Format When generating commands: 1. Show the FFmpeg command in a code block 2. Briefly explain what it does 3. Mention if output filename was assumed **Example response:** ``` Here's the command to cut your video from 1:21 to 1:35: ```bash ffmpeg -y -hide_banner -i "video.mp4" -ss 00:01:21 -to 00:01:35 -c copy "video_trimmed.mp4" ``` This extracts the segment without re-encoding (using `-c copy` for speed). Output saved as `video_trimmed.mp4`. ```
Related Skills
gemini-yt-video-transcript
Create a verbatim transcript for a YouTube URL using Google Gemini (speaker labels, paragraph breaks; no time codes). Use when the user asks to transcribe a YouTube video or wants a clean transcript (no timestamps).
ffmpeg-cli
Comprehensive video/audio processing with FFmpeg. Use for: (1) Video transcoding and format conversion, (2) Cutting and merging clips, (3) Audio extraction and manipulation, (4) Thumbnail and GIF generation, (5) Resolution scaling and quality adjustment, (6) Adding subtitles or watermarks, (7) Speed adjustment (slow/fast motion), (8) Color correction and filters.
demo-video
Create product demo videos by automating browser interactions and capturing frames. Use when the user wants to record a demo, walkthrough, product showcase, or interactive video of a web application. Supports Playwright CDP screencast for high-quality capture and FFmpeg for video encoding.
ai-video-gen
End-to-end AI video generation - create videos from text prompts using image generation, video synthesis, voice-over, and editing. Supports OpenAI DALL-E, Replicate models, LumaAI, Runway, and FFmpeg editing.
portfolio-watcher
Monitor stock/crypto holdings, get price alerts, track portfolio performance
portainer
Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git.
portable-tools
Build cross-device tools without hardcoding paths or account names
polymarket
Trade prediction markets on Polymarket. Analyze odds, place bets, track positions, automate alerts, and maximize returns from event outcomes. Covers sports, politics, entertainment, and more.
polymarket-traiding-bot
No description provided.
polymarket-analysis
Analyze Polymarket prediction markets for trading edges. Pair Cost arbitrage, whale tracking, sentiment analysis, momentum signals, user profile tracking. No execution.
polymarket-agent
Autonomous prediction market agent - analyzes markets, researches news, and identifies trading opportunities
polymarket-5
Query Polymarket prediction markets. Use for questions about prediction markets, betting odds, market prices, event probabilities, or when user asks about Polymarket data.