كاشف المشاهد
أفلت فيديو. احصل على كل قطع، بصورة مصغّرة ورمز زمني لكل لقطة — يُعثر عليها على جهازك أنت، دون رفع أي شيء.
متصفحك هو الذي يقرأ الملف ويعيد ترميزه. لا يُرسَل في أي طلب إلى أي مكان — فهذه الصفحة لا تملك خادمًا يُرفع إليه.
أسئلة
هل يُرفع الفيديو؟
لا. يفكّه المتصفح محليًا، ويقرأ عنصر canvas بكسلاته، ويقارنها WebAssembly. لا يُرسَل شيء إلى أي مكان: فهذه الصفحة لا تملك خادمًا تُرسل إليه. ولهذا أيضًا لا يوجد حدّ للحجم ولا طابور.
كيف يعثر على القطعات؟
يأخذ عيّنات من الإطارات على امتداد الفيديو ويراقب مقدار تغيّر الصورة من عيّنة إلى التي تليها. القطع انقطاعٌ في السياق: يقفز اللون والإضاءة دفعةً واحدة بدل أن ينساقا تدريجيًا كما في حركة الكاميرا أو الاندماج. يبحث الكاشف عن هذه القفزات ويعيد الحدود بينها.
هل يلتقط الاندماج والتلاشي؟
جزئيًا. القطع الحاد لا لبس فيه ويُعثر عليه بثقة. أما الاندماج البطيء فهو بحكم بنيته تغيّر تدريجي — الشكل نفسه لحركة الكاميرا — فقد يظهر أبكر قليلًا أو أمتأخر قليلًا أو مندمجًا مع جاره. والحركات السريعة قد تُقرأ قطعًا أيضًا. اعتبر النتيجة قائمة لقطات للمراجعة لا حكمًا نهائيًا.
ما درجة الجودة عند كل لقطة؟
هي التقييم الإطاري نفسه الذي يستخدمه تطبيق Life2Film ليقرّر ما يبقيه: الحدّة والإضاءة والتباين وثراء اللون والإنتروبيا مجموعةً في رقم واحد. إنها ترتيب تقريبي لأي اللقطات يستحق نظرة ثانية، لا حكمًا على ما هو ممتع.
كم يستغرق ذلك؟
يمشي عبر الفيديو قافزًا إلى كل نقطة عيّنة، وكل قفزة تكلّف عشرات المللي ثانية. مقطع من دقيقة ينتهي في ثوانٍ. أما الفيديوهات الطويلة فتؤخذ عيّناتها على نحو أخشن كي يبقى الانتظار معقولًا: وتظل قائمة اللقطات دقيقة في حدود نصف ثانية.
الأدوات الأخرى
أضف هذا إلى مشروعك
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.