Video frames on 300 s: fps 0.08 gives 24 stills, 12.5 s apart
The video-frames route takes clips up to 300 s and 24 frames per call. At fps 0.08 a 300-second clip yields 24 source-size stills, from 6.25 s to 293.75 s.

On a 300-second clip, send fps: 0.08 to video frames and you get 24 stills, 12.5 seconds apart. 300 x 0.08 = 24, which is the per-call cap, and 300 s is the longest source the route takes.
The sample times
Video frames expands fps into mid-bin samples at 0.5/fps, 1.5/fps, and so on. At 0.08 the first is at 6.25 s and the last at 6.25 + 23 x 12.5 = 293.75 s.
| Field | Value |
|---|---|
| Source limit | 300 s |
| Frames per call | 24 maximum |
fps used | 0.08 |
| Spacing | 1 / 0.08 = 12.5 s |
| First sample | 0.5 / 0.08 = 6.25 s |
| Last sample | 293.75 s |
| Submit response | always 202 (async) |
Source size versus inspect
Frames keep the source frame size unless you send max_edge (16 to 2160). Video inspect stills default to a 768 edge. If you only want a quick contact sheet, inspect is enough; if you need to read small text on screen, use frames and format: "png".
Request and polling
The submit pins async mode, so do not send mode: "sync". Poll the job, or read GET /v1/video-frames/:id until resource_status is ready. A single instant that fails gives that frame url: null without failing the job. Import the clip first with POST /v1/media-imports so it sits on media.sume.com, send an Idempotency-Key header, then poll GET /v1/jobs/:id/status and read GET /v1/jobs/:id/result. The API rejects off-host URLs at admit, so a bad URL fails before any work runs.
curl -X POST https://api.sume.com/v1/video-frames \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: frames-300-001" \
-d '{"video_url":"https://media.sume.com/artifacts/artf_demo/long.mp4","fps":0.08,"format":"png"}'Warnings
For a source longer than 90 seconds the job can add low_confidence_long_video to warnings[]. It does not fail the job. A source longer than 300 s fails with duration_out_of_range; trim it first, or use inspect, which takes up to 1800 s.
Choosing between frames and at
The same cap applies to explicit times: at[] takes 1 to 24 values. If you need a frame at every scene change, probe first, then name those instants. For a 300 second clip, 24 evenly spaced frames is a coarse view, one frame per 12.5 seconds, so short flashes between samples are missed. Raise coverage by running two calls with offset programs, for example one at[] list on the half-bins and another on the whole seconds. Every media job follows the same lifecycle: submit with an Idempotency-Key, receive a job, poll GET /v1/jobs/:id/status until it is ready, then read GET /v1/jobs/:id/result. A retry with the same key does not queue a second job, so a network error during submit never doubles a charge.
Sources
Related posts
More in Media tools
- Video inspect on a 60 s clip: stills at 3.75 s, then every 7.5 s
With no frames program, video inspect returns 8 mid-bin stills. On a 60-second clip they land at 3.75, 11.25, 18.75 seconds and on, 768 px on the long edge.
- Video inspect with fps 0.4 returns 24 stills from a 60-second clip
The inspect frames program caps at 24 stills and fps at 2. For a 60-second clip, fps 0.4 fills all 24 slots, 2.5 seconds apart, centered in each bin.
- Video inspect seek fast vs precise: stills up to one GOP early
Sume video inspect seek: fast snaps each still to the keyframe at or before the time, about 0-5 s early on typical sources. precise decodes the exact instant.
- Video inspect seek fast vs precise: stills up to one keyframe early
Set seek fast to get stills from the keyframe at or before each time, skipping the decode. Stills can be early by a GOP, about 0 to 5 s, never later.
Written by Sume