All posts
Tutorial7 min read

How to extract photos and frames from a video

Pull a still from a video — on iPhone, Android, in DaVinci Resolve, with FFmpeg, or from a YouTube URL. The right tool depends on whether you want one frame or every frame.

By · Updated

"Extract a photo from a video" usually means one of two things: capture a single frame at a specific moment, or batch-export every frame for analysis. Different tools handle each well.

iPhone, single frame

Photos app: open the video, scrub to the frame, screenshot. The screenshot lives in your camera roll at the resolution of the video, not your screen — you don't lose quality unless the video was 4K (in which case the screenshot tops out at the screen resolution).

For full-resolution single-frame export from a 4K iPhone video, AirDrop the video to a Mac and use QuickTime → Edit → Copy at the right scrub point, then Edit → Paste into Preview.

Android, single frame

Google Photos has a built-in frame export: open the video, tap the three dots → Export frame. Output is at video resolution.

macOS / Windows, single frame

VLC: Video → Take Snapshot at the right moment. Saves to the snapshots folder configured in Preferences. Format and size are configurable.

QuickTime on Mac: Edit → Copy at the playhead, paste into Preview as new from clipboard.

FFmpeg: every frame, scripted

The reference command-line tool. Single frame at a specific second:

ffmpeg -ss 00:01:23 -i video.mp4 -frames:v 1 frame.png

Every frame as PNG (warning: this fills your disk fast on long videos):

ffmpeg -i video.mp4 frame_%04d.png

One frame per second (good for analysis):

ffmpeg -i video.mp4 -vf fps=1 frame_%04d.png

Keyframes only (much smaller batch, only the I-frames):

ffmpeg -skip_frame nokey -i video.mp4 -vsync vfr -f image2 keyframe_%03d.png

DaVinci Resolve

On the timeline, position the playhead at the frame you want, right-click → Grab Still. The still appears in the Stills gallery in the Color page. Right-click → Export sends it to disk at full resolution. Free version supports JPEG and PNG; Studio adds DPX and EXR.

From a YouTube URL

yt-dlp -x doesn't extract frames, but yt-dlp combined with FFmpeg does. Pull the video first (yt-dlp "https://youtube.com/watch?v=..."), then run FFmpeg against the local file. There's no clean way to extract a frame without downloading at least the segment that contains it.

Choosing the output format

PNG for analysis and archival — lossless, larger files. JPEG for thumbnails and quick review — 5–10× smaller at -q:v 2, good enough to eyeball. Match the format to what happens to the frame next, not to habit:

ffmpeg -i video.mp4 -vf fps=1 -q:v 2 thumb_%04d.jpg

The -q:v scale runs from 2 (best) to 31 (worst) for JPEG output. If the frames feed an OCR or extraction step, stay with PNG — JPEG artifacts around text edges measurably hurt recognition accuracy.

Only the frames that change: scene detection

Dumping one frame per second of a lecture recording gives you hundreds of near-identical shots of the same slide. The select filter with a scene-change threshold keeps only frames where the picture actually changed:

ffmpeg -i video.mp4 -vf "select='gt(scene,0.4)'" -vsync vfr scene_%03d.png

Tune the 0.4 threshold down for subtle changes (slide builds, dashboard updates), or up to skip camera pans and lighting shifts.

Batch: a folder of videos

for f in *.mp4; do mkdir -p "frames_${f%.mp4}" ffmpeg -i "$f" -vf fps=1 "frames_${f%.mp4}/frame_%04d.png" done

One folder of frames per source video, named after the file. On large batches, add -loglevel error to keep the output readable, and run the loop through GNU parallel for a big wall-clock speedup.

Common problems and fixes

  • Timestamps land a few seconds off — put -ss before -i (input seeking, fast and accurate with modern FFmpeg) instead of after it.
  • Extracted frames look squashed — anamorphic video. Current FFmpeg applies the display aspect ratio automatically; if an older version doesn't, add -vf scale=in_w*dar:in_h,setsar=1.
  • A huge PNG batch fills the disk — switch to -q:v 2 JPEG, or drop the filter from fps=1 to fps=1/5 for one frame every five seconds.
  • Variable-frame-rate phone videos produce uneven fps=1 output — pre-normalize to constant frame rate with a quick transcode, or accept -vsync vfr and let the timestamps carry the timing.

Which tool for which job

JobToolWhy
One frame on a phoneGoogle Photos export frame / screenshotZero install, video resolution
One frame on desktopVLC snapshot or QuickTime copyFast, no command line
Every Nth frame, scriptedFFmpeg with -vf fps=NScriptable, reproducible, free
Only changed framesFFmpeg scene detectionSkips redundant near-duplicates
Frame from an edit timelineDaVinci Resolve Grab StillFull grading-resolution output
Frames from a YouTube linkyt-dlp + FFmpegHeadless, automatable

Going further: the right frame

If the goal isn't a specific timestamp but "the frame that shows X" — a slide, a scoreboard, a license plate — extract every Nth frame with FFmpeg and then read the stills, rather than scrubbing the timeline looking for the moment. For plain text on screen, an image-to-text pass returns it as text; when the frame is a slide, a table, or a labelled document, the fields matter and a structured extraction is the better fit.

Tool
You have the frames — now read what is on them
Drop a still in and get the slide, table, or label back as structured fields, without writing a classifier to find the frame that mattered.

Frequently asked questions

How do I extract a single frame from a video as an image?+

On iPhone, scrub to the frame in Photos and take a screenshot. On Android, use Google Photos → three dots → Export frame. On desktop, VLC → Video → Take Snapshot, or QuickTime → Edit → Copy at the playhead and paste into Preview as a new image.

What is the FFmpeg command to extract every frame from a video?+

ffmpeg -i video.mp4 frame_%04d.png extracts every frame as PNG. For one frame per second use ffmpeg -i video.mp4 -vf fps=1 frame_%04d.png. For just one frame at a timestamp use ffmpeg -ss 00:01:23 -i video.mp4 -frames:v 1 frame.png.

Can I extract data from a video frame image?+

Yes. After extracting frames with FFmpeg or a native tool, upload the still images to ExtractFox's image data extractor. It handles slides, document captures, screenshots of dashboards, and other image-based content.

How do I extract frames from a YouTube video?+

Download the video first with yt-dlp (yt-dlp "https://youtube.com/watch?v=..."), then run FFmpeg against the local file. There's no clean way to extract a frame without downloading at least the segment that contains it.

Should I extract frames as PNG or JPEG?+

PNG for anything that feeds OCR, extraction, or archival — it's lossless. JPEG at -q:v 2 is 5–10× smaller and fine for thumbnails and manual review. The JPEG artifacts around text edges are what hurt downstream recognition.

Related reading

Stop reading, start extracting

Drop a PDF or image into ExtractFox and get structured data back in seconds.

Try a free extraction →