YouTube Video Frame Extractor
Pricing
from $2.50 / 1,000 frame captureds
YouTube Video Frame Extractor
Extract JPEG frames from any YouTube video: at exact timestamps (to the millisecond), every N seconds, or N evenly spaced frames, at 360p-1080p. Downloads only the seconds around each frame, so even hour-long videos are fast. Pay per frame; failed frames are free.
Pricing
from $2.50 / 1,000 frame captureds
Rating
0.0
(0)
Developer
TTech
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
13 hours ago
Last modified
Categories
Security
Limited permissionsShare
Paste YouTube links and get JPEG frames from them. You choose which frames:
- Exact timestamps, to the millisecond, such as
00:01:23.250 - One frame every N seconds, such as every 10 seconds
- N evenly spaced frames across the whole video or a part of it
Frames come at 360p, 480p, 720p or 1080p. The Actor returns one image link per frame.
Why this Actor
| This Actor | Typical frame extractors | |
|---|---|---|
| YouTube links | Paste any YouTube, Shorts or youtu.be link | Many accept only direct video files (MP4 URLs) |
| What it downloads | Only the few seconds that hold each frame | Often the whole video |
| Speed | Seconds for a handful of frames, even from hour-long videos | Grows with video length |
| Precision | The exact frame on screen at that millisecond | Varies; some snap to the nearest keyframe |
| Pricing | Per frame. No per-video, per-minute or per-megabyte fees | Often per video plus per frame, sometimes per MB |
| Proxies | None needed: nothing to set up | Often extra, or your own |
| Failed frames | Free | Varies |
| Retries | Automatic | Varies |
What you can use it for
- Thumbnails and preview images at chosen moments
- Frame-by-frame study of editing, animation or camera style
- Stills from YouTube for computer vision, AI training or AI agents
- Screenshots for articles, reports and documentation
Input
| Field | Description |
|---|---|
videos | YouTube URLs (watch?v=, youtu.be/, Shorts, embed or live links) or 11-character video ids. Up to 500. |
mode | timestamps (default), interval or evenly. |
timestamps | Exact timestamps mode: HH:MM:SS or HH:MM:SS.mmm, such as 00:01:23 or 00:01:23.250. Up to 1000, captured from every video. |
intervalSeconds | Interval mode: seconds between frames, from 0.1 up. Default 10. |
frameCount | Evenly spaced mode: frames per video, 1-1000. Default 10. |
startTime, endTime | Interval and evenly spaced modes: optional range, such as 00:01:00 to 00:05:00. Default: the whole video. |
resolution | 360, 480, 720 (default) or 1080. A video smaller than this keeps its native size. |
Exact timestamps:
{"videos": ["https://www.youtube.com/watch?v=Ap8jTCMK3c4"],"timestamps": ["00:00:50", "00:01:10.500"],"resolution": "720"}
One frame every 30 seconds of the first 5 minutes:
{"videos": ["https://youtu.be/Ap8jTCMK3c4"],"mode": "interval","intervalSeconds": 30,"endTime": "00:05:00"}
20 frames spread over the whole video, in 1080p:
{"videos": ["Ap8jTCMK3c4"],"mode": "evenly","frameCount": 20,"resolution": "1080"}
In the interval and evenly spaced modes, frames follow each video's own length, so one input works for a mix of short and long videos. Evenly spaced frames sit in the middle of equal parts of the range. This skips the often-black first frame and the very end.
Output
The Actor pushes one dataset item per video and frame. The image is saved in the run's
key-value store, and imageUrl links to it directly.
{"videoId": "Ap8jTCMK3c4","videoUrl": "https://www.youtube.com/watch?v=Ap8jTCMK3c4","timestamp": "00:01:10.500","resolution": "720p","status": "OK","imageUrl": "https://api.apify.com/v2/key-value-stores/.../records/Ap8jTCMK3c4_00-01-10.500_720p.jpg","imageKey": "Ap8jTCMK3c4_00-01-10.500_720p.jpg","error": null}
resolution is the size you actually got, by the shorter side. It can be below what you
asked for when the video itself is smaller.
A frame that could not be captured has "status": "fail", imageUrl: null and the reason in
error, for example a timestamp past the end of the video. Other frames of the run are not
affected. In exact timestamps mode, timestamp is echoed exactly as you sent it.
Which frame you get: the one on screen at that time, meaning the first frame at or after the timestamp. Near the very end of a video, you get its last frame.
Pricing
You pay per captured frame, and failed frames are free.
| Per frame | Per 1,000 frames | |
|---|---|---|
| 360p, 480p or 720p | $0.0025 | $2.50 |
| 1080p | $0.006 | $6 |
There's also a small start fee of $0.005 per run (per GB of memory, with a minimum of one, so $0.005 at the default 256 MB). There are no per-video, per-minute or per-megabyte fees. 1080p costs more because each 1080p frame needs about three times the video data. You pay for the resolution you actually get: a 1080p request on a video that only goes up to 720p is charged as 720p.
The Actor respects your run's maximum charge setting: it stops capturing once that limit is reached, and keeps everything captured so far. If Apify moves a run to another server, the run continues where it was: frames already captured are not captured or charged again.
Limits
- Live streams that are still live are not supported. Private, deleted, region-locked and age-restricted videos fail with an error.
- At most 1000 frames per video in the interval and evenly spaced modes, and 1000 timestamps per run.
- On Apify's Free plan, 100 frames per calendar month. Paid Apify plans have no monthly limit.
- Timestamps go up to
99:59:59.999. - For very large runs, raise the run timeout. The Actor stops cleanly before the timeout and keeps everything captured so far.