Video Frame Extractor
No Per-Video Fee
Example request
curl -X POST https://radarbg.com/v1/video-frame-extractor \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"videoUrls": ["https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_1MB.mp4"], "mode": "count", "frameCount": 8, "everySeconds": 10}'
Answer: {"ok": true, "count": N, "items": [...], "usage": {...}}. Failed calls are not counted.
Inputs
| Field | Type | Description |
|---|---|---|
videoUrls | array | Direct links to video files (mp4, mov, webm, mkv, m4v) or Apify key-value store file URLs. Links must be public and point straight to the file. YouTube, TikTok, Instagram and Facebook page links are not supported and are skipped. |
mode | string | scenes = a frame at every scene change (ffmpeg scene detection). interval = one frame every N seconds. count = N evenly spaced frames. timestamps = exact times you list. |
frameCount | integer | Used in count mode: how many evenly spaced frames to extract per video (limited by Max frames per video). |
everySeconds | number | Used in interval mode: extract one frame every this many seconds, starting at 0. |
timestamps | array | Used in timestamps mode: times to extract, as seconds (12.5) or HH:MM:SS (00:01:02.5). Times beyond the video end are skipped. |
sceneThreshold | number | Used in scenes mode: sensitivity from 0.01 to 1. Lower finds more scene changes (0.1 very sensitive), higher only hard cuts. 0.3 is a good default. |
maxFramesPerVideo | integer | Hard cap on frames per video (any mode). You pay per frame, so this caps the cost. Maximum 500. |
format | string | Image format of the extracted frames. jpg is smallest, png is lossless, webp is a good compromise. |
width | integer | Resize frames to this width, keeping the aspect ratio. Never upscales. 0 keeps the original size. |
quality | integer | Quality for jpg and webp, 1 to 100 (higher = better and bigger files). Ignored for png. |
contactSheet | boolean | Also create one tiled grid image per video with all frames and their timecodes (one extra result row of type contact_sheet). Handy for a quick overview or for sending one image to an AI vision model. |
maxVideoMinutes | integer | Skip videos longer than this many minutes. A safety guard against huge files and surprise cost. |
onlyNew | boolean | Skip every video URL already processed in an earlier run with the same Monitor ID and the same settings. Use it for recurring jobs on a folder or feed of videos. Each video is paid for once. |
monitorId | string | Separate memory for each watch list (used with only-new mode). Use a different ID per feed or customer. |
Price
Included in every plan: 100 calls a month free, then from €9 a month for 3,000 calls across all APIs.