Free Online First & Last Frame Extractor for Video

Capture the exact first frame (00:00.000) and non-blank final frame of any MP4, MOV, WebM, MKV, or AVI clip in one click, purpose-built for Runway Gen-3, Kling AI, Luma, Veo, and ComfyUI continuity.

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 first and last frame extractor and how does it prevent the end-of-file black-frame bug?

The Frame Extractor First and Last Frame Extractor (https://frame-extractor.app/first-last-frame-extractor) is a specialized browser utility that captures the exact initial frame (00:00.000) and the final decoded visual frame of a video in a single click. Standard players and naive extractors suffer from the End-of-File (EOF) black-frame bug when seeking to video.duration. Powered by Frame-Exact Hardware-Accelerated Decoding (WebCodecs / requestVideoFrameCallback + Deterministic PTS Frame-Lock, Zero Frame Drops across CFR & VFR videos), our Grab First & Last Frame action calculates duration - max(1/fps, 0.04s) and verifies buffer readiness 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).

Continuous Video Extension & Loop Continuity for Runway, Kling AI, Luma & Veo

Generative AI video models, including Runway Gen-3 Alpha, Kling AI, Luma Dream Machine, Google Veo, Pika, and ComfyUI Wan/SVD workflows, rely on exact start and end anchor images to extend clips, chain multi-shot scenes, or synthesize infinite continuous loops. Even a 1-frame mismatch or slight color-space shift between the terminal frame of Shot A and the initial prompt image of Shot B creates a visible jump cut. By locking directly onto the decoded HTMLVideoElement presentation timestamp via requestVideoFrameCallback() and exporting uncompressed PNGs via HTMLCanvasElement.toBlob(), both anchor frames retain 100% pixel and gamma consistency.

Need broader dataset sampling for LoRA training or 3D Gaussian Splatting? Explore our AI Video Frame Extractor, fine-tune your end point with the Frame-by-Frame Video Viewer, or composite a visual continuity sheet with the Video Contact Sheet Generator.

AI Video Continuity & Keyframe Anchor Workflows

AI / Editing WorkflowRequired Frame(s)Recommended FormatWhy Exact PTS Lock Matters
Clip Chaining (Shot A → Shot B Extension)Last Frame (duration - 1/fps)PNG (Lossless 1:1)Avoids EOF black frame and eliminates seam jump between clips
Continuous Infinite Video LoopFirst (00:00.000) & Last FramePNG (Lossless 1:1)Pass Last Frame as Start and First Frame as End to close the loop
Keyframe-Guided Interpolation (Kling / Luma)Start Anchor + End AnchorPNG or WebP (100%)Preserves exact subject geometry and Rec.709 color balance
FFmpeg CLI Automation ReferenceLive Equivalent CLI BarPNG (-q:v 1)Copy exact timestamped FFmpeg command directly from workbench

How to Extract the First and Last Frame in One Click

01

Drop Your Source Video

Load any MP4, MOV, WebM, MKV, AVI, or M4V clip locally in your browser with zero upload wait time.

02

Click Grab First & Last Frame

Click the highlighted Grab First & Last Frame button in the viewfinder bar to lock onto 00:00.000 and the final visual frame.

03

Download Both Stills or ZIP

Save each native-resolution PNG individually or click Download Selected (ZIP) to grab both anchors together.

Real Production Workflows & Practitioner Notes

Kling AI 1.6 & Runway Gen-3 · Multi-Shot Chaining

"Before using `/first-last-frame-extractor`, dragging a player playhead to the end of a 5-second AI clip gave me a black frame half the time because of EOF packet timing. The Grab First and Last Frame button calculates `duration - 1/fps` automatically and gives me a clean 00:04.958 anchor PNG."

Victor Lin, AI Short Film Director
Luma Dream Machine · Continuous Loop Keyframes

"To make an infinite background loop for our Spotify Canvas visuals, I grab frame 0.000s as PNG and feed it back into Luma as the End Frame target. Having both boundary frames extracted in one click keeps the aspect ratio and color profile locked."

Zoe Alvarez, Motion Designer

First and Last Frame Extractor FAQ

Why do I get a black or empty frame when manually seeking to the end of a video?

Most video containers store an End-of-Stream (EOS) terminator at the exact video.duration timestamp. Seeking directly to duration often lands on an empty buffer. Our Grab First & Last Frame action uses a duration - max(1/fps, 0.04s) seek lock with Deterministic PTS Frame-Lock so the final capture always lands on the last true visual frame.

How does Grab First & Last Frame work for Runway Gen-3, Kling AI, Luma Dream Machine, and Veo?

With one click on Grab First & Last Frame, the tool seeks to 00:00.000 (First Frame) and the exact final frame (Last Frame), captures both at 100% native resolution, selects both in the gallery, and lets you download them individually or as a 2-frame ZIP ready for AI video extension, loop creation, or start/end keyframe prompts.

Which video containers and codecs are supported?

Frame Extractor supports the full container and codec matrix: MP4, MOV (QuickTime/iPhone), WebM, MKV, AVI, and M4V across H.264/AVC, H.265/HEVC, VP9, AV1, and Apple ProRes.

Does this tool preserve 1080p and 4K native resolution for AI video prompts?

Yes. Both the first frame and last frame are rendered at 1:1 intrinsic source pixel dimensions (such as 1920x1080 or 3840x2160) in lossless PNG, JPEG, or WebP so AI video generators experience zero resolution degradation or seam flicker.

Is there any file size limit or server upload queue?

No. Frame Extractor operates with No Server Upload Size Limit (Zero-copy local Blob streaming supports multi-gigabyte 4K/8K raw footage). Everything runs locally inside your browser.

Can I step backward 1 or 2 frames if the final frame of my clip has a fade-out?

Yes. After clicking Grab First & Last Frame, the playhead remains positioned at the end of your video. You can click -1 Frame (or press the comma key) to step back before a fade-to-black and click Grab Current Frame.

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.