Main Site ↗

ffmpeg-keyframe-extraction

by benchflow-ai890173GitHub

Extract key frames (I-frames) from video files using FFmpeg command line tool. Use this skill when the user needs to pull out keyframes, thumbnails, or important frames from MP4, MKV, AVI, or other video formats for analysis, previews, or processing.

Unlock Deep Analysis

Use AI to visualize the workflow and generate a realistic output preview for this skill.

Powered by Fastest LLM

Development
Compatible Agents
Claude Code
Claude Code
~/.claude/skills/
Codex CLI
Codex CLI
~/.codex/skills/
Gemini CLI
Gemini CLI
~/.gemini/skills/
O
OpenCode
~/.opencode/skills/
O
OpenClaw
~/.openclaw/skills/
GitHub Copilot
GitHub Copilot
~/.copilot/skills/
Cursor
Cursor
~/.cursor/skills/
W
Windsurf
~/.codeium/windsurf/skills/
C
Cline
~/.cline/skills/
R
Roo Code
~/.roo/skills/
K
Kiro
~/.kiro/skills/
J
Junie
~/.junie/skills/
A
Augment Code
~/.augment/skills/
W
Warp
~/.warp/skills/
G
Goose
~/.config/goose/skills/
SKILL.md

Input Seeking (Major Difference)

  • -ss BEFORE -i: fast seek, may be inaccurate—starts from nearest keyframe
  • -ss AFTER -i: frame-accurate but slow—decodes from start
  • Combine both: -ss 00:30:00 -i input.mp4 -ss 00:00:05—fast seek then accurate trim
  • For cutting, add -avoid_negative_ts make_zero to fix timestamp issues

Stream Selection

  • Default: first video + first audio—may not be what you want
  • Explicit selection: -map 0:v:0 -map 0:a:1—first video, second audio
  • All streams of type: -map 0:a—all audio streams
  • Copy specific: -map 0 -c copy—all streams, no re-encoding
  • Exclude: -map 0 -map -0:s—all except subtitles

Encoding Quality

  • CRF (Constant Rate Factor): lower = better quality, larger file—18-23 typical for H.264
  • -preset: ultrafast to veryslow—slower = smaller file at same quality
  • Two-pass for target bitrate: first pass analyzes, second pass encodes
  • -crf and -b:v mutually exclusive—use one or the other

Container vs Codec

  • Container (MP4, MKV, WebM): wrapper format holding streams
  • Codec (H.264, VP9, AAC): compression algorithm for stream
  • Not all codecs fit all containers—H.264 in MP4/MKV, not WebM; VP9 in WebM/MKV, not MP4
  • Copy codec to new container: -c copy—fast, no quality loss

Filter Syntax

  • Simple: -vf "scale=1280:720"—single filter chain
  • Complex: -filter_complex "[0:v]scale=1280:720[scaled]"—named outputs for routing
  • Chain filters: -vf "scale=1280:720,fps=30"—comma-separated
  • Filter order matters—scale before crop gives different result than crop before scale

Common Filters

  • Scale: scale=1280:720 or scale=-1:720 for auto-width maintaining aspect
  • Crop: crop=640:480:100:50—width:height:x:y from top-left
  • FPS: fps=30—change framerate
  • Trim: trim=start=10:end=20,setpts=PTS-STARTPTS—setpts resets timestamps
  • Overlay: overlay=10:10—position from top-left

Audio Processing

  • Sample rate: -ar 48000—standard for video
  • Channels: -ac 2—stereo
  • Audio codec: -c:a aac -b:a 192k—AAC at 192kbps
  • Normalize: -filter:a loudnorm—EBU R128 loudness normalization
  • Extract audio: -vn -c:a copy output.m4a—no video, copy audio

Concatenation

  • Same codec/params: concat demuxer—-f concat -safe 0 -i list.txt -c copy
  • Different formats: concat filter—-filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1"
  • list.txt format: file 'video1.mp4' per line—escape special characters
  • Different resolutions: scale/pad to match before concat filter

Subtitles

  • Burn-in (hardcode): -vf "subtitles=subs.srt"—cannot be turned off
  • Mux as stream: -c:s mov_text (MP4) or -c:s srt (MKV)—user toggleable
  • From input: -map 0:s—include subtitle streams
  • Extract: -map 0:s:0 subs.srt—first subtitle to file

Hardware Acceleration

  • Decode: -hwaccel cuda or -hwaccel videotoolbox (macOS)
  • Encode: -c:v h264_nvenc (NVIDIA), -c:v h264_videotoolbox (macOS)
  • Not always faster—setup overhead; benefits show on long videos
  • Quality may differ—software encoding often produces better quality

Common Mistakes

  • Forgetting -c copy when not re-encoding—defaults to re-encode, slow and lossy
  • -ss after -i for long videos—takes forever seeking
  • Audio desync after cutting—use -async 1 or -af aresample=async=1
  • Filter on stream copy—filters require re-encoding; -c copy + -vf = error
  • Output extension doesn't set codec—output.mp4 without -c:v uses default, may not be H.264

Source: https://github.com/benchflow-ai/SkillsBench#tasks-no-skills-mario-coin-counting-environment-skills-ffmpeg

Content curated from original sources, copyright belongs to authors

Grade B
-AI Score
Best Practices
Checking...
Try this Skill

User Rating

USER RATING

0UP
0DOWN
Loading files...

WORKS WITH

Claude Code
Claude
Codex CLI
Codex
Gemini CLI
Gemini
O
OpenCode
O
OpenClaw
GitHub Copilot
Copilot
Cursor
Cursor
W
Windsurf
C
Cline
R
Roo
K
Kiro
J
Junie
A
Augment
W
Warp
G
Goose