Dividir Vídeo
Corta un vídeo largo en clips que empiezan donde el vídeo cambia — no cada treinta segundos. Todo ocurre en tu equipo.
Tu navegador lee y recodifica el archivo. Ninguna petición lo envía a ninguna parte: esta página no tiene servidor al que subirlo.
Preguntas
¿En qué se diferencia de otros divisores de vídeo?
La mayoría corta cada N segundos, así que un clip puede empezar a media frase y terminar a medio gesto. Este busca los cortes que el vídeo ya tiene —los cambios de plano— y construye los clips con planos enteros. Tú sigues eligiendo la duración aproximada; los límites caen en el cambio real más cercano en lugar de en un cronómetro.
¿Qué son las estrellas de cada clip?
El motor puntúa cada fotograma muestreado por nitidez, exposición, contraste, colorido y detalle, y cada clip recibe la media ponderada por duración de los planos que contiene. Las estrellas son relativas al mejor clip de ese vídeo, no una escala absoluta: sugieren por dónde empezar a mirar, no dictan qué es interesante.
¿El recorte vertical dejará gente fuera de cuadro?
Toma el centro del encuadre, que acierta la mayoría de las veces y falla cuando el sujeto está a un lado. Aquí todavía no hay seguimiento de caras, así que revisa las vistas previas antes de publicar. Si un plano es muy abierto, suele salir mejor recortarlo a mano.
¿Se sube el vídeo?
No. El navegador lo decodifica, WebAssembly analiza los fotogramas y los clips se recodifican localmente con WebCodecs, la misma ruta de hardware que usa tu navegador para reproducir vídeo. No se envía nada a ninguna parte, y por eso tampoco hay límites de plan, colas ni marca de agua.
Las demás herramientas
Build this into your own project
Splitting video at its shot changes — 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.
// Shot detection uses the Life2Film engine:
// https://life2film.com/wasm/va_wasm.js
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' });
// pixels: centre-column mean RGB per sampled frame, timestamps in seconds
const { scenes } = JSON.parse(engine.detect_scenes_slick(JSON.stringify({
pixels, timestamps, duration, algo: 'adjacent_diffs',
}))); Build a video splitter that cuts at the shot changes instead of every N seconds, in the browser.
Requirements:
- Every other splitter cuts on a fixed interval, so clips open mid-gesture. Find the cuts the video
already has and build clips out of whole shots.
- Detect shots with the "life2film-engine" npm package (WebAssembly): sample frames, take the mean RGB
of the centre column, pass pixels + timestamps to detect_scenes_slick.
- Sampling rate decides accuracy, not the algorithm. At 2 samples/second boundaries land 1-3 seconds
out and all sixteen algorithms are wrong the same way; at 10/second they land on the frame. Use a
coarse pass to find candidates, then re-sample tightly around each one at ten times the resolution.
- Group whole shots into clips near the target length; never cut inside a shot. A shot longer than the
target becomes its own clip. Absorb a short tail into the previous clip rather than leaving a
two-second orphan.
- Rank clips by picture quality using score_frame, taking the MEDIAN score per shot (one bad frame
should not sink a good shot) and weighting by duration when combining shots.
- Encode with "mediabunny", trim: {start, end} per clip, and offer a 9:16 crop via
video: { width: 1080, height: 1920, fit: 'cover' }.
- Cap the input length — every sample is a seek costing tens of milliseconds.
Reference implementation: https://life2film.com/tools/video-splitter/
The engine is documented for agents, and every tool page is available as
markdown by adding .md to its address.