Examples¶
Each task shows the command line first, then the same task in Python. Every command in the CLI reference links to its Python API and config file counterparts, and each detector to a table of its options.
All examples assume a file called video.mp4 in the working directory. When no detect-* command is given, the CLI uses detect-adaptive (AdaptiveDetector). Most Python examples
use scenedetect.detect(), which returns a list of (start, end)
FrameTimecode pairs (empty if no cuts are found);
see SceneManager for lower-level control.
Split a Video Into Scenes¶
Find the scenes and write one clip per scene. Requires ffmpeg (or mkvmerge with
split-video -m / split_video_mkvmerge()).
Command line:
scenedetect -i video.mp4 split-video
Python:
from scenedetect import detect, AdaptiveDetector, split_video_ffmpeg
scenes = detect("video.mp4", AdaptiveDetector())
split_video_ffmpeg("video.mp4", scenes)
Save the Scene List as CSV¶
Write the scene list to video-Scenes.csv.
Command line:
scenedetect -i video.mp4 list-scenes
Python:
from scenedetect import detect, AdaptiveDetector, write_scene_list
scenes = detect("video.mp4", AdaptiveDetector())
write_scene_list("video-Scenes.csv", scenes)
Save Images From Each Scene¶
Save three images from each scene (start, middle, end) into the images directory.
Command line:
scenedetect -i video.mp4 -o images save-images --num-images 3
Python:
from scenedetect import detect, open_video, AdaptiveDetector, save_images
scenes = detect("video.mp4", AdaptiveDetector())
video = open_video("video.mp4")
save_images(scenes, video, num_images=3, output_dir="images")
Pick a Detector and Tune It¶
Every detector is both a detect-* command and a class in
scenedetect.detectors. Options map to constructor arguments of
the same name, with a few exceptions listed on that page. Here, a lower threshold makes
detect-content more sensitive.
Command line:
scenedetect -i video.mp4 detect-content --threshold 20
Python:
from scenedetect import detect, ContentDetector
scenes = detect("video.mp4", ContentDetector(threshold=20))
Detect Fades In and Out¶
detect-threshold finds fades to and from black instead of
fast cuts. Defaults differ: the command adds a final scene and ignores fades shorter than
0.1s, while ThresholdDetector does
neither (see Detectors).
Command line:
scenedetect -i video.mp4 detect-threshold
Python:
from scenedetect import detect, ThresholdDetector
scenes = detect("video.mp4", ThresholdDetector())
Set a Minimum Scene Length¶
Cuts closer together than this are ignored. On the command line
-m/--min-scene-len applies to every detector and defaults to
0.6s; in Python each detector takes min_scene_len and defaults to 15 frames.
Command line:
scenedetect -i video.mp4 -m 2s detect-content
Python:
from scenedetect import detect, ContentDetector
scenes = detect("video.mp4", ContentDetector(min_scene_len="2s"))
Analyze Only Part of the Video¶
Skip the first 10 seconds and stop after one minute. Times can be given as frames (100),
seconds (10s) or timecodes (00:01:00).
Command line:
scenedetect -i video.mp4 time --start 10s --end 00:01:00 detect-content
Python:
from scenedetect import detect, ContentDetector
scenes = detect("video.mp4", ContentDetector(), start_time="10s", end_time="00:01:00")
Save Per-Frame Statistics¶
Write the metric each detector computes for every frame to a CSV file, to help choose a threshold.
Command line:
scenedetect -i video.mp4 -s stats.csv detect-content
Python:
from scenedetect import detect, ContentDetector
scenes = detect("video.mp4", ContentDetector(), stats_file_path="stats.csv")
Use a Different Video Backend¶
Decode with PyAV instead of OpenCV (see Video Backends).
Command line:
scenedetect -i video.mp4 -b pyav detect-content
Python:
from scenedetect import detect, ContentDetector
scenes = detect("video.mp4", ContentDetector(), backend="pyav")
Run Several Detectors at Once¶
Find both fast cuts and fades. In Python this needs a
SceneManager, which also gives you per-frame
callbacks and access to the cut list.
Command line:
scenedetect -i video.mp4 detect-content detect-threshold
Python:
from scenedetect import open_video, SceneManager, ContentDetector, ThresholdDetector
video = open_video("video.mp4")
scene_manager = SceneManager()
scene_manager.add_detector(ContentDetector())
scene_manager.add_detector(ThresholdDetector())
scene_manager.detect_scenes(video, show_progress=True)
scenes = scene_manager.get_scene_list()