Smart Video Keyframes: Best Frame per Scene for AI avatar

Smart Video Keyframes: Best Frame per Scene for AI

Pricing

from $2.00 / 1,000 frame extracteds

Go to Apify Store
Smart Video Keyframes: Best Frame per Scene for AI

Smart Video Keyframes: Best Frame per Scene for AI

Turn videos into a clean set of keyframes: one sharp frame per scene, with blurry and duplicate shots removed. Timestamps, contact sheet and optional on-screen text. Ready for vision LLMs, RAG and thumbnails. Pay per video minute and frame.

Pricing

from $2.00 / 1,000 frame extracteds

Rating

0.0

(0)

Developer

Nookforgestudio

Nookforgestudio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Smart Video Keyframes: Best Frame per Scene for AI

Turn any video into a small, clean set of keyframes: one sharp frame per scene, with blurry and duplicate shots removed. Each frame comes with its timestamp, scene boundaries and a public image link, plus a contact sheet of the whole video. Optionally read the on-screen text of every frame (slides, captions, signs, UI).

Built for feeding videos to vision LLMs, RAG pipelines, search indexes and thumbnail pickers, where 300 near-identical frames cost more and say less than 7 good ones.

Measured on public videos:

VideoEvery 10 sThis Actor
4:44 conference talk with slides (High sensitivity)28 frames, 7 distinct slides7 frames, one per slide, each with all bullets visible, plus slide text
12:14 film, 1080p (Tears of Steel)73 frames159 scenes found, 24 blurry picks dropped, best 100 kept (cap)
32 s trailer (Big Buck Bunny)3 frames16 frames, one per shot
  • 🎬 One frame per scene: hard cuts plus subtle changes like slide transitions, with an adaptive threshold that ignores camera motion
  • 🔍 Sharpest frame of each scene: avoids motion blur, focus pulls and transition frames
  • 🧹 No blurry or duplicate frames: shots the video cuts back to are kept once
  • ⏱️ Timestamps and scene ranges for every frame (00:01:50.750, scene start and end)
  • 🖼️ Contact sheet per video with all keyframes and timecodes
  • 🔤 Optional on-screen text (OCR) for slides, captions and screen recordings
  • 🔒 Runs inside the Actor: videos are never sent to a third-party AI API
  • 💸 Pay per video minute and frame; failed videos are free

Ready-made examples

How it compares

Fixed-interval samplingSmart Video Keyframes
Frames per videoGrows with length, mostly repeatsOne per scene, capped
Blurry and transition framesKeptDropped or avoided
Repeated shots and static slidesKept every timeKept once
Text on screenNot includedOptional OCR per frame
Data sent to a third partyVariesNo, runs inside the Actor

How to use

  1. Paste direct video file links into Video URLs (or read them from a downloader's dataset).
  2. Keep One per scene. For lectures, webinars and screen recordings set Scene sensitivity to High and turn on Read on-screen text.
  3. Click Start. Frames appear in the Output tab and the contact sheet in the run's storage.

Page links (YouTube, TikTok, Instagram) are not downloaded. Run a downloader Actor first and pass its file links or its dataset ID.

Input example

{
"urls": ["https://upload.wikimedia.org/wikipedia/commons/2/29/Research_and_Privacy_on_Wikipedia_-_Wikimania_2025_Lightning_Talk_-_Eli_Asikin-Garmager.webm"],
"mode": "scenes",
"sceneSensitivity": "high",
"extractText": true,
"maxFramesPerVideo": 50
}

Output example

Real output for the talk above (text truncated):

{
"videoUrl": "https://upload.wikimedia.org/.../Research_and_Privacy_on_Wikipedia_-_Wikimania_2025_Lightning_Talk_-_Eli_Asikin-Garmager.webm",
"frameIndex": 5,
"timestamp": 164.25,
"timecode": "00:02:44.250",
"sceneIndex": 4,
"sceneStart": 118.5,
"sceneEnd": 173.75,
"sharpnessScore": 0.954,
"imageUrl": "https://api.apify.com/v2/key-value-stores/.../records/frame-001-0005.jpg",
"width": 1280,
"height": 720,
"text": "Key takeaways for\nresearchers\nShare plans early\nKnow the norms and guidelines\nRespect privacy\nRecognize the significance ...",
"contactSheetUrl": "https://api.apify.com/v2/key-value-stores/.../records/contact-001.jpg"
}

A SUMMARY record in the run's key-value store lists each video's duration, billed minutes, scenes found and frames skipped as blurry or duplicate.

Modes

ModePicksGood for
One per scene (default)Sharpest frame of each shot or slideFilms, ads, talks, tutorials, AI summaries
Every N secondsSharpest frame in each N-second windowLong static shots, surveillance, timelapses
Fixed numberN evenly spread sharp framesThumbnails, previews, quick overviews

Pricing

EventPriceWhen
Frame extracted$0.002Each keyframe saved
Video minute$0.005Each started minute of video scanned
Frame text$0.003Each frame read with OCR (only when turned on)
Actor start$0.00005 per GBOnce per run
ExampleCost
5-minute talk, 7 slide frames, with text$0.025 + $0.014 + $0.021 = $0.06
12-minute film, 100 keyframes$0.065 + $0.20 = $0.27
30-second ad, 15 keyframes$0.005 + $0.03 = $0.035

Platform usage is included. Videos that fail to download or decode are not charged, and videos over Max video length are skipped for free. Cap cost with Max frames per video or the run's maximum cost; the Actor stops cleanly at the limit.

Use with AI agents (MCP)

$claude mcp add --transport http apify "https://mcp.apify.com?tools=nookforgestudio/video-keyframe-extractor"

Then ask: "Get one frame per slide from this talk and summarize each slide: https://..."

Use via API

curl -X POST "https://api.apify.com/v2/acts/nookforgestudio~video-keyframe-extractor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com/video.mp4"], "maxFramesPerVideo": 20}'

Also works from Make, n8n and Zapier through Apify's integrations.

Supported videos and limits

  • MP4, MOV, WebM, MKV, AVI, OGV and most other formats ffmpeg reads
  • Direct file links only; up to Max video file size (default 1.5 GB) and Max video length (default 120 min)
  • On-screen text works best on printed English and Chinese; handwriting is not reliable
  • Very dark or very flat frames (fades, black screens) are never picked

FAQ

Why not just take a frame every few seconds? Fixed sampling returns many near-identical frames for static shots and slides and misses short scenes. Scene-based picking returns fewer, more useful frames, which keeps LLM and storage costs down.

What does High sensitivity change? It splits on smaller changes, such as a slide whose title changes but layout stays the same. Use it for talks, webinars and screen recordings.

Can I keep every scene even if it is blurry? Turn off Skip blurry frames. Each frame still includes a sharpnessScore (1.0 = as sharp as the video gets) and a blurry flag.

Custom work

Need object detection on video, tracking, highlight reels or a custom pipeline? Contact Nookforge Studio.

Credits

Example videos from Wikimedia Commons: Tears of Steel and Big Buck Bunny (Blender Foundation, CC BY 3.0), Research and Privacy on Wikipedia lightning talk by Eli Asikin-Garmager (CC0).