Video Frame Extractor – Thumbnails, Scenes & Keyframes avatar

Video Frame Extractor – Thumbnails, Scenes & Keyframes

Pricing

from $1.00 / 1,000 frames

Go to Apify Store
Video Frame Extractor – Thumbnails, Scenes & Keyframes

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

Cemal Atakli

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

8

Monthly active users

8 hours ago

Last modified

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 .m3u8 streams, 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

FieldDescription
videoUrls, bulkText, datasetIdDirect video file links
modeinterval, count, timestamps, scenes, keyframes
intervalSec / frameCount / timestampsSettings for each mode (90, 12.5, 00:01:30)
sceneThreshold, accurateScenesScene sensitivity (0.3 default); keyframe-only (fast) or frame-exact detection
startTime, endTimeOnly part of the video
maxFramesPerVideo, skipBlackFramesCap per video (100); drop black frames (free)
imageFormat, quality, maxWidthjpg / png / webp, quality 85, max width 1280 px
contactSheetOne overview image per video (free)
maxScanMinutes, maxDurationMinutes, maxConcurrencyCost 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 20s per video (or scanned 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) and maxDurationMinutes (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 a SUMMARY. 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

EventPriceWhen
Frame$0.001 ($1 per 1,000)Each frame saved
Video$0.002Each video that delivers at least one frame
Scene-scan minute$0.002Per 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.

ActorMonthly usersPrice
This Actor–$1 / 1,000 frames + $0.002 / video
automation-lab/video-thumbnail-frame-extractor60≈ $6 / 1,000 frames
kantolabs/video-frame-extractor42$2 / 1,000 frames
frameprobe/video-scene-splitter26$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.

Media Transcriber (audio & video to text) · Image OCR · Image Metadata & EXIF Extractor · Website Screenshot