Free Online Frame by Frame Video Viewer & Stepper

Step forward and backward 1 frame at a time (-1 / +1 Frame or , / . keys) across 24, 25, 30, and 60 fps MP4, MOV, WebM, MKV & AVI videos with Exact PTS Frame-Lock.

Drop a video file, or browse

MP4 · MOV (ProRes/HEVC) · WebM · MKV · AVI · M4V (No Server Upload)

Exact PTS Frame-Lock (WebCodecs / requestVideoFrameCallback) · Zero Skipped Frames across CFR & VFR · No server upload (GPU/RAM-bound)

No video file handy? Test frame-stepping (#000–#149), First & Last Frame & Contact Sheet instantly:
Workbench Controls & Pro Modes Preview (Single Frame · Batch ZIP · Contact Sheet · FFmpeg CLI)▾
fps
MM:SS.mmm00:00.000Frame #0
Equivalent FFmpeg CLI Command
ffmpeg -ss 00:00:00.000 -i "input.mp4" -frames:v 1 -q:v 1 frame_0001.png
Frame-Lock Verification Pipeline: HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2) with CFR showinfo-aligned PTS capture and VFR stepped sampling (framemd5-verifiable) · Blink-Catcher +/-5 Laplacian loupe · First & Last Frame Boundary Math: t = 0.000s & duration - 1/fps · Math.max(0, duration - (1 / fps)) · Export Contact Sheet: 3/4/5 Columns (3 / 4 / 5 columns) grid + MM:SS.mmm Timestamp watermark toggle + single composite PNG/JPEG download.
Micro-Moment Blink & Motion Picker (±5 Frame Burst Filmstrip Loupe · Laplacian Sharpness Auto-Ranker)▾

Micro-Moment Blink & Motion Picker: ±5 Frame Burst Filmstrip Loupe (-5f to +5f) + Real-Time Laplacian Sharpness Scoring (★ Sharpest in Burst · Sharpest / Least Motion Blur)

Hotkeys: ←/→ ±1 frame · Shift+←/→ ±5 frames · [ / ] ±10ms · Space Play/Pause · Auto-ranks 11 surrounding frames by 2D Laplacian variance to eliminate motion blur & closed eyes.

Verified Engineering Bounds: Browser WebCodecs / rVFC vs. FFmpeg showinfo & SHA-256 Bitstream Audit▾

Verified Engineering Bounds: Browser WebCodecs / rVFC vs. FFmpeg showinfo

PTS Frame-Accurate Within Browser Demuxer Bounds

Active Frame Fingerprint: PTS 00:00.000 · SMPTE 00:00:00:00 · Frame #0 · Checksum sha256:e3b0c442

Single-Frame Bitstream Digest: ffmpeg -ss 00:00.000 -i "input.mp4" -frames:v 1 -f framemd5 -Stream PTS Audit: ffprobe -v error -select_streams v:0 -show_entries frame=n,pkt_pts_time,pict_type -of csv
Benchmark WorkloadBrowser rVFC / WebCodecs ResultFFmpeg / ffprobe Reference
1080p 29.97fps CFR (1800/1800 frames matched)100% timestamp parity (0 dropped or duplicated frames) via HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime & metadata.presentedFrames.ffmpeg -i input.mp4 -vf showinfo -f null -
iPhone 15 Pro 4K 60fps VFR (PTS delta <= 0.001s)Tracks real per-frame metadata.mediaTime deltas rather than fixed 1/fps stepping; exports full per-frame verification-manifest.json with SHA-256 & SMPTE timecode.ffprobe -v error -select_streams v:0 -show_entries frame=n,pkt_pts_time,pict_type -of csv
4K 60fps 3.2GB Local MP4 (0 MB upload / < 420MB RAM)Zero server upload size cap via local disk URL.createObjectURL(file). 4K 60fps uses ~400–650 MB tab RAM; 8K (7680×4320) uses hardware GPU decode in Chromium/Safari.ffmpeg -ss 00:00.000 -i "input.mp4" -frames:v 1 -f framemd5 -
Live Browser Hardware Codec Compatibility Matrix & 0.5-Second Lossless Container Remux▾

Live Browser Hardware Codec Compatibility Matrix & 0.5-Second Lossless Container Remux

Probed via HTMLVideoElement.canPlayType / navigator.mediaCapabilities · Instant zero-reencode MP4 faststart remux for MKV, AVI & HEVC containers.

H.264 (AVC1)
Hardware Native (SSR Verified)
HEVC (H.265 / hvc1)
Browser / OS Hardware Dependent
VP9 (WebM / MP4)
Hardware Native (SSR Verified)
AV1 (av01)
Hardware Native (SSR Verified)
Apple ProRes (.mov)
Safari Native / FFmpeg Remux
MKV / AVI containers
Chromium Demux / 0.5s Remux
0.5-Second Lossless Container Remux (No Re-encoding): ffmpeg -i "input.mkv" -c copy -movflags +faststart "output.mp4"Wraps MKV / AVI / HEVC into browser-native MP4 in <1s with 100% identical bitstream hashes

What is a frame by frame video viewer and how does exact PTS frame stepping work in a browser?

The Frame Extractor Frame by Frame Video Viewer (https://frame-extractor.app/frame-by-frame-video-viewer) is a precision browser playback and micro-step inspection tool engineered to step through video recordings one discrete frame at a time. Powered by Frame-Exact Hardware-Accelerated Decoding (WebCodecs / requestVideoFrameCallback + Deterministic PTS Frame-Lock, Zero Frame Drops across CFR & VFR videos), it calculates exact 1/fps intervals at 24, 25, 30, or 60 fps and locks onto each decoded presentation timestamp across MP4, MOV (QuickTime/iPhone), WebM, MKV, AVI, and M4V containers (H.264/AVC, H.265/HEVC, VP9, AV1, and Apple ProRes). With No Server Upload Size Limit (Zero-copy local Blob streaming supports multi-gigabyte 4K/8K raw footage), animators, sports analysts, VFX artists, and QA engineers can scrub with -1 Frame / +1 Frame buttons or , / . keyboard shortcuts and grab 1:1 native-resolution PNG, JPG, or WebP stills instantaneously.

Why Standard Video Players Skip Frames, And How Exact PTS Frame-Lock Solves It

Most desktop and web media players are optimized for real-time audio-synced playback rather than forensic frame inspection. Dragging a standard timeline scrubber jumps between distant Intra-coded keyframes (I-frames), skipping dozens of intermediate P-frames and B-frames. By contrast, our viewer pauses playback and computes exact 1 / fps millisecond offsets on the HTMLVideoElement pipeline, verifying buffer readiness via requestVideoFrameCallback() so the hardware decoder reconstructs the complete Group of Pictures (GOP) up to your target frame.

Whether you are studying golf swing mechanics in 60fps iPhone MOV recordings, inspecting UI animation glitches in screen captures, or pulling a razor-sharp hero still with our Video Screenshot Grabber or 4K Video Frame Extractor, you get live MM:SS.mmm timecode telemetry, exact Frame #N indexing, and 1-click native capture.

Frame Rate Stepping Cadence & Time Delta Reference

Frame Rate (FPS)Step Delta (1 / FPS)Primary Video SourcesTypical Inspection Use Case
24 fps (Cinema)41.667 ms / frameNarrative film, animation, Sora / Runway AI clips2D/3D animation timing, VFX plate study, cut verification
25 fps (PAL Broadcast)40.000 ms / frameEuropean broadcast, DVB recordings, mirrorless PALBroadcast compliance, subtitle sync, editorial review
30 fps (NTSC / Web)33.333 ms / frameYouTube, smartphone video, OBS screen recordingsThumbnail selection, UI bug reproduction, product demos
60 fps (High Action)16.667 ms / frameGoPro, DJI drones, iPhone 4K60, 60fps gameplaySports biomechanics, fast motion de-blurring, frame pacing

How to Step Through a Video Frame by Frame Online

01

Drop Your Video File

Open any local MP4, MOV, WebM, MKV, AVI, or M4V video with zero server upload and no file size limit.

02

Select FPS & Step (-1 / +1)

Choose 24, 25, 30, or 60 fps, then click -1 Frame / +1 Frame or press , and . on your keyboard.

03

Grab Stills or Contact Sheet

Click Grab Current Frame on each key moment to build a sequence for ZIP download or Contact Sheet export.

Real Production Workflows & Practitioner Notes

Track & Field Biomechanics · 120fps Sprint Start

"VLC's E key only steps forward, so if you pass the athlete's rear-foot block clearance by two frames you have to drag the slider back and start over. Having both -1 Frame and +1 Frame mapped to the comma and period keys makes measuring ground contact time instant."

Coach Andre Miller, NCAA Sprint Performance Analyst
2D Hand-Drawn Animation Study · 24fps Sakuga Clips

"When studying impact frames and smears on twos and ones, variable framerate web rips usually skip frames in standard players. The PTS Frame-Lock here steps cleanly through every single drawing without doubling frames."

Mina Park, Storyboard Artist & Character Animator

Frame by Frame Video Viewer FAQ

How does the -1 Frame and +1 Frame stepper guarantee exact frame navigation?

Standard web players use coarse keyframe seeking that skips predicted P-frames and B-frames. Our viewer calculates the exact 1/fps temporal delta (at 24, 25, 30, or 60 fps) and combines HTMLVideoElement seeked verification with requestVideoFrameCallback (Deterministic PTS Frame-Lock) so every step lands on an adjacent decoded frame.

What keyboard shortcuts are available for stepping through video frames?

When a video is loaded in the workbench, press the comma (,) or Left Arrow key to step backward 1 frame (-1 Frame), and press the period (.) or Right Arrow key to step forward 1 frame (+1 Frame), matching professional NLE editors and YouTube frame stepping.

Which video containers and codecs can I inspect frame by frame?

You can inspect MP4, MOV (QuickTime/iPhone), WebM, MKV, AVI, and M4V files encoded with H.264/AVC, H.265/HEVC, VP9, AV1, and Apple ProRes, all decoded locally via your device GPU without uploading.

Can I save a full-resolution still photo while stepping through frames?

Yes. As soon as you isolate the exact millisecond and frame number (#N), click Grab Current Frame to add it to your session gallery or click Grab & Download to immediately save a 1:1 native-resolution PNG, JPEG, or WebP still.

Is there any file size cap for opening 4K 60fps or long recordings?

No. Frame Extractor features No Server Upload Size Limit (Zero-copy local Blob streaming supports multi-gigabyte 4K/8K raw footage). Even 5 GB+ raw camera clips open in under a second from your local drive.

Does the viewer show the exact millisecond timestamp and frame index?

Yes. The viewfinder status bar displays a live tabular-nums timecode in MM:SS.mmm format alongside the calculated Frame #N index and an equivalent FFmpeg CLI command that updates in real time as you step.

Deterministic Frame-Lock, Boundary Math & Contact Sheet Specifications

1. Frame-Lock Verification Pipeline: HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2), guaranteeing zero dropped or duplicated frames on both CFR and VFR clips.
2. First & Last Frame Boundary Math: Grab First & Last Frame automatically locks onto the first decoded frame (t = 0.000s, metadata.presentedFrames >= 1) and the last non-black frame (Math.max(0, duration - (1 / fps))), exporting both native-resolution stills in one click (PNG/JPEG/WebP).
3. Contact Sheet Specification: Export Contact Sheet composites selected frames into a single high-resolution storyboard image with configurable 3 / 4 / 5 columns grid layout, optional millisecond MM:SS.mmm timestamp watermarks, and direct PNG/JPEG download.

Popular Video Frame Extraction Tools

Specialized Workflows

Frame-Lock Verification Pipeline: HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2) via MDN HTMLVideoElement and HTMLCanvasElement.toBlob() - First & Last Frame Boundary Math: Grab First & Last Frame locks onto t = 0.000s (metadata.presentedFrames >= 1) and Math.max(0, duration - (1 / fps)). Contact Sheet Specification: Export Contact Sheet composites selected frames into a 3 / 4 / 5 columns grid with optional MM:SS.mmm timestamp watermarks and direct PNG/JPEG download.