Extract Frames from Video Every Second (Batch ZIP Export)

Automatically sample video frames every 1 second, 0.25s, 5s, or every Nth frame in your browser, download sequentially numbered PNG, JPG, or WebP images as a single ZIP.

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 -i "input.mp4" -vf "fps=1/1" -q:v 1 frame_%04d.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

How do you automatically extract frames from a video every second in your browser?

The Frame Extractor Interval & Batch Tool (https://frame-extractor.app/extract-frames-from-video-every-second) is a free browser-based automated sampler that extracts still images from MP4, MOV, WebM, and AVI videos every second, every N seconds, every Nth frame, or by a fixed total frame count, without uploading the video or writing command-line scripts. Created for computer-vision dataset curation (YOLO, LoRA, ROBOFLOW), storyboard generation, timelapse review, and QA frame inspection, it seeks across your local video stream in the browser and packages all sampled PNG, JPG, or WebP frames into a single timestamped ZIP archive. You can configure sub-second intervals (such as 0.2s or 0.5s for fast motion) or multi-second intervals (such as 1s, 5s, or 10s for long lectures). Unlike running ffmpeg -i input.mp4 -vf fps=1 in a terminal or uploading datasets to restricted cloud tools, this browser workflow gives you live visual previews and instant local ZIP export for files with zero server upload limit (multi-GB local Blob streaming).

Automated Time-Interval & Nth-Frame Batch Video Extraction

Manually scrubbing through a long video to save dozens of screenshots is tedious and inconsistent. Whether you are building a visual storyboard, auditing ad creative, training a computer-vision / LoRA dataset, or archiving surveillance and dashcam clips, automated interval sampling lets you convert any video timeline into a uniform grid of timestamped still images in seconds.

Frame Extractor is preset to Every N sec (1.0s) so you can drop a video and immediately extract 1 frame per second. Need finer temporal resolution for fast motion? Select the 0.25s (4 fps) or 0.5s (2 fps) presets, switch to Every N frames for exact frame-step cadence, or use Total count to pull 8, 16, 24, or 60 evenly spaced stills across any clip length.

Choosing the Right Sampling Interval for Your Project

Sampling SettingEffective RateFrames per 60s VideoIdeal Use Case
Every 0.25 sec4 frames / sec240 framesFast sports action, UI animation breakdown, dense datasets
Every 1.0 sec1 frame / sec60 framesStandard video-to-image sequence, B-roll indexing, tutorials
Every 5.0 sec12 frames / min12 framesLong lectures, webinars, scene-by-scene storyboard summaries
Every 30 frames (@30fps)Exact frame step60 framesFrame-locked VFX plates, keyframe cadence analysis

How Batch Interval Extraction & Local ZIP Packaging Work

01

Set Time Step & Range

Pick 0.25s, 0.5s, 1s, 2s, or 5s (or any custom number) and optionally trim Start and End seconds.

02

Preview & Filter Gallery

Watch frames populate live in the gallery grid. Click any image to inspect it at full size or uncheck frames you don't want to keep.

03

One-Click ZIP Archive

Click Download all as ZIP to bundle every extracted frame into a single archive right in browser memory.

Real Production Workflows & Practitioner Notes

University Lecture Slide Capture · 1 Frame / 5s

"Guest lecturers often refuse to share their PowerPoint files but allow a Zoom recording. I run the 50-minute MP4 at a 5-second interval, use the gallery checkboxes to pick the 28 unique slide changes, and download them in a single ZIP."

Dr. Nadia Khoury, Biomedical Engineering Lecturer
QA Automated UI Regression Audit · 0.25s Interval

"When debugging a layout shift that only flashes for 200 milliseconds during page hydration, I record the browser tab at 60fps and extract every 0.25 seconds (or every 5 frames). Seeing the numbered sequence side by side pins down the exact frame where the CSS reflow fires."

Kenji Watanabe, Frontend Performance Engineer

Batch Interval Frame Extraction FAQ

How do I extract 1 frame per second (1 fps) from a video without installing FFmpeg?

Open /extract-frames-from-video-every-second, drop your video file into the browser, select Every N seconds mode with the interval set to 1, choose JPG, PNG, or WebP, and click Extract to download all 1-fps frames in a ZIP archive.

Can I extract frames at sub-second intervals (like every 0.5 seconds) or every Nth frame?

Yes. You can enter decimal second intervals (such as 0.25 or 0.5 seconds for fast action clips), switch to Every N frames mode (for example, every 10th or 30th frame), or choose Fixed count mode to grab an exact number of evenly distributed frames across the entire video duration.

How many frames can I batch extract at once in the browser?

Because frames are held in browser memory while building the preview and ZIP archive, extracting 20 to 300 frames per batch is fast and reliable on most computers. For hour-long videos, use a wider interval (such as every 5-10 seconds) or JPEG output to minimize memory usage.

Is this interval frame extractor suitable for AI / machine-learning dataset preparation?

Yes. ML engineers and researchers frequently use interval sampling to convert raw video recordings into evenly spaced, non-redundant training images for object detection, pose estimation, and fine-tuning, while keeping sensitive training footage 100% local.

Does batch interval extraction work on mobile and desktop browsers?

Yes, it works in any modern desktop or mobile browser. For large batches (100+ frames) or 4K source videos, a desktop browser with more RAM is recommended.

How do I step through a frame by frame video or sample every N seconds for a dataset?

Open the interval sampler at https://frame-extractor.app/extract-frames-from-video-every-second to inspect a frame by frame video or automate dataset capture. Pick Every N seconds (down to 0.01s steps) or Every N frames with your clip's FPS, and the browser packages all chronologically numbered stills between your start and end timestamps into one ZIP archive.

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.