Video Frame Extractor: Extract Frames, Thumbnails & Scenes avatar

Video Frame Extractor: Extract Frames, Thumbnails & Scenes

Pricing

from $1.00 / 1,000 frames

Go to Apify Store
Video Frame Extractor: Extract Frames, Thumbnails & Scenes

Video Frame Extractor: Extract Frames, Thumbnails & Scenes

Extract still frames from video files or direct MP4/WebM links: every N seconds, at timestamps or at scene changes. Use for thumbnails or vision models. Input: videoUrls, mode, everySeconds or timestamps, format. Output per frame: image URL, timestamp, width, height. YouTube/TikTok links refused.

Pricing

from $1.00 / 1,000 frames

Rating

0.0

(0)

Developer

Phaux

Phaux

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract frames from a video and save them as images: thumbnails, keyframes at scene changes, or one frame every few seconds.

Give this Actor links to your own video files. It saves still frames as JPG or PNG with exact timestamps: every few seconds, at times you choose, or where the scene changes. It reads only the parts of the file it needs, so long videos stay fast and cheap. It does not download from YouTube, TikTok or other platforms. Videos that can't be read are listed and cost nothing.

Quick start for AI agents and API users

  • What it does: Extract still frames from video files or direct MP4/WebM links: every N seconds, at timestamps or at scene changes.
  • When to use it: For thumbnails or vision models.
  • Example input (the form's prefill; it finishes in under a minute):
{
"videoUrls": [
{
"url": "https://upload.wikimedia.org/wikipedia/commons/b/b3/Big_Buck_Bunny_Trailer_400p.ogv"
}
],
"mode": "interval",
"everySeconds": 5,
"maxFramesPerVideo": 10,
"format": "jpg"
}
  • Example output: one real dataset row from run lZhefYHgsBCJ0BIOd (2026-10-23), with long fields shortened and empty fields left out. Fields not shown are listed in the output table below.
{
"videoUrl": "https://upload.wikimedia.org/wikipedia/commons/b/b3/Big_Buck_Bunny_Trailer_400p.ogv",
"status": "ok",
"videoIndex": 1,
"frameIndex": 1,
"timestampSecs": 0,
"timecode": "00:00:00.000",
"imageUrl": "https://api.apify.com/v2/key-value-stores/EfEbBuaDeCLW5cJcY/records/v001-Big_Buck_Bunny_Trailer_400p.ogv-f0001-0.000s.jpg?signature=wtVkP...",
"key": "v001-Big_Buck_Bunny_Trailer_400p.ogv-f0001-0.000s.jpg",
"format": "jpg",
"width": 720,
"height": 400,
"sizeBytes": 1890,
"mode": "interval",
"videoDurationSecs": 32.997,
"videoWidth": 720,
"videoHeight": 400
}
  • Cost (pay per event, Free-plan prices): Frame $0.001; Video $0.002; Scene-scan minute $0.002. Failed items are not charged.
  • From an AI agent: with the Apify MCP server, call call-actor with actor phaux/video-frame-extractor, or load it as its own tool with https://mcp.apify.com?tools=phaux/video-frame-extractor. Read results with get-dataset-items.

What does Video Frame Extractor do?

  • Three modes:
    • Every N seconds (interval): e.g. one frame every 5 s, starting where you want.
    • At timestamps (timestamps): ["0:05", 42, "1:02:03.5"].
    • At scene changes (scenes): compares the video's keyframes (video encoders place a keyframe at each cut) on a small downscaled copy, without decoding the frames in between, and saves a full-size frame at each detected cut. The strongest changes are kept when there are more than Max frames. Very fast on any codec (H.264, HEVC, VP9, AV1 ...); a cut inside a long keyframe interval is reported at the next keyframe.
  • Exact timestamps in seconds and as a hh:mm:ss.mmm timecode on every frame.
  • JPG, PNG or WebP, original size or scaled to a max width, adjustable quality.
  • Reads only what it needs: large files are read with HTTP range requests (seek, then decode one frame); small files (≤ 200 MB) are downloaded once and read locally.
  • Works with mp4, mov, webm, mkv, ogv, avi, m4v and most formats FFmpeg reads.

Why use it?

  • Cheap, predictable price: a small fee per video plus a price per frame; scene detection adds a per-minute scan fee.
  • Failures are free: unreadable files, refused links and frames that can't be decoded are not charged.
  • No platform-terms risk: only your own files and direct links.

Use cases: video thumbnails and poster frames, contact sheets, dataset creation for computer vision, content moderation sampling, scene/shot lists for editors, keyframes for LLM video understanding, and visual QA of encoded files.

What it does NOT do

It refuses YouTube, TikTok, Instagram, Facebook, X/Twitter, Vimeo, Loom, Twitch, Dailymotion and similar platform links, including links that redirect there. Web pages are refused; the link must point to the video file. Files over 2 GB or 3 hours are refused.

How to use it

  1. Paste direct links into Video URLs or upload files under Upload videos.
  2. Choose the Mode and its setting (seconds, timestamps or scene sensitivity) and Max frames per video.
  3. Pick the Image format and optional Max width.
  4. Run. The Frames view shows thumbnails; each row has an imageUrl to download the image.

Input example

{
"videoUrls": [{"url": "https://upload.wikimedia.org/wikipedia/commons/b/b3/Big_Buck_Bunny_Trailer_400p.ogv"}],
"mode": "interval",
"everySeconds": 5,
"maxFramesPerVideo": 10,
"format": "jpg"
}

The example video is the Big Buck Bunny trailer, © Blender Foundation, CC BY 3.0, via Wikimedia Commons. Empty input runs this example.

FieldDefaultDescription
videoUrls—Direct links to video files.
uploadedFiles—Uploaded files (key-value store).
modeintervalinterval, timestamps or scenes.
everySeconds5Interval mode gap.
startSeconds0Interval mode start.
timestamps—Timestamps mode: seconds or [hh:]mm:ss.
sceneThreshold0.3Scenes mode sensitivity (lower = more cuts).
maxFramesPerVideo20Frames saved per video (1–1000).
formatjpgjpg, png or webp.
maxWidth0Scale down to this width (0 = original).
jpgQuality85JPG/WebP quality.
timeBudgetSecs0Stop after N seconds and keep what is saved.

Output example

One dataset item per frame:

{
"videoUrl": "https://upload.wikimedia.org/wikipedia/commons/b/b3/Big_Buck_Bunny_Trailer_400p.ogv",
"status": "ok",
"videoIndex": 1,
"frameIndex": 3,
"timestampSecs": 10.0,
"timecode": "00:00:10.000",
"imageUrl": "https://api.apify.com/v2/key-value-stores/.../records/v001-Big_Buck_Bunny_Trailer_400p.ogv-f0003-10.000s.jpg",
"key": "v001-Big_Buck_Bunny_Trailer_400p.ogv-f0003-10.000s.jpg",
"format": "jpg",
"width": 720,
"height": 400,
"sizeBytes": 19383,
"mode": "interval",
"videoDurationSecs": 32.997,
"videoWidth": 720,
"videoHeight": 400,
"videoCodec": "theora"
}

A video that fails gets one row with "status": "failed" and an error (platform_not_supported, not_media, not_found, access_denied, robots_disallowed, no_video, too_large, too_long, unreadable_media ...). It is not charged. In scenes mode each frame also has a sceneScore; the first frame (0 s) is always included.

Pricing

EventPrice
Video (once per video that produced at least one frame)$0.002
Frame (per frame saved)$0.001
Scene-scan minute (scenes mode only, per started minute of video)$0.002
Actor start$0.00005

Examples: 10 frames from one video = $0.002 + 10 × $0.001 = $0.012. Scene detection on a 12-minute video keeping 30 frames = $0.002 + 30 × $0.001 + 12 × $0.002 = $0.056.

FAQ

Can I extract frames from YouTube or TikTok links? No. Platform links are refused. Use a direct link to a video file you have the rights to, or upload the file.

How do I get one frame every N seconds? Use mode interval and set everySeconds (and optionally startSeconds).

How do I get frames at specific times? Use mode timestamps with values like ["0:05", 42, "1:02:03.5"].

How does scene detection work? Mode scenes compares the video's keyframes on a small downscaled copy and saves a full-size frame at each detected cut. Lower sceneThreshold finds more cuts.

What does it cost? $0.002 per video plus $0.001 per frame; scenes mode adds $0.002 per started minute of video. 10 frames from one video cost $0.012.

Are failed videos charged? No. A video that can't be read gets one row with "status": "failed" and an error code, and is free.

Something isn't working? Open an issue on the Actor's Issues tab with the run ID.

Process only videos you own or have the right to use. Copyright stays with the owner. Hosts' robots.txt is respected and private network addresses are refused. FFmpeg (Debian build) is used for decoding.