Video Frame Extractor for Scene Changes and Thumbnails
Pricing
from $1.60 / 1,000 frames
Video Frame Extractor for Scene Changes and Thumbnails
Turn video links into still images: one per scene change, every N seconds, a set number of frames or exact timestamps. JPG, PNG or WebP with a contact sheet per video. MP4, MOV, WebM, MKV and more, from S3, Dropbox or Drive links. $2 per 1,000 frames.
Pricing
from $1.60 / 1,000 frames
Rating
0.0
(0)
Developer
CleanScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
Turn video files into still images. Paste links to your videos and get back JPG, PNG or WebP frames with their exact times, plus a contact sheet per video. Choose how frames are picked:
- Overview: one frame per scene change, with quiet stretches filled in evenly. Fast at any length.
- Precise scene changes: every cut, including quick ones, found by looking at every frame.
- Every N seconds, for example one frame every 5 seconds for an AI vision model.
- A set number of frames, evenly spaced, for example one thumbnail per video.
- Exact timestamps, such as
0:42and1:15.5.
Near-identical frames are left out and not charged, so a slide that stays on screen for two minutes gives you one image, not twelve. Phone videos come out upright, and variable frame rate screen recordings get exact times.
It works with MP4, MOV, WebM, MKV, AVI, MPEG-TS, OGV and animated GIF, in H.264, HEVC (also 10-bit), VP9, AV1 and other codecs FFmpeg reads, from any direct file link: your own server, a CDN, S3 or Google Cloud Storage signed links, Dropbox and Google Drive share links. This is an independent tool, maintained by CleanScrape.
Start with a small run
The form opens with two sample videos, a 5-second clip and the 10-minute open film Big Buck Bunny (© Blender Foundation, CC BY 3.0), and saves up to 12 frames from each. Start it as it is, then paste your own links.
- In Video links, add one link per line.
- Pick Which frames and, if you like, Frames per video, image format and size.
- Start the run. The Frames table shows each image with its time; the Videos table has one row per video with its contact sheet.
Which link to use
| You have | Works? |
|---|---|
A link that downloads the file (…/clip.mp4, a CDN or storage link) | Yes |
| An S3, Google Cloud Storage or Azure signed link | Yes. Its query string is hidden in the output, since signed links keep their key there |
| A Dropbox or Google Drive share link (file shared with "anyone with the link") | Yes, the Actor uses the file's download link |
| A YouTube, TikTok, Instagram, Vimeo or other video site page | No. These pages play videos but do not hand out the file. The run says so and charges nothing |
| A link that needs a login | No. Use a signed or shared link |
How frames are picked
| Mode | Best for | How it works |
|---|---|---|
| Overview (default) | Thumbnails, previews, a quick look at what a video contains | Reads only the video's keyframes, which encoders place at cuts, and keeps the ones that look different from the last. Fills the longest gaps with evenly placed frames until "Frames per video" is reached |
| Precise scene changes | Editing, shot lists, ad and trailer analysis, lecture slides | Compares every frame with the one before it and takes the first frame after each cut. Camera moves, fast action and film grain are not counted as cuts; slide changes count once the slide is still. Takes longer on long videos, so it is charged per minute of video scanned |
| Every N seconds | AI vision models, dataset building, time-lapse | A frame every N seconds from the start, up to "Frames per video" |
| A set number of frames | One thumbnail per video, storyboards | Evenly spaced; 1 frame gives the middle of the video |
| Exact timestamps | Moments you already know | Every timestamp you list, in each video. Timestamps past the end of a video are skipped and listed in the note |
Scene change sensitivity sets how different two moments must look: low for clear cuts only, medium (the default) for normal cuts, high to also catch slide changes and screen recordings, where only part of the picture changes. With high, a gradual change counts once the picture has settled, so camera motion and animation do not. Start at and End at limit every mode to part of the video, for example to skip an intro.
What you get
Frames (one row per image):
| Column | Meaning |
|---|---|
| Image | Link to the image file. When your Apify storage is private, the link is signed so it still opens |
| Time, Seconds | Where the frame is in the video (00:01:23.400 and 83.4). This is the real time of the frame that was saved |
| Picked because | scene-change, fill, interval, evenly-spaced or timestamp |
| Video, Frame | Position of the video in your list and of the frame in the video |
| Width, Height, Format, Bytes | The image |
Videos (one row per link): outcome, length, upright width and height, rotation, codec, frame rate, whether the frame rate varies, whether it has sound, file size, frames saved, near-duplicates left out, scan minutes, the contact sheet link and a note. When a link can't be used, the note says why: a page instead of a file, an audio file, a damaged or incomplete file, a refused or missing link, or a file over your size limit.
The images are in the run's key-value store as frame-001-0001.jpg (video 1, frame 1) and so on, and the contact sheets as contact-sheet-001.jpg.
Pricing
You pay for the frames you get and for each video read:
| What is charged | Price |
|---|---|
| Frame saved | $2.00 per 1,000 frames ($0.002 each) |
| Video read | $0.005 per video, plus $0.005 for each further started GB of file size |
| Scan minute (Precise scene changes only) | $0.01 per minute of 1080p video at 30 fps |
Free: near-identical frames that are left out, contact sheets, the Videos table, and links that can't be read (pages, audio files, damaged files, refused links, files over your size limit).
Precise scene changes decode every frame, so their cost follows the size of the picture: a minute of 1080p at 30 fps is one scan minute, smaller videos count less (720p at 30 fps is about half a minute, never less than a quarter), and larger ones more (4K at 30 fps is four). The total is rounded up per video and shown in the Videos table.
Examples:
| Run | Cost |
|---|---|
| One thumbnail from each of 100 short videos | $0.70 |
| 20-frame overview of one 10-minute video | $0.045 |
| A frame every 5 seconds from a 10-minute video (120 frames) | $0.245 |
| Every slide change in a 1-hour 1080p lecture under 1 GB (precise, about 40 frames) | $0.685 |
| The same lecture with Overview and high sensitivity (slide changes from keyframes, about 40 frames; a moving pointer can add a few extra frames) | $0.085 |
| 1,000 frames from 50 videos | $2.25 |
Apify plan discounts apply to all three prices: 10% on Bronze, 15% on Silver and 20% on Gold and higher. Set a spending limit under Run options for large runs; the run stops cleanly before it reaches the limit and keeps everything saved so far.
Ready-to-run examples
Each example opens with its input filled in. Paste your own video links and run it.
| Example | What it does |
|---|---|
| One frame per scene of a short film | 30 frames at the scene changes of Big Buck Bunny, with a contact sheet. |
| One thumbnail per video | A single JPG from the middle of each of four videos. |
| A frame every 10 seconds for AI vision | Small WebP frames every 10 seconds, with their times, ready for a vision model. |
| Frames at exact timestamps, as PNG | Full-size PNG frames at five chosen moments. |
| Every cut in a film trailer-length clip | Precise scene detection over the first 2 minutes of Sintel, a frame at every cut. |
Use it from the API, n8n, Make or an AI agent
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("cleanscrape/video-frame-extractor").call(run_input={"videos": ["https://example.com/videos/demo.mp4"],"mode": "interval","intervalSeconds": 5,"maxFrames": 60,"imageFormat": "webp","maxWidth": 768,})for frame in client.dataset(run["defaultDatasetId"]).iterate_items():print(frame["timecode"], frame["imageUrl"])
In n8n or Make, use the Apify node: run the Actor with your video link, then read the Frames dataset; each row's imageUrl can go straight to an image or vision step. For one thumbnail per video, use "mode": "count", "maxFrames": 1.
It also works as a tool in Claude, Cursor and other AI assistants that support MCP, through Apify's MCP server:
https://mcp.apify.com?tools=cleanscrape/video-frame-extractor
Then ask, for example: "Take a frame every 10 seconds from this video and describe what happens."
Common questions
How large can a video be?
Up to 4 GB per file; the default limit is 2 GB, set under Largest video file. The run needs 1 GB of memory for each 2 GB of file (the default 4 GB of memory takes any file up to the limit). Length matters little outside Precise scene changes: in tests, a 50-frame overview of a 30-minute, 1 GB video took 49 seconds including the download. Precise scene changes read every frame: on the default memory, an hour of 1080p video takes roughly 5 to 35 minutes depending on how it was encoded. If a scan would not finish within the run's timeout, it stops early, the video is not charged, and the note says how long it needs; raise the timeout or the memory (more memory means more CPU) for long videos.
Why did I get fewer frames than I asked for?
"Frames per video" is a maximum. Short videos, videos with few scene changes, and near-identical frames that were left out give fewer. The video's note says what was left out. You are only charged for frames saved.
Are the frames full quality?
Frames are scaled down to 1280 pixels wide by default, which suits previews and AI models. Set Largest image width to 0 for the video's full size, and PNG for lossless images.
How long are the images kept?
They are stored in your Apify account like any run's results, for as long as your plan keeps run storage. Download them or copy them to your own storage if you need them longer.
Is it legal?
Use it on videos you own or have the right to use. This is not legal advice.
Good to know
- Times are seconds from the start of the video.
- Rotation stored in phone videos is applied, so frames are upright; the Videos table shows the rotation it found.
- Contact sheets show up to 60 frames per video and are free.
More tools from CleanScrape
- Career Page Jobs Scraper for Greenhouse, Lever and Ashby: open jobs from company career pages, with salaries and new or closed jobs per company
- ATP and WTA Tennis Rankings Scraper: current ATP and WTA singles, doubles and race rankings with points and movement
- Flashscore Tennis Scraper: tennis results, statistics, point-by-point and head-to-head
- Kick Sponsor Tracker: which Kick streamers promote which brands, with codes and broadcast hours
- Whatnot Scraper: Whatnot listings with prices and seller stats, and live shows
- Whatnot Seller Tracker: top sellers per category, items sold, sales per day and followers over time
- TikTok Shop Product Scraper: US TikTok Shop prices, sellers and ratings
- Bilibili Scraper: Bilibili videos, danmaku, comments and creators
- App Store Reviews & Google Play Reviews Scraper: reviews from both app stores in one table
- Google Trends Scraper API: search interest over time, by region, related queries and trending searches
- Map Your Show Exhibitor List Scraper: trade show exhibitor lists and booth changes
- Shopify Product Reviews Scraper API: Judge.me and Okendo reviews from Shopify product links
- Google News Scraper and RSS Feed Reader: headlines from Google News and publisher feeds
- Google Jobs Scraper: job listings with salaries and apply links
- Pinterest Scraper API: keyword search, public pin links and board previews; search results may lack a pin link
- Google Hotels Scraper: hotel prices and booking offers for your dates
- Meta Threads Scraper: public Threads posts from accounts or post links
- Likee Scraper API: Likee videos and comments
- Casino Bonus Checker: the casino bonus each affiliate and review site shows, with promo codes, 18+ notices and affiliate IDs
Support
Questions, a video that is read wrongly or a format you need: open an issue on the Actor's Issues tab or write to contact.cleanscrape@gmail.com with the run ID.
If the Actor was useful, an honest review on its Store page helps other people find it.