Smart Video Keyframes: Best Frame per Scene for AI
Pricing
from $2.00 / 1,000 frame extracteds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
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:
| Video | Every 10 s | This Actor |
|---|---|---|
| 4:44 conference talk with slides (High sensitivity) | 28 frames, 7 distinct slides | 7 frames, one per slide, each with all bullets visible, plus slide text |
| 12:14 film, 1080p (Tears of Steel) | 73 frames | 159 scenes found, 24 blurry picks dropped, best 100 kept (cap) |
| 32 s trailer (Big Buck Bunny) | 3 frames | 16 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
- Turn a conference talk into one frame per slide, with slide text
- Pick the best frame of every scene in a film or trailer
How it compares
| Fixed-interval sampling | Smart Video Keyframes | |
|---|---|---|
| Frames per video | Grows with length, mostly repeats | One per scene, capped |
| Blurry and transition frames | Kept | Dropped or avoided |
| Repeated shots and static slides | Kept every time | Kept once |
| Text on screen | Not included | Optional OCR per frame |
| Data sent to a third party | Varies | No, runs inside the Actor |
How to use
- Paste direct video file links into Video URLs (or read them from a downloader's dataset).
- Keep One per scene. For lectures, webinars and screen recordings set Scene sensitivity to High and turn on Read on-screen text.
- 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
| Mode | Picks | Good for |
|---|---|---|
| One per scene (default) | Sharpest frame of each shot or slide | Films, ads, talks, tutorials, AI summaries |
| Every N seconds | Sharpest frame in each N-second window | Long static shots, surveillance, timelapses |
| Fixed number | N evenly spread sharp frames | Thumbnails, previews, quick overviews |
Pricing
| Event | Price | When |
|---|---|---|
| Frame extracted | $0.002 | Each keyframe saved |
| Video minute | $0.005 | Each started minute of video scanned |
| Frame text | $0.003 | Each frame read with OCR (only when turned on) |
| Actor start | $0.00005 per GB | Once per run |
| Example | Cost |
|---|---|
| 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).