To get a single video frame, you point a browser-based tool at a time position inside a short local video, and the browser seeks to that point, decodes the nearest frame at its native pixel size, draws that frame onto a canvas, and saves the result as a downloadable PNG, all without uploading the source file. Frame rate is the missing context most readers expect: every video stores a fixed or variable number of frames per second, and the time you type in is converted to a position along that timeline. A 30 fps clip contains 30 evenly spaced frames each second, so requesting the 10-second mark targets frame index 300. The browser, however, does not guarantee that the frame it hands back matches that index. Keyframes, variable frame rates, edit lists, and codec-specific timestamp rounding can all nudge the decoder to a nearby frame instead. Understanding this gap is the difference between expecting frame-accurate output and accepting "the closest frame the browser can decode." This guide explains the relationship between frame rate and frame extraction, walks through the exact steps for using the Video Frame Extractor, and lays out the limits you should expect before you start.

What "Getting a Video Frame" Actually Means
When a reader types "how to get video frame rate," they often mean one of two things: identify the frames-per-second value of a file, or capture a single still image from the file. The two operations look similar but answer different questions. Detecting the frame rate usually involves reading the container's metadata or counting frames over a known interval. Extracting a frame is a different task: you specify a moment in the video and download a still image of what is on screen at that moment.
The Video Frame Extractor performs the second task. It does not report a number like "23.976 fps" or "29.97 fps" in a readout, because the browser's media decoder is asked to seek to a time and return a decoded image, not to inspect packet timestamps. What you get instead is the closest decoded frame to your requested time, exported as a PNG that keeps the original decoded pixel dimensions.
This matters for editorial work where the exact frame number is critical, including color grading passes, broadcast finishing, or motion analysis. For thumbnails, references, slide decks, and social posts, the closest decoded frame is almost always good enough, and the speed and zero-upload behavior outweigh the small frame offset.
How Frame Rate Affects the Frame You Capture
Frame rate sets the temporal granularity of the video. A 24 fps clip holds 24 frames per second, a 30 fps clip holds 30, and a 60 fps clip holds 60. The math is simple: target frame index equals requested time in seconds multiplied by frames per second.
Worked example: a 24 fps video, request time 8.5 seconds.
- Frames per second: 24
- Time requested: 8.5 seconds
- Frame index at that time: 8.5 × 24 = 204
That tells you which numbered source frame sits at the 8.5-second mark if every frame is evenly spaced. The browser, however, may return frame 200 or frame 208 if the closest I-frame or sync sample is offset by a few milliseconds. Variable frame rate footage, where the fps changes over the clip, makes the calculation harder still, because there is no single multiplier you can apply across the whole timeline.
This is why the tool records the requested time rather than the frame number it actually returned. The displayed time stays a media timeline position, not a guarantee of source-frame precision.
How to Capture One Frame from a Local Video
Use the Video Frame Extractor when you want a single still from a short clip and prefer that everything stays in your browser. The flow is built around three verified steps:
- Choose one supported local video and wait for its duration and preview to load. Supported containers are MP4, WebM, MOV, M4V, and Ogg, subject to the browser's codec support for the audio and video streams inside the container.
- Enter a frame time between zero and the displayed duration, including decimals when needed. Fractional seconds (for example, 12.5 or 0.083) are accepted, and the input is validated against the video's reported duration before seeking.
- Select Extract PNG frame, verify the still in the preview area, and download the local PNG. The output filename includes the selected time, and the PNG keeps the decoded frame's native pixel dimensions with no resizing, cropping, sharpening, or filter.
The video file is processed in the current tab using HTMLMediaElement seeking, Canvas drawImage, and PNG canvas encoding. Decode, seek, canvas, and encoding failures are surfaced as messages rather than producing an empty download, so you can correct the input and try again without losing your place.
Why Browser Seeking Is Rarely Frame-Accurate
Browser video decoders are optimized for smooth playback, not for jumping to a specific frame number on demand. When you set currentTime on a media element, the decoder looks for the nearest keyframe (I-frame) it can decode quickly, then decodes forward or backward from there to the requested position. The actual frame returned may be a few frames earlier or later than the one your time input would suggest.
Four factors widen that gap:
| Factor | Effect on seek precision |
|---|---|
| Keyframe interval | Long GOPs (group of pictures) force larger jumps between decodable positions. |
| Variable frame rate | VFR footage has unevenly spaced frames, so a single fps multiplier cannot describe the whole clip. |
| Edit lists and CTTS offsets | Container metadata can shift presentation times away from decode times, confusing time arithmetic. |
| Codec timestamp rounding | Some encoders round timestamps to the nearest multiple, which nudges the requested time off by one frame. |
If you need a precise numbered frame, seek slightly before your target, then step forward by small decimal increments (for example, 0.033 s at 30 fps) until the still you see matches the action you want. For frame-accurate editorial work, the contract recommends a dedicated desktop video tool instead.
Supported Files, Codecs, and Safety Limits
The tool respects a shared video safety policy that bounds the file size, duration, and dimensions. Files must be at most 500 MiB, no longer than five minutes, no more than 4096 pixels per side, and no greater than 3840 × 2160 pixels in area. Anything outside those bounds is rejected before any seek attempt, so a heavy 4K master or a long interview will need trimming or transcoding first.
Browser codec support controls which files actually open inside the tool. MP4 is a container, not a codec, and an MP4 with an audio or video stream the browser does not support will fail to load even though the extension is on the allowed list. The same caveat applies to MOV and M4V files. WebM and Ogg rely on the browser's bundled decoders for VP8, VP9, AV1, and Opus or Vorbis, and absent those, the file is treated as unsupported.
| Container | Common codecs inside | Open behavior |
|---|---|---|
| MP4 | H.264, H.265, AAC | Opens where the browser ships the matching decoder. |
| WebM | VP8, VP9, AV1, Opus, Vorbis | Opens on browsers that bundle VP9 or AV1. |
| MOV | H.264, ProRes, AAC, ALAC | Container recognized; codec-dependent result. |
| M4V | H.264, AAC | Often treated like MP4; codec-dependent result. |
| Ogg | Theora, Vorbis, Opus | Opens where the browser ships Theora or Opus. |
If your file fails to load, the fix is usually to transcode the source once into a widely supported codec combination, rather than to keep retrying the same container.
When You Need a Dedicated Desktop Video Editor
A browser-based frame grabber covers the common case: one still, one time position, one PNG. Several jobs fall outside that envelope and benefit from a desktop tool.
- Frame-accurate extraction. Tools that read packet timestamps and step through decoded frames one by one can hit a specific numbered frame reliably, which the browser cannot guarantee.
- Batch extraction. Pulling dozens of stills at fixed intervals is faster with a CLI script or a batch-mode video editor than with one round-trip per still in a browser tab.
- HDR and color-managed output. The browser decoder typically outputs SDR; HDR transfer functions and color spaces need a tool that respects the mastering metadata.
- Alpha workflows. The PNG preserves transparency only if the browser's decoded frame provides it, which is rare for typical video; a dedicated pipeline is safer for true alpha work.
- Long footage and unsupported codecs. Anything beyond the five-minute, 500 MiB safety limit, or any codec the browser cannot decode, belongs in a desktop NLE or FFmpeg-based pipeline.
For thumbnails, references, slide decks, social posts, and quick stills from media you own or may process, the local browser flow is usually the fastest path because the source never leaves your machine.
For readers who want to compare this approach with frame-by-frame extraction or look at related use cases such as ultrasound clips, the in-depth guide Capture a Video Frame as a PNG: Exact Time, Full Size covers the same tool from a precision-focused angle. The mechanics of browser seeking are documented by MDN's HTMLMediaElement.currentTime reference, and the canvas step that produces the PNG follows the CanvasRenderingContext2D.drawImage API.