← Back to all posts

How to capture video frames locally — batch intervals and format advice

Introduces taking video screenshots with a browser video + Canvas, how to choose a batch interval, the PNG/JPG trade-off, and the features and limits of the TwoThink video screenshot tool.

Making a tutorial cover, checking the subtitles or picking sticker material often means pulling a few frames "out of" a video. There is no need to upload it to a screenshot site — the browser can do it.

The principle is simple

After you load an MP4 / WebM locally, use a <video> element to seek to a time, then draw it onto a canvas with drawImage and export a PNG or JPG. TwoThink Video Screenshot takes this route, without loading ffmpeg, so the first screen is lighter.

Manual or batch?

  • Manual: drag the progress bar to the frame you want and press "Capture this frame"
  • Batch: capture serially at 1 / 2 / 5 / 10 second intervals (avoiding seek conflicts)

For batch work, trim the intro and outro with Trim Video first — the number of frames stays under control.

Format and size

  • Keeping a full-quality copy: choose PNG
  • Sending it in a chat and saving space: choose JPG, and quality 0.9 is usually enough
  • Preview only: scale it down to 720 or 480 pixels wide

Known limitations (honestly stated)

  • Local files only; a remote video triggers cross-origin canvas tainting
  • Seeking with currentTime is not frame accurate, so there may be a small offset
  • After a seek, some encodings occasionally produce a black frame — the tool retries once automatically

For animations use Video to GIF, and for a stitched long picture use Video to Long Image.