Video Scene Detection & Shot List - Cut Timecodes, CSV, EDL avatar

Video Scene Detection & Shot List - Cut Timecodes, CSV, EDL

Pricing

from $14.40 / 1,000 video minutes

Go to Apify Store
Video Scene Detection & Shot List - Cut Timecodes, CSV, EDL

Video Scene Detection & Shot List - Cut Timecodes, CSV, EDL

Detect every shot in a video file: cut, dissolve and fade timecodes, one keyframe per shot, a shot sheet image, pacing stats, and CSV, JSON and CMX3600 EDL files. Optional clip splitting without re-encoding. $0.018 per video minute.

Pricing

from $14.40 / 1,000 video minutes

Rating

0.0

(0)

Developer

Kanto Labs

Kanto Labs

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

3

Monthly active users

22 days ago

Last modified

Share

What does Video Scene Detection & Shot List do?

Video Scene Detection & Shot List finds every shot in a video file and gives you a shot list with cut timecodes. Each shot has its start and end time, its frame numbers and an SMPTE timecode, and how it begins: a hard cut, a dissolve or a fade through black. You also get one keyframe image per shot, a single shot sheet image (a storyboard of the whole video) and pacing stats such as cuts per minute and average shot length. Each video's shot list is saved as a CSV, a JSON and a CMX3600 EDL file you can import into Premiere Pro, DaVinci Resolve or Avid. If you need the shots as separate files, it can also split the video into one clip per shot without re-encoding.

It runs on direct video file links (MP4, MOV, WEBM, MKV, AVI, M4V, MPEG-TS), and there is no AI model or API key to set up.

Who is it for?

  • Automation builders (n8n, Make, Zapier, API, AI agents): every row has the same field names, a flat shots array and links to the files, so a workflow can loop over shots without any parsing.
  • Ad and UGC researchers: tear down your own or your client's ads shot by shot. The shot sheet, shot lengths and cuts per minute show the pacing at a glance, and help you rebuild a winning video shot for shot.
  • Video editors: import the EDL to get every cut on your timeline, or split an archive film into one clip per shot.
  • AI dataset builders: cut long videos into clean single-shot clips, or keep one keyframe per shot for captioning.

How to use it

  1. Paste one or more direct links to video files into Video file URLs. Dropbox and Google Drive share links work when shared as "anyone with the link".
  2. Keep the defaults, or tune Cut threshold (lower finds subtler cuts) and Min shot length.
  3. Optional: turn on Split into clips.
  4. Run it. Each video gives one dataset row plus its CSV, JSON, EDL, keyframes and shot sheet in the run's key-value store, all behind public signed links.

Running the actor with no input ({}) processes a 21-second public-domain NASA sample.

Pricing

Pay per event, with no start fee and no subscription:

EventPriceSilverGold
Video minute (each started minute of video scanned)$0.018$0.0162$0.0144
Clip (only if Split into clips is on)$0.002$0.0018$0.0016

Keyframes, the shot sheet, and the CSV, JSON and EDL files are included in the minute price.

Videos up to 1080p (in either orientation, vertical 1080×1920 included) count 1 video minute per minute. Bigger frames take far longer to decode, so they count one video minute per started 2.2 megapixels per frame: 1440p counts 2, and 4K counts 4 (that is, $0.072 per minute of 4K). Each row shows its billingMultiplier.

Worked example: a 10-minute video costs 10 × $0.018 = $0.18. If it has 60 shots and you also split it into clips, add 60 × $0.002 = $0.12, for $0.30 in total. A batch of 100 ads of 30 seconds each costs 100 × $0.018 = $1.80.

Refused links, failed downloads and unreadable files are free rows that say what went wrong. If you set a max cost per run, the actor checks it before each video. It scans only as many minutes as the budget allows (truncated: true), and any further videos get free skipped rows.

Output example

Here is a real result for the public-domain 1953 trailer Phantom From Space (98 s). It found 43 shots: 36 hard cuts and 6 dissolves.

{
"fileName": "PhantomFromSpace.mp4",
"status": "ok",
"durationSeconds": 98.06,
"fps": 29.97,
"shotCount": 43,
"hardCutCount": 36,
"dissolveCount": 6,
"fadeCount": 0,
"averageShotSeconds": 2.28,
"medianShotSeconds": 2.102,
"cutsPerMinute": 25.7,
"csvUrl": "https://api.apify.com/v2/key-value-stores/.../records/27c536fa-PhantomFromSpace-shots.csv?signature=...",
"edlUrl": "https://api.apify.com/v2/key-value-stores/.../records/27c536fa-PhantomFromSpace-shots.edl?signature=...",
"shotSheetImageUrl": "https://api.apify.com/v2/key-value-stores/.../records/27c536fa-PhantomFromSpace-shot-sheet.jpg?signature=...",
"billedMinutes": 2,
"shots": [
{
"index": 2,
"start": 4.304,
"end": 7.207,
"duration": 2.903,
"startTimecode": "00:00:04.304",
"endTimecode": "00:00:07.207",
"startSmpte": "00:00:04:09",
"endSmpte": "00:00:07:06",
"startFrame": 129,
"endFrame": 216,
"transition": "cut",
"cutScore": 0.5165,
"keyframeTime": 6,
"keyframeUrl": "https://api.apify.com/v2/key-value-stores/.../records/27c536fa-PhantomFromSpace-shot0002-000006000ms.jpg?signature=...",
"clipStart": 4.304,
"clipEnd": 7.207,
"clipUrl": "https://api.apify.com/v2/key-value-stores/.../records/27c536fa-PhantomFromSpace-clip0002.mp4?signature=..."
}
]
}

The EDL is frame-accurate. In the example above, frame 128 is the last frame of shot 1 and frame 129 is the first frame of shot 2.

How it detects shots

The actor decodes the video once at a tiny analysis size. A cut has to be a sharp change that stands out from the motion around it, so camera pans and people moving are not cuts. Camera flashes, which change the picture and then return to it, are ignored.

Dissolves are found when the picture changes gradually and the new picture persists across most of the frame. A hand-held camera drifting, or someone gesturing, does not count. A fade is found when a run of black frames has content on both sides.

The boundary of a dissolve or fade is placed at the middle of the transition. In our tests, a single-take talking-head video gave exactly 1 shot, and edited interviews and trailers gave one shot per camera change. In screen recordings, a jump to a new page counts as a cut, because the whole picture changes.

Clips without re-encoding

Split into clips cuts the file with stream copy, so it is fast and keeps the original quality. Stream copy can only start a clip on a video keyframe. Each clip therefore starts at the first keyframe in the opening part of its shot, and its exact clipStart and clipEnd are reported.

If a shot has no keyframe near its start (common in old films and heavily compressed files), it gets no clip of its own. Its frames stay at the end of the previous clip, and it is not charged.

FAQ

Why does a 4K video cost more per minute?

Decoding a 4K frame takes about four times the work of a 1080p frame, and every frame must be decoded to find frame-accurate cuts. To keep the price per minute low for the usual 720p and 1080p files, larger frames are billed by size. If you have a 1080p proxy of a 4K edit, run that instead: the timecodes are identical.

Is it free to try?

Yes, within Apify's free monthly credit. A 1-minute video costs $0.018.

No. Their terms forbid downloading. Use direct links to video files you are allowed to process: your storage, S3/R2/GCS (public or pre-signed), a CDN, Dropbox or Google Drive.

Why did I get too many or too few shots?

Raise Cut threshold (for example to 0.2–0.3) for fewer shots, or lower it (0.06–0.1) for very dark or low-contrast footage. Raise Min shot length to merge rapid montages. Screen recordings report page changes as cuts.

Which editors can import the EDL?

Any editor that reads CMX3600: Premiere Pro, DaVinci Resolve, Avid Media Composer, Final Cut Pro (via a converter) and others. The reel is AX, and the file name is in the FROM CLIP NAME comment, so the editor can relink the media.

How long can a video be?

Up to 300 minutes (180 by default) and 4 GB. A 10-minute 1080p video takes about 4–5 minutes to process, so for videos over an hour raise the run timeout in Run options.

Found a problem? Open an issue on the Issues tab. We answer within a day.