Детектор сцен
Бросьте видео. Получите каждую склейку, с миниатюрой и тайм-кодом для каждого плана — найдено на вашей машине, без загрузки.
Файл читает и перекодирует ваш собственный браузер. Ни один запрос никуда его не отправляет — у этой страницы просто нет сервера, куда его загружать.
Вопросы
Видео загружается на сервер?
Нет. Браузер декодирует его локально, канвас читает пиксели, а WebAssembly их сравнивает. Никуда ничего не отправляется — у этой страницы просто нет сервера, куда отправлять. Поэтому нет ни ограничения по размеру, ни очереди.
Как он находит склейки?
Он выбирает кадры по всему видео и смотрит, насколько картинка меняется от выборки к выборке. Склейка — это разрыв: цвет и яркость прыгают разом, а не плывут, как при панораме или наплыве. Детектор ищет такие скачки и сообщает границы между ними.
Ловит ли он наплывы и затемнения?
Отчасти. Жёсткая склейка однозначна и находится надёжно. Медленный наплыв по построению — постепенное изменение, той же формы, что и движение камеры, поэтому может оказаться чуть раньше, чуть позже или слиться с соседним. Быстрые панорамы тоже читаются как склейки. Считайте результат списком планов для проверки, а не приговором.
Что за оценка качества у каждого плана?
Та же покадровая оценка, по которой приложение Life2Film решает, что оставить: резкость, экспозиция, контраст, цветность и энтропия, сведённые в одно число. Это грубая сортировка того, на какие планы стоит взглянуть ещё раз, а не суждение о том, что интересно.
Сколько это занимает?
Он проходит видео перемотками к каждой точке выборки, и каждая стоит десятки миллисекунд. Минутный клип обрабатывается за несколько секунд. Длинные видео выбираются реже, чтобы ожидание оставалось разумным: список планов сохраняет точность около половины секунды.
Другие инструменты
Build this into your own project
Finding every cut in a video — the same way this page does it, on the user's machine, with no server. Take the code, or hand the prompt to a coding agent.
const engine = await import('https://life2film.com/wasm/va_wasm.js');
await engine.default({ module_or_path: 'https://life2film.com/wasm/va_wasm_bg.wasm' });
// 31 features per frame, from RGB24 pixels
const scored = JSON.parse(engine.score_frame(width, height, rgb24, timestamp, null)); Add shot-boundary detection to my project, running in the browser without uploading the video.
Requirements:
- Use the "life2film-engine" npm package (WebAssembly) for detection and the browser's own decoder for
frames: <video> plus a canvas works everywhere and needs no WebCodecs.
- Sample frames at ~64 px wide, take the mean RGB of the centre column, and pass pixels + timestamps
to detect_scenes_slick.
- Sampling rate decides accuracy far more than the algorithm does. Measured against a video with cuts
at known times: 2 samples/second put boundaries 1-3 seconds out and all sixteen algorithms failed
the same way; 10/second put them on the frame. Do a coarse pass, then refine around each candidate
at ten times the resolution and take the largest frame-to-frame change.
- Show a thumbnail per shot. The fastest way to check a shot list is to look at it, and a boundary
that is wrong is obvious in a picture and invisible in a number.
- Score each shot with score_frame and take the median, not the mean.
- Export as EDL, OTIO, FCPXML, Audacity labels, CSV or JSON, at a frame rate the user chooses.
- Cap the input length: each sample is a seek costing tens of milliseconds.
Reference implementation: https://life2film.com/tools/scene-detector/
The engine is documented for agents, and every tool page is available as
markdown by adding .md to its address.