Video & Frame Visualizer

Frame: 1 / 50

Detected Scenes Timeline

Click a scene thumbnail to seek. You can manually delete split marks or merge scenes using the buttons on each card.

Statistics Log & CLI Console

Total Frames: 50 FPS: 10 Visual Cuts: 2 Clip Duration: 5.0s
> Initialized default mock timeline template...

Advanced Video Scene Change Detection Engine

Analyzing and segmenting large animation sets or long video recordings is a tedious task. Our **Scene Detector** and **Auto Video Cutter** operates natively inside your web browser. Using lightweight WebAssembly (FFmpeg) and custom downsampled canvas comparison calculations, this utility identifies visual cuts, fade-ins, color shifts, and object transitions instantly, allowing you to split videos into individual clips without uploading them to external servers.

Step-by-Step Guide to Video Segmentation

  1. Select Source: Upload an animated GIF or video (MP4/WebM), capture a 3-second live webcam stream, or paste a direct video link.
  2. Configure Thresholds: Select the matching detection algorithm (e.g. Motion Threshold or Brightness Spike) and drag the sensitivity bar.
  3. Set Filters: Define min/max scene durations to filter out microscopic camera flashes or long blank sequences.
  4. Refine Manually: Seek the player and click "Split Here" to insert cuts, or click "Merge with Next" to clean up thumbnails.
  5. Batch Export: Click to render clips as individual GIFs, MP4s, or PNG archives.

Command-Line & SDK Snippets

1. Command Line (FFmpeg CLI)

# Detect scene change cuts exceeding a 30% delta:
ffmpeg -i input.mp4 -filter_complex "select='gt(scene,0.3)',metadata=print:file=cuts.txt" -f null -

# Segment video by detected scene change timestamps:
ffmpeg -i input.mp4 -force_key_frames expr:gte(t,n_forced*3) -f segment -segment_time 3 -reset_timestamps 1 scene_%03d.mp4

2. Python (OpenCV Shot Detection)

import cv2
cap = cv2.VideoCapture('input.mp4')
prev_frame = None
while True:
    ret, frame = cap.read()
    if not ret: break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    downsampled = cv2.resize(gray, (16, 16))
    if prev_frame is not None:
        diff = cv2.absdiff(downsampled, prev_frame)
        mean_diff = diff.mean()
        if mean_diff > 30.0:
            print("Scene change detected at frame!")
    prev_frame = downsampled

3. JavaScript Browser Canvas API

// Compute frame difference on canvas context
function computeFrameDelta(ctx, width, height, prevImageData) {
    const currentData = ctx.getImageData(0, 0, width, height).data;
    if (!prevImageData) return 0;
    let delta = 0;
    for(let i=0; i<currentData.length; i+=4) {
        delta += Math.abs(currentData[i] - prevImageData[i]); // Red channels comparison
    }
    return delta / (width * height);
}

Frequently Asked Questions (FAQ)