Take frames out of a video by index rather than by guesswork. The frame rate is measured, every image is labelled with the frame it came from, and they all come down as one ZIP archive.
Initializing in your browser…
Take the soundtrack out of a video. Copy the existing track sample for sample, or re-encode to MP3, M4A, AAC, OGG, WAV or FLAC with the cost of that choice stated before you run it.
Cut a clip out of a video, choosing whether the cut lands on the exact frame (re-encodes to MP4) or leaves the streams untouched (instant and lossless, but only at a keyframe). The result says which ran and reads the real length back off the file.
Convert a video between MP4, WebM, OGG, MOV, AVI and MKV, each naming the codecs it really writes and each producing a file that actually plays. One quality dial normalised into four different encoder scales.
You need a spread of candidate thumbnails, and you need to know which frame each one is.
Input
video.mp4, frame rate measured at 30 fps · 10 frames, evenly inside
Output
Frames 5, 10, 16, 21, 27, 32, 38, 43, 49 and 54, each labelled, all in one ZIP
A frame occupies an interval rather than an instant, so each seek is aimed at the middle of the frame it wants and cannot round onto the neighbour. The frame rate is measured from the video rather than assumed, because a video element does not report one and every number above depends on it.
Take frames out of a video as images, by index rather than by guesswork. The browser decodes the frames itself and draws them to a canvas, so nothing is re-encoded, and every image is labelled with the frame it came from.
Pull a set of candidate frames from a video and pick the one that works as a poster image.
Take an even spread of frames to see what is in a long clip at a glance.
Step to a specific frame and capture it, with the frame number written into the filename.
A frame occupies an interval rather than an instant: frame n of a 30 fps clip is on screen from n divided by 30 until the next one starts. Seeking to exactly that boundary lets floating point rounding decide between the frame you wanted and the one before it, so every seek here is aimed at the MIDDLE of the frame it wants, half a frame period clear of both edges. The frame numbers are what the page shows and what the filenames carry.
That needs a frame rate, and a video element does not report one. It is measured instead: the browser can be asked for the presentation time of consecutive frames, so playing a fraction of a second and taking the median gap gives the rate, which is then snapped to the nearest standard value. Where a browser does not support that, the page says the rate could not be measured and that 30 fps is being assumed, rather than quietly assuming it.
There are three ways to choose which frames. Evenly inside splits the clip into equal parts and takes the joins, which never touches the very first or very last frame; that is usually what a contact sheet wants, because the first frame of a video is so often black. First to last starts on frame zero and ends on the final frame with the rest spread between, which is what you want when the opening frame is the thumbnail. Every N seconds takes a frame at a fixed interval and lets the count follow from the length. The page says which rule is in force and lists the frame numbers before anything runs.
Capturing waits for the frame to be presented rather than for the seek to finish, where the browser supports that signal, and the page reports how many of the captures were confirmed that way. Manual capture takes whatever frame the playhead is on, with single frame stepping either side of it. All the frames come down as one ZIP archive rather than as one download prompt each, which is what a browser blocks after the first few.
The frames are decoded by the browser and drawn to a canvas, then encoded once as JPEG, PNG or WebP. PNG is lossless, so a PNG is exactly the decoded frame.
Every image is labelled with its frame number and the time the player really landed on. The seek is aimed at the middle of the frame rather than its boundary, and where the browser supports it the capture waits for that frame to be presented rather than for the seek to end.
Under the default rule it deliberately does not: the first frame of a video is very often black or a fade. Switch to First to last if the opening frame is the one you want.
Yes, as a single ZIP. Firing one download per image is what browsers block after the first few, so they come down as one archive.
Video is decoded and re-encoded on your own device. Large files never leave your machine.