Video to Scenes — Scene Detection, Keyframes, Transcript avatar

Video to Scenes — Scene Detection, Keyframes, Transcript

Pricing

from $2.00 / 1,000 frames

Go to Apify Store
Video to Scenes — Scene Detection, Keyframes, Transcript

Video to Scenes — Scene Detection, Keyframes, Transcript

Split videos into scenes: cut detection, one keyframe per scene, contact sheet and, optionally, what is said in each scene. Frames every N seconds or at timestamps. Markdown storyboard and RAG chunks for LLMs.

Pricing

from $2.00 / 1,000 frames

Rating

0.0

(0)

Developer

Salih Küçükkayış

Salih Küçükkayış

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Categories

Share

Split videos into scenes and keyframes for AI vision, video search, thumbnails and editing. Give it video file links (or Google Drive and Dropbox share links) and get, for each video, every scene cut with its time range, one keyframe per scene, a contact sheet, and, if you want, what is said in each scene: a transcript attached to the matching keyframe, ready for multimodal RAG and LLM video understanding.

Other modes: one frame every N seconds, N frames spread evenly, or frames at the timestamps you list.

$2 per 1,000 frames, $5 per 1,000 video minutes scanned for scenes (Scenes mode only), $5 per 1,000 audio minutes transcribed (only with the transcript on), plus $0.005 per run. Contact sheets, metadata and videos that fail are free. No subscription, no API key, no ffmpeg to install.

Quick start

Press Start with the example input. It splits the 52-second Sintel trailer into scenes:

{
"videoUrls": ["https://media.w3.org/2010/05/sintel/trailer.mp4"]
}

Each video becomes one dataset row (real output of that run, lists shortened):

{
"url": "https://media.w3.org/2010/05/sintel/trailer.mp4",
"fileName": "trailer.mp4",
"durationSec": 52.208,
"width": 854, "height": 480, "fps": 24,
"videoCodec": "h264", "audioCodec": "aac", "hasAudio": true, "container": "mov", "bitrateKbps": 670,
"mode": "scenes",
"analyzedSec": 52.208,
"sceneCount": 17,
"frameCount": 17,
"contactSheetUrl": "https://api.apify.com/v2/key-value-stores/.../records/000-trailer-contact-sheet.jpg?signature=...",
"scenes": [
{ "scene": 0, "label": "Scene 1", "startSec": 0, "endSec": 1.333, "durationSec": 1.333, "cutScore": null, "timestampSec": 0.875,
"imageUrl": "https://api.apify.com/v2/key-value-stores/.../records/000-trailer-001.jpg?signature=..." },
{ "scene": 1, "label": "Scene 2", "startSec": 1.333, "endSec": 5.083, "durationSec": 3.75, "cutScore": 0.386, "timestampSec": 3.208, "imageUrl": "..." },
{ "scene": 2, "label": "Scene 3", "startSec": 5.083, "endSec": 8.125, "durationSec": 3.042, "cutScore": 0.653, "timestampSec": 6.625, "imageUrl": "..." }
],
"frames": [
{ "index": 0, "timestampSec": 0.875, "timecode": "00:00:00.875", "scene": 0, "imageUrl": "...", "width": 854, "height": 480 }
],
"markdown": "# trailer\n\nSource: https://media.w3.org/2010/05/sintel/trailer.mp4 · Duration: 00:52\n\n## Scene 1 (00:00–00:01)\n\n![Scene 1 at 00:00](...)\n\n...",
"billed": { "videoMinutes": 1, "frames": 17, "transcriptMinutes": 0 }
}

With Transcript on, each scene also gets the words spoken in it, and chunks holds one RAG chunk per scene with speech. From the full 15-minute Sintel film:

{ "index": 0, "chars": 151, "text": "You're a fool for traveling alone so completely unprepared. You're lucky your blood's still flowing. So what brings you to the land or the gatekeepers?",
"startSec": 109.5, "endSec": 134.375, "startTime": "01:49", "imageUrl": "...", "scene": 22 }

What it does

  • Scene detection: compares the colour histogram of the picture 4 times a second and marks a cut where it changes sharply. Colour, not only brightness, so a cut between two shots of similar brightness (navy to dark red) is still found. Scene cut sensitivity and Shortest scene tune it; Fast scan looks at keyframes only for long videos.
  • Keyframes: one still from the middle of each scene, so it shows the scene, not the transition. When there are more scenes than Max frames per video, every cut is still listed and the stills are spread evenly over the scenes.
  • Black frames (fades, cuts to black) are replaced by the next frame with content in the same scene. Turn Skip black frames off for exact times.
  • Contact sheet: one grid image of all frames with timecodes, free.
  • Transcript per scene (optional): the audio is transcribed with Whisper on CPU and each sentence is attached to the scene it falls in. You also get the full transcript with timestamps, and chunks: one RAG chunk per scene with its text, time range and keyframe link.
  • Markdown storyboard: a heading per scene with its time range, keyframe image and what is said. Paste it into an LLM or a notes app.
  • Images: JPEG, WebP or PNG, scaled to Max image width (1280 px by default) or kept at full size. Every image has a public link that works without an Apify login.
  • Metadata: duration, resolution, frame rate, codecs, bitrate and container.

Pricing

EventPriceWhen
Frame$2 / 1,000each still saved
Video minute$5 / 1,000each started minute scanned for cuts, Scenes mode only
Transcript minute$5 / 1,000each started minute of audio transcribed, only with the transcript on
Run start$0.005per run, at the default 4 GB memory

Cost examples:

JobCost
100 short videos, 8 frames each (Count mode)$1.61
A 10-minute video split into 40 scenes$0.14
The same with the transcript of every scene$0.19
A 15-minute 2K film: 98 scenes, 50 keyframes and the transcript (measured)$0.26
A 2-hour lecture, one frame a minute (Interval mode, Max frames 120)$0.25

Set a spending limit on the run (Max total charge in Apify) and the Actor stops cleanly at it: the scan, the frames and the transcript are cut to what still fits. Max minutes per video (default 120) caps each video.

Use it from code, n8n, Make or an AI agent

curl -X POST "https://api.apify.com/v2/acts/saliga~video-to-scenes/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videoUrls": ["https://example.com/demo.mp4"], "transcribe": true}'

Feed the imageUrl of each scene to a vision model together with the scene's transcript to describe, tag or search the video scene by scene.

Limits

  • Platform pages are not supported: YouTube, TikTok, Instagram, Facebook, X, Vimeo and similar pages are refused with a clear error. Use a direct link to the video file.
  • Scene detection finds hard cuts. Slow cross-fades and dissolves may not be split; lower the sensitivity value to catch more of them (and some false cuts).
  • Up to 300 frames and 600 minutes per video, and 4 GB per download. Live streams are not supported.
  • The transcript uses Whisper's base model: good for clear speech, weaker on names and noisy audio. For a transcript alone, see Audio to Text.

FAQ

Is my video sent anywhere else? No. It is downloaded into the run and processed there with ffmpeg (PyAV) and an open-source Whisper model.

Why was something not charged? Videos that cannot be downloaded or decoded, frames that cannot be read, timestamps past the end of the video and audio without speech are never charged. The error or note field says why.

Other tools from the same developer: Career Site Jobs, Audio to Text, Document to Markdown, Bulk HTTP Requests, Website Screenshot + Change Detection, Keyword Search Volume.