This skill guides LLM agents to extract frames from video files using FFmpeg. It provides complete workflow for frame extraction including environment setup, parameter configuration, and command execution.
Primary method: FFmpeg (fast and reliable)
Fallback method: OpenCV (if FFmpeg unavailable)
Before extracting frames, check if FFmpeg is installed:
ffmpeg -version
If FFmpeg is not installed, see FFmpeg Installation section below.
Before extracting frames, the LLM MUST confirm these parameters with the user:
| Parameter | Description | Example |
|-----------|-------------|---------|
| output_path | Directory to save extracted frames | Default: ./tmp/frames |
| frame_rate | Frames per second to extract | 0.25 (1 frame every 4 seconds) |
| scale | Short side resize target in pixels (optional) | 640 (short side → 640px) |
Parameter Calculation Guide:
frame_rate = 1/X
frame_rate = 0.25
frame_rate = 0.1
frame_rate = 1
Generate and execute the FFmpeg command:
Basic Command (no resize):
ffmpeg -hide_banner -loglevel error -i "{video_path}" -vf "fps={frame_rate}" -fps_mode vfr -q:v 2 -f image2 "{output_path}/%06d.jpg"
With Short Side Resize (recommended for analysis):
ffmpeg -hide_banner -loglevel error -thread_queue_size 512 -i "{video_path}" -vf "fps={frame_rate},scale='if(gt(iw,ih),-2,{scale}):if(gt(iw,ih),{scale},-2)':flags=lanczos" -fps_mode vfr -q:v 2 -f image2 -atomic_writing 1 "{output_path}/%06d.jpg"
Parameter Breakdown:
| Flag | Purpose |
|------|---------|
| -hide_banner | Suppress build info |
| -loglevel error | Quiet mode, show only errors |
| -thread_queue_size 512 | Increase thread queue for large files |
| -vf "fps={rate}" | Set frame extraction rate |
| -fps_mode vfr | Variable frame rate (skip duplicates) |
| -q:v 2 | JPEG quality (1-31, lower = better) |
| -atomic_writing 1 | Atomic file write (prevent corruption) |
| %06d.jpg | Sequential naming: 000001.jpg, 000002.jpg... |
After extraction, verify the output:
ls {output_path}/*.jpg | wc -l
ls -lh {output_path}/*.jpg | head -5
Option 1: winget (Recommended)
winget install ffmpeg
Option 2: Chocolatey
choco install ffmpeg
Option 3: Manual Download
C:\tools\ffmpeg)
setx PATH "$PATH;C:\tools\ffmpeg\bin
Verify Installation:
ffmpeg -version
sudo apt update
sudo apt install ffmpeg
Verify Installation:
ffmpeg -version
sudo dnf install ffmpeg
brew install ffmpeg
frame_rate = 0.25
scale = 640
frame_rate = 0.1
scale = 0 (no resize)
frame_rate = 1
video_duration = 600 seconds
expected_frames = 600
Frames are saved with sequential naming:
output_path/
├── 000001.jpg
├── 000002.jpg
├── 000003.jpg
└── ...
The sequential naming (%06d) ensures frames are in temporal order regardless of original frame numbers.
| Error | Solution |
|-------|----------|
| ffmpeg: command not found | Install FFmpeg first |
| No such file or directory | Check video_path is correct |
| Permission denied | Check write permissions for output_path |
| Output directory not empty | Clear or use different output path |
-2 instead of -1 to ensure dimensions are divisible by 2 (better codec compatibility)
-fps_mode vfr (variable frame rate) skips duplicate frames when seeking
-q:v 2 for high quality JPEG (range 1-31, default 31)
共 1 个版本