Video Frame Extractor — MP4 Frame Extractor & Scene Cuts avatar

Video Frame Extractor — MP4 Frame Extractor & Scene Cuts

Pricing

from $1.50 / 1,000 frames

Go to Apify Store
Video Frame Extractor — MP4 Frame Extractor & Scene Cuts

Video Frame Extractor — MP4 Frame Extractor & Scene Cuts

Video frame extractor, no login: still frames from TikTok, Facebook and MP4 video links, charged per frame delivered. Every N seconds, a set count, each scene cut or the exact times you list — one row per frame with its time, size and an image link in your run's storage.

Pricing

from $1.50 / 1,000 frames

Rating

0.0

(0)

Developer

Steadyfetch Team

Steadyfetch Team

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Video Frame Extractor — Frames & Scene Cuts from Any Link

Paste a video link and get its still frames back as image files, one row per frame: every N seconds, a set number spread evenly over the video, one at every scene cut, or at the exact times you list. Works on TikTok and Facebook video links and on any direct video file (.mp4, .mov, .webm, .m3u8) — no login, no cookies, nothing to install. Each row carries the frame's time, its size, the scene-cut score and a link to the image in your run's storage. Click Start with nothing set and you get a sample: five frames of a public-domain film, read live, and nothing is charged for it.

Using an AI agent? Pin this actor in Apify's MCP server with one link: https://mcp.apify.com?tools=steadyfetch/video-frame-extractor

  • Actor id: steadyfetch/video-frame-extractor
  • Input: { "videoUrls": ["https://www.tiktok.com/@tiktok/video/7700680369246358815"], "mode": "scenes" } — the one field you have to set is videoUrls.
  • Cap the bill: set maxTotalChargeUsd on the run (a run option, not Actor input), e.g. 1.00 — the run takes only the frames that fit.
  • Price: from $1.50 per 1,000 frames on Gold and above, plus $0.005 per video and $0.004 per started minute of video read; full table below. A video that gives no frame is never charged.
  • How often it changes: a published video's frames never change, so a video is read once — run it again only on new links.

Unofficial, not affiliated with TikTok, Meta, Facebook or any site whose videos you read — not endorsed by or sponsored by any of them.

What you get

One row per frame (type: frame).

ColumnWhat it holds
videoUrl · videoIndexthe link you gave and its place in your list
frameIndex · timestampSec · timestampTextthe frame's number and its time in the video (timestampText as mm:ss)
sceneScorein scenes mode, how strong the cut is (0 to 1); empty in the other modes
requestedSecin timestamps mode, the time you asked for that this frame answers
imageUrl · imageKey · imageBytesthe frame as a jpg (or png) image in your run's storage, and its size
width · heightthe frame's size in pixels (never upscaled)
durationSec · videoTitle · sourceHostthe video's measured length, its title where the site gives one, and the site
contactSheetUrlwith the contact sheet on: one grid image of up to 12 of the video's frames, each labelled with its time
charged · chargedEvents · status · statusReasonon every row, so the invoice reconciles from the dataset

A video that gives no frame comes back as one row (type: video) saying why — never charged.

Four ways to pick frames

  • interval (the default): a frame every intervalSeconds (1 by default, from 0.2), from the start, until the video ends or maxFramesPerVideo (30 by default, up to 300) is reached.
  • count: frameCount frames spread evenly over the whole video — a quick storyboard of any length.
  • scenes: the opening frame plus one frame at every scene cut whose change is stronger than sceneThreshold (0.3 finds the hard cuts of edited video). Over maxFramesPerVideo cuts, the strongest are kept.
  • timestamps: the first frame at or after each time in timestamps — seconds (75) or clock times (1:15). A time past the video's end is left out and said on the row.

Frames come at width 360 px (the default), 720 px, or the video's own size (original, up to 1080 px on the short side). Videos up to 30 minutes long.

Your frames are stored with your run

The images are records in your run's own key-value storage, and each row links to its image. Run storage follows your Apify plan's retention: on the Apify free plan your 10 most recent runs are kept for 4 months, and paid plans keep run data for the retention period set on your plan. Download the frames you need before your run's storage expires.

What it costs

EventApify free planBronzeSilverGold and above
Frame (each frame delivered)$0.002$0.0018$0.0016$0.0015
Video (each video that delivers a frame)$0.008$0.007$0.006$0.005
Video minute (each started minute of video read)$0.005$0.0045$0.0042$0.004

Minutes counted: the whole video in count and scenes mode; in interval and timestamps mode, only up to the last frame you asked for (the read stops there). A 75-second video with 10 frames at Gold: $0.005 + 2 × $0.004 + 10 × $0.0015 = $0.028. No start fee. Never charged: a link this actor does not read, a video that cannot be opened or decoded, a page with no video, a video over 30 minutes, a video your account already got the same frames of, videos cut by your own limits or the run clock, and the sample a bare Start returns. Platform usage is included in these prices.

Already delivered, never charged twice

A video your account already got frames of, with the same settings, is skipped and not charged; turn on includeSeen to read it again. The memory lives in your own Apify account (a key-value store named video-frame-extractor-memory). The same video named twice in one run — even as two different links — is read once and charged once.

Input

FieldWhat it does
videoUrlsvideo links, one per line: TikTok video or share links, Facebook videos and reels, Loom, Wistia, Twitch and archive.org video pages, or any direct video file address
modeinterval · count · scenes · timestamps
intervalSeconds · frameCount · sceneThreshold · timestampsthe setting for each mode
maxFramesPerVideothe most frames from one video, any mode (30 by default, up to 300)
width · format360 · 720 · original; jpg or png
includeContactSheetone labelled grid image per video, no extra fee
includeSeenread videos your account already has
maxRunSecondsstop after this many seconds; videos not reached get their own uncharged row

YouTube, Vimeo, Instagram and X pages are not read; a direct file link to the same video works.

As an HTTP endpoint

The same actor answers HTTP requests (Apify Standby): GET https://steadyfetch--video-frame-extractor.apify.actor?videoUrl=<link>&mode=count&frameCount=5 with your Apify token returns the frames as JSON in the same response, each image inline (base64), charged exactly as a run. One video per request, at most 10 frames of a video up to 3 minutes long, at 360 or 720 px; Apify free plan callers get 3 frames of a video up to 1 minute at 360 px. The endpoint keeps no account memory and makes no contact sheet.

When something goes wrong

Every video that gives no frame ends on one uncharged row naming why: the site is not one this actor reads, the link is not a video, the video exists only in a format that cannot be decoded, the page needs a signed-in viewer, it is not found at that address, it is over 30 minutes, or the site refused the read for now (please re-run). A time limit ends the reading, never the delivering: frames already taken are always delivered. This actor may fail when a site changes how it serves video — failed items are never charged.

Questions

Open an issue on the Issues tab — we usually reply within a couple of hours.

If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.