Pendeteksi Adegan
Jatuhkan sebuah video. Dapatkan setiap potongan, dengan gambar mini dan kode waktu untuk tiap shot — ditemukan di mesin Anda sendiri, tanpa mengunggah apa pun.
Peramban Anda yang membaca dan mengodekan ulang berkas. Tidak ada permintaan yang mengirimnya ke mana pun — halaman ini tidak punya server tujuan unggah.
Pertanyaan
Apakah videonya diunggah?
Tidak. Peramban mendekodenya secara lokal, sebuah kanvas membaca pikselnya, dan WebAssembly membandingkannya. Tidak ada yang dikirim ke mana pun: halaman ini tidak punya server tujuan. Karena itu pula tidak ada batas ukuran maupun antrean.
Bagaimana ia menemukan potongannya?
Ia mencuplik bingkai di sepanjang video dan mengamati seberapa besar gambarnya berubah dari satu cuplikan ke cuplikan berikutnya. Sebuah potongan adalah diskontinuitas: warna dan luminansi melompat sekaligus, alih-alih bergeser perlahan seperti pada panning atau transisi. Pendeteksi mencari lompatan itu dan melaporkan batas di antaranya.
Apakah ia menangkap dissolve dan fade?
Sebagian. Potongan tegas tidak ambigu dan ditemukan dengan andal. Dissolve yang lambat, menurut sifatnya, adalah perubahan bertahap — bentuk yang sama dengan gerakan kamera — sehingga bisa dilaporkan sedikit lebih awal, sedikit lebih lambat, atau menyatu dengan tetangganya. Panning cepat juga bisa terbaca sebagai potongan. Anggap hasilnya sebagai daftar shot untuk diperiksa, bukan vonis.
Nilai kualitas di tiap shot itu apa?
Penilaian per bingkai yang sama dengan yang dipakai aplikasi Life2Film untuk memutuskan apa yang disimpan: ketajaman, pencahayaan, kontras, kekayaan warna dan entropi digabung menjadi satu angka. Itu urutan kasar tentang shot mana yang layak dilihat sekali lagi, bukan penilaian tentang apa yang menarik.
Berapa lama prosesnya?
Ia menyusuri video dengan melompat ke tiap titik cuplikan, dan tiap lompatan memakan puluhan milidetik. Klip satu menit selesai dalam beberapa detik. Video panjang dicuplik lebih jarang agar waktu tunggunya tetap wajar: daftar shot-nya tetap akurat sekitar setengah detik.
Alat lainnya
Pasang ini di proyek Anda sendiri
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.