The complete PySceneDetect Python API reference can be found here [PySceneDetect Manual]
Creating a new scene detection method is intuitive if you are familiar with Python and OpenCV already. A
SceneDetector is an object implementing the following class & methods (only prototypes are shown as an example):
from scenedetect.scene_detector import SceneDetector class CustomDetector(SceneDetector): """CustomDetector class to implement a scene detection algorithm.""" def __init__(self): pass def process_frame(self, frame_num, frame_img, frame_metrics, scene_list): """Computes/stores metrics and detects any scene changes. Prototype method, no actual detection. """ return def post_process(self, scene_list): pass
See the actual
scenedetect/scene_detector.py source file for specific details. Alternatively, you can call
help(SceneDetector) from a Python REPL. For examples of actual detection algorithm implementations, see the source files in the
scenedetect/detectors/ directory (e.g.
Processing is done by calling the
process_frame(...) function for all frames in the video, followed by
post_process(...) (optional) after the final frame. Scene cuts are detected and added to the passed list object in both cases.
process_frame(...) is called for each frame in sequence, passing the following arguments:
frame_num: the number of the current frame being processed
frame_img: frame returned video file or stream (accessible as NumPy array)
frame_metrics: dictionary for memoizing results of detection algorithm calculations for quicker subsequent analyses (if possible)
scene_list: List containing the frame numbers where all scene cuts/breaks occur in the video.
post_process(...) is called after the final frame has been processed, to allow for any stored scene cuts to be written if required* (e.g. in the case of the
You may also want to look into the implementation of current detectors to understand how frame metrics are saved/loaded to/from a StatsManager for caching and allowing values to be written to a stats file for users to graph and find trends in to tweak detector options. Also see the section on the
SceneManager in the Python API Reference for details.