Make a contact sheet from a video

Samples frames across the video and lays them out in a grid as a single image.

ffmpeg -i https://cdn.rendobar.com/assets/examples/sample.mp4 -vf "select='not(mod(n\\,30))',scale=320:-2,tile=3x3" -frames:v 1 -t 5 out.png
Encode
217 ms
Output
127.8 KB
Cost
$0.0016
Result
960x540

job_193c801f267c4d29

The part everyone gets wrong

tile consumes frames to fill the grid, so if your select expression yields fewer than the grid needs, FFmpeg writes nothing at all rather than a partial sheet. Sample more densely than you think you need, and -frames:v 1 stops it writing a second sheet.

Frequently asked questions

How do I ffmpeg contact sheet?

Samples frames across the video and lays them out in a grid as a single image.

What goes wrong most often?

tile consumes frames to fill the grid, so if your select expression yields fewer than the grid needs, FFmpeg writes nothing at all rather than a partial sheet. Sample more densely than you think you need, and -frames:v 1 stops it writing a second sheet.

Do I need FFmpeg installed?

Not with Rendobar. The command on this page ran through the API against a URL, with no local FFmpeg and no server. The job id below it is the job that produced these numbers.

Run this without installing FFmpeg

This exact command ran through the API against a URL.