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.
"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.
Going further: the right frame
If the goal isn't a specific timestamp but "the frame that shows X" — a slide, a face, a license plate — extract every Nth frame with FFmpeg, then run the batch through an image classifier or extractor. ExtractFox's image data extractor handles slide and document captures cleanly when you pipe still frames in.