SCTE-35 from the same read
A splice insert for the slot at 00:09:27.067. The packager receives the cue. The ad is not inserted here.
splice_insert
00:09:27.067 – 00:09:28.067
PTS 13596
Out of network
2 avails expectedFile ad-break detection
AdBreak reads the file you submit: scene cuts, black frames, speech, silence, loudness, and motion. The same speech pass writes subtitles and translates them into 22 languages. It returns the times an ad can enter, why that window held, and a cue your packager can place. It does not insert the ad.
Finished reads
Each card is one completed read. The counts are what that file returned: slots kept, and subtitle cues from the same speech pass.

First cut 00:09:27.066
Length 00:22:38.618
2 slots kept
426 subtitle cues

First cut 00:05:24.241
Length 00:57:34.880
3 slots kept
714 subtitle cues

First cut 00:24:01.400
Length 01:34:44.768
8 slots kept
286 subtitle cues
A splice insert for the slot at 00:09:27.067. The packager receives the cue. The ad is not inserted here.
splice_insert
00:09:27.067 – 00:09:28.067
PTS 13596
Out of network
2 avails expectedThe speech pass wrote this WebVTT cue. The page language is separate from the language of the file.
00:09:37.240 --> 00:09:42.640
Please, come on, come on.The overlay on a processed file
01
Playback
Clips and stills from processed files. Each clip runs from a few seconds before the chosen slot to a few seconds after it. The overlay keeps the clock, the scene, and the object tags. The factors under a clip are the ones that added up to that score.
Slots
Pre-roll · Mid-roll · Post-roll
Handoff
SCTE-35 · HLS cue · VMAP
Signals
Read the file · Drop the unsafe window · Hand off the cue
02
The gap
A mid-roll every few minutes lands inside a line, a laugh, or a pan. Viewers leave, and the creative opens on a broken shot.
Archive files often have no SCTE-35, and a program guide is too coarse to carry a mid-roll. Without a cue, server-side insertion has nowhere honest to go.
Knowing the title is a cooking series does not say whether the seconds before the break are a calm demo or a burn. Buyers and brand rules judge that window.
03
Method
The engine works on the file, not on a live switcher and not on the filename. Speech, picture, and loudness are read together, then a window is kept only if it survives the guards.
Scene cuts and black frames, sentence boundaries and voice activity, silence and loudness, and motion. Opening and end credits are marked on their own. Tag detection names the scene, the objects, and the people on each stretch of picture, and the overlay writes those tags onto the frames. The same speech pass writes SRT and WebVTT, and those subtitles translate into 22 languages.
A cut inside a spoken line is moved or dropped. A fast, loud montage with no real pause does not outrank a fade and a silence. Slots that miss the gate and are kept only to fill a minimum are marked forced.
Each kept slot has a cut time, a kind of break, a reason, confidence, and the distance to speech. The same times can leave as SCTE-35 or an HLS cue, snapped to a keyframe. The overlay is there so a person can look at the frame first.
04
Why this cut
The useful output is a time the packager can consume, plus enough of the read that a person can accept or reject it.
A show label does not say where to splice. The slot is a cut time on this file, with the kind of break: a cut, a scene change, or black.
Sentence boundaries and voice activity keep the splice off a line. Each slot reports how far speech sits from the cut, and whether that distance was safe.
High motion, a run of cuts, or a loud stretch without a pause is rejected. A real fade and a silence can win. Missing a measurement skips that check, it does not invent one.
The reported time is the cut or the dark frame, not a second before it. SCTE-35 splice points snap to a keyframe unless you turn that off.
The overlay burns the clock, the scene, the object tags, and a score badge onto the frame, so that time shows which objects are in the shot. The cue you send on is SCTE-35 or an HLS cue. AdBreak does not play the creative.
When a minimum count is set, slots that missed the gate can be promoted, and they are marked. An editor can drop them. Fewer clean slots beat a quiet lie.
05
Output
Nine mid-roll cues from one processed file (01:34:44.768). Scene names and the reason line stay in English, as the engine wrote them.
00:09:04.545
unknown
aeroplane
cut within scene (cut 14.85), pause 10.8 s
Confidence 1 · 5.4 s from speech
00:18:37.159
outdoor/street
aeroplane, car, cat, chair · 2 people
cut within scene (cut 16.52), pause 44.1 s
Confidence 1 · 22.04 s from speech
00:28:16.280
people
backpack, bird, person, tie · 4 people
cut within scene (cut 14.73), pause 30.5 s
Confidence 1 · 15.24 s from speech
00:36:25.686
people
backpack, boat, book, dog · 3 people
cut within scene (cut 8.47), pause 4.3 s
Confidence 1 · 2.16 s from speech
00:45:15.299
indoor/kitchen
cell phone, oven, person, sink · 3 people
scene change (cut 23.69), pause 23.1 s
Confidence 1 · 11.56 s from speech
00:52:22.643
outdoor/nature
backpack, book, cat, cow · 2 people
scene change (cut 21.37), pause 20.2 s
Confidence 1 · 10.12 s from speech
01:01:41.869
people
motorbike, person · 3 people
black 1.67 s, pause 5.8 s
Confidence 1 · 2.91 s from speech
01:10:23.765
people
baseball glove, bird, frisbee, person · 2 people
cut within scene (cut 17.2), pause 15.3 s
Confidence 1 · 7.64 s from speech
01:19:27.100
unknown
dog
cut within scene (cut 13.88), pause 15.0 s
Confidence 1 · 7.51 s from speech
{
"assetId": "",
"duration": "01:34:44.768",
"slots": [
{
"role": "mid-roll",
"time": "00:09:04.545",
"confidence": 1,
"kind": "cut",
"scene": "unknown",
"tags": [
"aeroplane"
],
"people": 0,
"reason": "cut within scene (cut 14.85), pause 10.8 s",
"speechDistanceSec": 5.4,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "00:18:37.159",
"confidence": 1,
"kind": "cut",
"scene": "outdoor/street",
"tags": [
"aeroplane",
"car",
"cat",
"chair"
],
"people": 2,
"reason": "cut within scene (cut 16.52), pause 44.1 s",
"speechDistanceSec": 22.04,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "00:28:16.280",
"confidence": 1,
"kind": "cut",
"scene": "people",
"tags": [
"backpack",
"bird",
"person",
"tie"
],
"people": 4,
"reason": "cut within scene (cut 14.73), pause 30.5 s",
"speechDistanceSec": 15.24,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "00:36:25.686",
"confidence": 1,
"kind": "cut",
"scene": "people",
"tags": [
"backpack",
"boat",
"book",
"dog"
],
"people": 3,
"reason": "cut within scene (cut 8.47), pause 4.3 s",
"speechDistanceSec": 2.16,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "00:45:15.299",
"confidence": 1,
"kind": "scene",
"scene": "indoor/kitchen",
"tags": [
"cell phone",
"oven",
"person",
"sink"
],
"people": 3,
"reason": "scene change (cut 23.69), pause 23.1 s",
"speechDistanceSec": 11.56,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "00:52:22.643",
"confidence": 1,
"kind": "scene",
"scene": "outdoor/nature",
"tags": [
"backpack",
"book",
"cat",
"cow"
],
"people": 2,
"reason": "scene change (cut 21.37), pause 20.2 s",
"speechDistanceSec": 10.12,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "01:01:41.869",
"confidence": 1,
"kind": "black",
"scene": "people",
"tags": [
"motorbike",
"person"
],
"people": 3,
"reason": "black 1.67 s, pause 5.8 s",
"speechDistanceSec": 2.91,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "01:10:23.765",
"confidence": 1,
"kind": "cut",
"scene": "people",
"tags": [
"baseball glove",
"bird",
"frisbee",
"person"
],
"people": 2,
"reason": "cut within scene (cut 17.2), pause 15.3 s",
"speechDistanceSec": 7.64,
"speechSafe": true
},
{
"role": "mid-roll",
"time": "01:19:27.100",
"confidence": 1,
"kind": "cut",
"scene": "unknown",
"tags": [
"dog"
],
"people": 0,
"reason": "cut within scene (cut 13.88), pause 15.0 s",
"speechDistanceSec": 7.51,
"speechSafe": true
}
]
}One kept slot from a processed read of this file. The score is the sum of every factor below. Confidence is that total mapped into a value from 0 to 1.
01:00:24.791
01:00:23.667–01:00:27.667
3.971 s from speech
Score16.4362
Confidence0.97
Detected
Factors
06
Who runs it
Monetize archive episodes that were finished before dynamic insertion existed.
When a file arrives without markers, mark it before playout. This is file analysis, not a live frame-accurate switcher.
Replace a long manual scrub with a short list of candidates a person can confirm.
07
Questions
No. It finds and describes the slot. Your player, packager, or server-side insertion system places the creative.
Clean slots can be few. If a minimum count is set, the engine may promote windows that missed the gate and marks those slots forced. It will not move a splice into the middle of a line to fill the count.
Yes. Confidence, the reason, the distance to speech, and the forced mark are there so an editor can accept or drop the slot before it becomes a cue.
SCTE-35 splice points snap to a keyframe by default. HLS and DASH still need your packager to condition the stream. AdBreak does not do that conditioning, and it does not insert the creative.
No. The overlay and the payload describe the window: scene, objects, people, and how far speech sits from the cut. Certification and blocking stay with the brand-safety tools you already trust.
Whisper follows the language spoken in the file and uses sentence boundaries so the splice can leave a line alone. That pass writes SRT and WebVTT automatically, and those subtitles translate into 22 languages. This website is in English, Russian, German, and French. If speech cannot be aligned, that check is skipped rather than invented.
Write with the asset type — a file or packaged VOD — and whether you need pre-roll, mid-roll, or both. The reply describes how the cues would be delivered.