Extract Video Frames to a Contact Sheet

Pick a video — frames are sampled by interval, fps or scene change and tiled into a single thumbnail grid in your browser. Nothing is uploaded.

Try:
Contact sheet

Turn a video into a contact sheet

Load a video and this tool samples frames from it and tiles them into a single contact sheet — a grid of thumbnails you can scan at a glance to storyboard a clip, pick a cover image, or review scene changes. Everything runs locally in your browser with ffmpeg (WebAssembly); the video is never uploaded.

Choose how frames are sampled:

Then set the grid (columns × rows), the thumbnail width, a background color for the gaps, and PNG or JPG output.

Worked example

Upload a 12-second clip, pick Every N seconds with rate 2, a 4 × 3 grid, 240 px thumbnails and a white background. The tool samples one frame every 2 seconds (6 frames) and lays them into the top of a 4-column, 3-row sheet — roughly 968 × 372 px — with the unused cells filled white. Right-click the result to save it, or use the Download link.

Limits and good to know

FAQ

Can I download each frame as a separate image or a ZIP?

Not from this page — it produces one contact-sheet image (a grid of frames), which the browser can render and download as a single file. To grab one exact frame at a chosen timestamp as its own PNG, use the companion Extract a Video Frame tool instead.

What's the difference between "interval" and "fps" mode?

They're two ways to say the same thing. Interval is seconds between frames (a rate of 2 means one frame every 2 seconds). fps is frames per second (a rate of 2 means two frames each second). Use whichever is easier to think in — interval for slow storyboards, fps when you want several frames a second.

How do I capture the cuts / distinct shots in a video?

Pick At scene changes and set the sensitivity (value) between 0 and 1. Lower values (around 0.20.3) catch more, subtler changes; higher values keep only big jumps. ffmpeg scores how different each frame is from the previous one and keeps the ones above your threshold, plus the opening frame.

Which video formats work?

Anything ffmpeg can decode in the browser — MP4/H.264, WebM, MOV and more. The output sheet is a PNG (lossless, best for screen recordings and text) or JPG (smaller, good for photographic footage).

Is my video uploaded anywhere?

No. The video is decoded and the sheet is built entirely in your browser with WebAssembly ffmpeg. Nothing leaves your device, and there's no account or upload step.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool extract-frames 'url=https://example.com/input' 'mode=interval' 'columns=4' 'rows=3' 'width=240' 'format=png'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/extract-frames/?url=https://example.com/input&mode=interval&columns=4&rows=3&width=240&format=png