Video Pacing QA — Frozen Frames, Cut Rate & Dead Air avatar

Video Pacing QA — Frozen Frames, Cut Rate & Dead Air

Pricing

Pay per usage

Go to Apify Store
Video Pacing QA — Frozen Frames, Cut Rate & Dead Air

Video Pacing QA — Frozen Frames, Cut Rate & Dead Air

Automated edit QA for AI-generated and batch-produced videos: frozen frames, slow pans that never cut, cuts per minute, dead air and loudness jumps, each with timestamps and a PASS/FAIL verdict.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ricardo Faya

Ricardo Faya

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Automated edit QA for videos you produce in batches — AI-generated lessons, faceless YouTube channels, Shorts factories, course platforms. Paste file URLs; get a PASS/FAIL verdict with timestamps for the defects that never raise an error.

Why this exists

Written by a broadcast editor working since 1998 (two FIFA World Cups). An automated course pipeline produced 41 lessons that passed every log and were unwatchable:

  • 3 image changes per minute — slides with narration;
  • a single shot held for 231 seconds;
  • a lesson whose last 54.6 seconds were one frozen frame, while the generator reported "209 shots, average 2.34 s".

The generator counted the shots it planned. Nothing measured what ended up in the file. This Actor measures the file.

What it checks

CheckWhat it catchesDefault
Frozen framespixels that stop moving (stuck render, missing clip, black tail)fails at 4 s
Longest shot without a visible changeslow pans/zooms over one still image — they move pixels, so freeze detection never firesfails above 8 s
Visible changes per minute"slideshow" pacingfails below 12/min
Dead airseconds with neither voice nor music (a 40 s music bed on a 18 min film)fails above 1%
Loudness jumpslevel steps between neighbouring 5 s blocksreported, never fails

Every threshold is editable.

Output

One dataset row per video:

{
"url": "https://example.com/lesson-02.mp4",
"verdict": "FAIL",
"findings": [
"1 frozen stretch(es) of 4s or more — worst 54.6s at 07:14.6.",
"3 shot(s) longer than 8s without a visible change — longest 54.6s at 07:14.6 (slow pans over a still image land here)."
],
"durationSeconds": 489.2,
"resolution": "1920x1080",
"changesPerMinute": 23.5,
"medianShotSeconds": 2.17,
"longestShotSeconds": 54.6,
"longestShotAt": "07:14.6",
"staticShots": [{ "at": "07:14.6", "seconds": 54.6 }],
"freezes": [{ "at": "07:14.6", "startSeconds": 434.6, "seconds": 54.6 }],
"deadAirPercent": 0.2,
"loudnessJumps": [{ "at": "03:05.0", "deltaDb": -12.4 }]
}

The key-value store OUTPUT holds the run summary (passed, failed, errors).

Input notes

  • Use direct file links (.mp4, .mov, .webm, .mkv) — S3, Cloudflare R2, Google Cloud Storage signed URLs and CDN links work. Web pages (YouTube watch URLs, Drive previews) do not.
  • A "visible change" is an ffmpeg scene score above the sensitivity (0.3). Two crops of the same image may not count — which is also what a viewer perceives.