How to extract video frames for ai and ml training data
- Step 1Load the source clip — Drop an MP4, MOV, MKV, WebM, or AVI onto the tool. It is processed locally in the browser via FFmpeg.wasm and never uploaded. One clip per run.
- Step 2Pick a survey density — For a quick diversity check, 5x5 (25 frames) is plenty. For a finer look at a longer clip, go up to 10x10 (100 frames). Columns and Rows each accept 1-10.
- Step 3Set Tile width to judge quality — Use 320-640px so you can actually assess sharpness, motion blur, and class detail in each survey frame. Height auto-scales to the source aspect.
- Step 4Generate the survey sheet — Run it. The tool probes duration, samples one frame per equal interval across the clip, and tiles them into one PNG. Inspect the grid to gauge coverage and quality.
- Step 5Decide your extraction plan — From the survey, choose how many frames you need and whether even-time sampling is enough or you need scene-aware sampling. The grid itself is the planning artefact, not the dataset.
- Step 6Extract the actual training frames — For individual frame files, use thumbnail-extractor. To sample at content changes instead of fixed intervals, get cut timestamps from scene-detector and extract there.
Survey grid vs full extraction
What this tool does versus what a dataset pipeline needs next.
| Need | This tool (frame-grid-maker) | Use instead |
|---|---|---|
| Eyeball clip diversity / quality | Yes — one PNG survey of up to 100 frames | n/a |
| Individual image files per frame | No — output is one tiled PNG | thumbnail-extractor |
| Sample at scene changes | No — samples by fixed time interval | scene-detector for cut times |
| More than 100 frames in one pass | No — 10x10 max | thumbnail-extractor or split the clip |
Survey density guidance
Total frames = columns x rows. Higher density = finer diversity read.
| Grid | Frames | Survey use |
|---|---|---|
| 3x3 | 9 | Fast sanity check that the clip is usable |
| 5x5 | 25 | Standard diversity / quality survey |
| 8x8 | 64 | Finer look at a longer or varied clip |
| 10x10 | 100 | Densest survey (the maximum grid) |
Tier limits for video tools
File-size and batch limits per plan. No duration cap.
| Tier | Max file size | Files per batch |
|---|---|---|
| Free | 1 GB | 1 |
| Pro | 10 GB | 5 |
| Pro + Media | 100 GB | 50 |
| Developer | 100 GB | Unlimited |
Cookbook
Dataset-scoping recipes, with the exact options and the next pipeline step.
Quick diversity survey of a clip
Before adding a clip to a dataset, run a 5x5 to confirm it has the variety and quality you expect.
Options: Columns=5 Rows=5 Tile width=480 Frames=25 (evenly spaced) Output: clip-grid.png -> eyeball class variety & blur
Dense 10x10 survey of a long clip
For a long, varied source, a 10x10 maps the whole runtime so you can spot empty or redundant stretches before extracting.
Options: Columns=10 Rows=10 Tile width=320 Frames=100, evenly spaced across the duration Output: a dense diversity map
Survey then extract individual frames
The grid scopes the clip; the actual frames come from the extractor. This is the canonical two-step.
1. frame-grid-maker (5x5) -> survey PNG
2. thumbnail-extractor -> individual frame files
/video-tools/thumbnail-extractorScene-aware sampling instead of even-time
If the survey shows long static stretches, even-time sampling wastes frames. Sample at content changes instead.
1. frame-grid-maker -> see static stretches
2. scene-detector -> cut timestamps (JSON)
/video-tools/scene-detector
3. extract frames at the cut timesMatch survey resolution to model input
Set tile width near your model's expected input to judge whether detail survives at that scale.
Model input ~ 224px Options: Columns=4 Rows=4 Tile width=224 Output: frames at roughly model-input scale
Edge cases and what actually happens
Output is one PNG, not a dataset
Not a frame exporterThis tool emits a single tiled PNG — it does not produce individual image files or a ZIP of frames. Use it to survey and plan; extract the actual dataset frames with thumbnail-extractor.
Even-time sampling can miss rare classes
Sampling caveatFrames are taken at fixed time intervals, so a brief or rare event between samples won't appear. If the survey shows that risk, drive extraction from scene-detector cut points instead of even time.
Max 100 frames per survey
ClampedColumns and rows cap at 10 each, so the densest survey is 10x10 = 100 frames. For more, split the clip into segments and survey each, or extract frames directly.
Tiles too small to judge quality
Adjust tile widthAt the 120px minimum, motion blur and fine detail are hard to assess. Raise tile width to 320-640px so the survey actually tells you whether frames are usable.
Duration not readable
ErrorSampling needs a known duration; if the container lacks it, the tool throws "Could not determine video duration." Remux to a clean MP4 and retry.
Highly static footage
ExpectedEven sampling of near-static footage yields near-duplicate cells — useful information (the clip is low-variety) but not useful frames. Scene-aware sampling or a different source is the fix.
Source exceeds tier size limit
RejectedA file over your plan's ceiling (1 GB Free, 10 GB Pro, 100 GB higher tiers) will not process. Survey from a smaller proxy or upgrade the tier.
Variable frame rate source
SupportedTime-based sampling handles VFR footage by timestamp, so the survey frames are evenly spaced in time regardless of frame-rate jitter.
Single file per run
Single file onlyThe tool surveys one clip at a time and does not batch. Run it per source file when scoping a multi-clip dataset.
Aspect-ratio distortion expectations
PreservedEach tile keeps the source aspect ratio — no stretching to a square cell. So the survey reflects the true frame shape your pipeline will ingest.
Frequently asked questions
Does this export individual frames for my dataset?
No. It produces one tiled PNG survey, not separate image files. Use it to scope a clip, then extract the actual frames with thumbnail-extractor.
How are the survey frames chosen?
By equal time intervals across the whole clip — cols x rows frames spread uniformly from near the start to near the end. They are not chosen by content or scene change.
How many frames can the survey show?
Up to 100 (a 10x10 grid). Columns and rows cap at 10 each. For more, split the clip or use the extractor directly.
What if my footage has rare events between samples?
Even-time sampling can miss them. If the survey suggests that, sample at content changes instead: get cut timestamps from scene-detector and extract frames there.
Will my proprietary footage be uploaded?
No. Everything runs in your browser via FFmpeg.wasm. Licensed or proprietary source footage never leaves your machine.
Can I match the survey resolution to my model input?
Yes — set tile width near your model's input size (e.g. 224px) to judge whether detail survives at that scale. Range is 120-1280px.
Does it handle variable frame rate video?
Yes. Sampling is by time, so VFR camera or screen-capture footage gives evenly time-spaced survey frames regardless of frame-rate jitter.
What output format do I get?
A single PNG named <yourfile>-grid.png. PNG is lossless, so you judge frame quality without compression artefacts confusing the assessment.
What input formats are supported?
MP4, MOV, MKV, WebM, and AVI — covering most dataset source media without a conversion step.
How large a source can I survey?
Free up to 1 GB, Pro 10 GB, Pro + Media and Developer 100 GB. No duration cap — only file size. Survey from a proxy if the master is too big.
Why do my survey cells look identical?
Either the clip is highly static, or the grid is too dense for a short clip so the interval is tiny. Both mean low diversity in that span — useful to know before building the set.
Is the survey hardware-accelerated?
No. It runs through FFmpeg.wasm in the browser on your CPU, decoding only the sampled frames. Speed depends on your machine and the file size.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.