PySceneDetect

Video Scene Cut Detection and Analysis Tool.

Quick Install: To install PySceneDetect via pip with all dependencies:

pip install scenedetect[opencv]

For servers, you can use the headless (non-GUI) version of OpenCV by installing scenedetect[opencv-headless]. To enable video splitting support, you will also need to have mkvmerge or ffmpeg installed - see the documentation on Video Splitting Support for details.

Requires Python modules click, numpy, OpenCV cv2, and (optional) tqdm for displaying progress. For details, see the dependencies on the downloads page.


Quick Start (Command Line):

Split the input video wherever a new scene is detected:

scenedetect -i video.mp4 detect-content split-video

Skip the first 10 seconds of the input video, and output a list of scenes to the terminal:

scenedetect -i video.mp4 time -s 10s detect-content list-scenes

To show a summary of all other options and commands:

scenedetect help

You can find more examples on the website or in the manual.

Quick Start (Python API):

In the code example below, we create a function find_scenes() which will
load a video, detect the scenes, and return a list of tuples containing the
(start, end) timecodes of each detected scene. Note that you can modify
the threshold argument to modify the sensitivity of the scene detection.

# Standard PySceneDetect imports:
from scenedetect import VideoManager
from scenedetect import SceneManager

# For content-aware scene detection:
from scenedetect.detectors import ContentDetector

def find_scenes(video_path, threshold=30.0):
    # Create our video & scene managers, then add the detector.
    video_manager = VideoManager([video_path])
    scene_manager = SceneManager()
    scene_manager.add_detector(
        ContentDetector(threshold=threshold))

    # Improve processing speed by downscaling before processing.
    video_manager.set_downscale_factor()

    # Start the video manager and perform the scene detection.
    video_manager.start()
    scene_manager.detect_scenes(frame_source=video_manager)

    # Each returned scene is a tuple of the (start, end) timecode.
    return scene_manager.get_scene_list()

To get started, try printing the result from calling find_scenes on a small video clip:

    scenes = find_scenes('video.mp4')
    print(scenes)

See the manual for the full PySceneDetect API documentation.


GitHub

https://github.com/Breakthrough/PySceneDetect