Video Frame Extractor – Thumbnails, Scenes & Keyframes
Pricing
from $1.00 / 1,000 frames
Video Frame Extractor – Thumbnails, Scenes & Keyframes
Extract still frames from any video file URL (MP4, MOV, WebM, MKV, HLS): one frame every N seconds, N thumbnails, exact timestamps, scene changes or keyframes. JPEG/PNG/WebP links, timecodes, contact sheet and video metadata. Ready for AI vision. $1 per 1,000 frames.
Pricing
from $1.00 / 1,000 frames
Rating
0.0
(0)
Developer
Cemal Atakli
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
8
Monthly active users
8 hours ago
Last modified
Categories
Share
Turn any video file URL into still images: one frame every N seconds, N evenly spaced thumbnails, frames at exact timestamps, scene changes (shot detection) or all keyframes. Every frame is saved as JPEG, PNG or WebP with a public link, its timecode and size, and every video gets a contact sheet and its metadata (duration, resolution, fps, codecs, bitrate). The frames are ready to send to GPT-4o, Claude or Gemini vision, to an OCR step, or to your CMS.
- $1 per 1,000 frames + $0.002 per video. Popular frame extractors on the Store charge $2–$6 per 1,000 frames. Black frames, failed videos and invalid links are free.
- Fast on long videos. Interval, thumbnail and timestamp modes seek straight to each position with HTTP range requests: a frame per minute from a 15-minute 1080p film took 30 seconds in our tests, without downloading the whole file.
- Scene detection finds shot changes for video summaries, AI captioning and highlight reels; billed per minute scanned ($0.002) with a cost cap.
- Any format ffmpeg reads: MP4, MOV, M4V, WebM, MKV, AVI, MPEG-TS and HLS
.m3u8streams, rotation handled, frames downscaled to your max width.
What can I use it for?
- Video thumbnails and posters for websites, LMS, e-commerce product videos and video CMSs.
- AI video understanding: feed one frame every few seconds (or one per scene) to a vision model to describe, tag or moderate a video.
- Content moderation and compliance: sample frames from user uploads for review.
- Dataset creation: frames for computer-vision training, at a fixed rate or per shot.
- Storyboards and contact sheets for editors, reviewers and clients.
Video-platform pages (YouTube, TikTok, Instagram, Vimeo…) are deliberately not supported: use direct links to files you own or are allowed to process (your CDN, S3 / R2 / GCS bucket, Dropbox or Drive direct links, stock footage).
Input
| Field | Description |
|---|---|
videoUrls, bulkText, datasetId | Direct video file links |
mode | interval, count, timestamps, scenes, keyframes |
intervalSec / frameCount / timestamps | Settings for each mode (90, 12.5, 00:01:30) |
sceneThreshold, accurateScenes | Scene sensitivity (0.3 default); keyframe-only (fast) or frame-exact detection |
startTime, endTime | Only part of the video |
maxFramesPerVideo, skipBlackFrames | Cap per video (100); drop black frames (free) |
imageFormat, quality, maxWidth | jpg / png / webp, quality 85, max width 1280 px |
contactSheet | One overview image per video (free) |
maxScanMinutes, maxDurationMinutes, maxConcurrency | Cost cap for scanning modes (60 min); safety limit per video (240 min, 0 = none); videos in parallel |
{"videoUrls": ["https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"],"mode": "interval","intervalSec": 5,"imageFormat": "jpg","maxWidth": 1280}
Progress & limits
- Results stream in. Every frame is saved and added to the dataset the moment it is extracted, so the Output tab fills while the run is going; you can stop a run at any time and keep (and pay only for) what is already there.
- Live progress. The run status shows
frame 12/40, ETA 20sper video (orscanned 55%in scene modes); the log prints the video length and an estimated time before extraction starts, and a progress line every 15 s. - Safety limits.
maxFramesPerVideo(100),maxScanMinutes(60, scene/keyframe modes) andmaxDurationMinutes(240: only the first 4 hours of a video are used; 0 = no limit). Hosts that keep failing are given up after a few retries with a free error row instead of hanging. - Never times out silently. The Actor stops about 30 s before the run timeout, keeps every frame saved so far, marks the affected video rows
"partial": true, "stopReason": "TIME_LIMIT"and writes aSUMMARY. The same happens when your maximum total charge is reached (MAX_CHARGE_REACHED). - Bad input never fails the run. Invalid values fall back to their defaults with a warning; invalid or unreachable URLs get a free error row.
Output
Two row types in one dataset. The Output tab shows Frames (with image previews) and Videos & contact sheets.
Frame row (from a cloud run):
{"type": "frame","videoIndex": 0,"videoUrl": "https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4","frameIndex": 12,"timestampSec": 65,"timecode": "00:01:05.000","imageUrl": "https://api.apify.com/v2/key-value-stores/Wls5gg0pkbv7kDZhC/records/v000-frame-0012.jpg?signature=…","imageKey": "v000-frame-0012.jpg","width": 640, "height": 360, "bytes": 27924, "format": "jpg"}
Video row:
{"type": "video","videoUrl": "https://test-videos.co.uk/vids/jellyfish/mp4/h264/720/Jellyfish_720_10s_5MB.mp4","status": "ok","mode": "interval","durationSec": 10.01,"container": "QuickTime / MOV","fileSizeBytes": 5241877,"bitrateKbps": 4189,"videoCodec": "h264", "width": 1280, "height": 720, "fps": 29.97,"hasAudio": false,"framesExtracted": 3,"contactSheetUrl": "https://api.apify.com/v2/key-value-stores/Wls5gg0pkbv7kDZhC/records/v002-contact-sheet.jpg?signature=…"}
Error codes (free): INVALID_URL, UNSUPPORTED_PLATFORM, HTTP_403, HTTP_404, HTTP_429, NOT_A_VIDEO, NO_VIDEO_STREAM, UNKNOWN_DURATION, TIMEOUT, NETWORK_ERROR, INTERNAL_ERROR. Rows of videos stopped early carry partial: true and stopReason (TIME_LIMIT, MAX_CHARGE_REACHED, SCAN_TIMEOUT); a video stopped before its first frame has status: "skipped". Image files live in the run's key-value store (retained like any Apify storage).
Pricing
| Event | Price | When |
|---|---|---|
| Frame | $0.001 ($1 per 1,000) | Each frame saved |
| Video | $0.002 | Each video that delivers at least one frame |
| Scene-scan minute | $0.002 | Per started minute scanned in scenes / keyframes mode |
| Run start | $0.00005 |
Examples: 10 thumbnails from 100 videos = $1.20. Shot detection on a 10-minute video with 40 scenes = $0.002 + $0.02 + $0.04 = $0.062.
| Actor | Monthly users | Price |
|---|---|---|
| This Actor | – | $1 / 1,000 frames + $0.002 / video |
| automation-lab/video-thumbnail-frame-extractor | 60 | ≈ $6 / 1,000 frames |
| kantolabs/video-frame-extractor | 42 | $2 / 1,000 frames |
| frameprobe/video-scene-splitter | 26 | $0.02 / video minute + $0.01 / run |
Competitor figures are from the Apify Store on 2026-10-06.
FAQ
Why does scene detection miss some cuts? By default it compares keyframes only, which is fast and cheap but cannot see cuts between two keyframes. Turn on accurateScenes for frame-exact cuts (slower, same price), or lower sceneThreshold.
Can I use YouTube or TikTok links? No. Those platforms' terms forbid downloading their videos. Use a direct file URL you are allowed to process.
How long are the images kept? They are stored in the run's default key-value store, which follows your Apify storage retention. Download them or copy them to your own storage if you need them longer.
What about very large files? Seeking modes read only the parts they need. Scanning modes download the file first (up to 2 GB; bigger files are read over HTTP) and scan only the requested range; maxScanMinutes caps it.
I get HTTP_403 for a link that opens in my browser. Some hosts block cloud/datacenter IPs. Enable Proxy configuration (Apify Proxy) and run again.
Is this legal? The Actor only processes the video URLs you provide and sends an honest User-Agent. Make sure you have the right to process those videos. Questions: iletisim.ortalamabiri@gmail.com.
Use with AI agents / Apify MCP
Ask "take a frame every 10 seconds from this video and describe what happens". Through the Apify MCP server (https://mcp.apify.com?actors=gazidev/video-frame-extractor), Claude, ChatGPT, Cursor and other MCP clients can call it directly. Over the API: POST https://api.apify.com/v2/acts/gazidev~video-frame-extractor/run-sync-get-dataset-items.
Related Actors
Media Transcriber (audio & video to text) · Image OCR · Image Metadata & EXIF Extractor · Website Screenshot