def calculate_scene_list(video: Message, threshold: int = 30) -> List[Tuple[FrameTimecode, FrameTimecode]]: video_manager = VideoManager([video.message_data.file_path]) stats_manager = StatsManager() scene_manager = SceneManager(stats_manager) scene_manager.add_detector(ContentDetector(threshold=threshold)) try: video_manager.start() base_timecode = video_manager.get_base_timecode() scene_manager.detect_scenes(frame_source=video_manager) scene_list = scene_manager.get_scene_list(base_timecode) return scene_list finally: video_manager.release()
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)) # Base timestamp at frame 0 (required to obtain the scene list). base_timecode = video_manager.get_base_timecode() # 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(base_timecode)
def find_scene(video, results): video_manager = VideoManager([video]) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector(threshold=THRESHOLD)) base_timecode = video_manager.get_base_timecode() video_manager.set_downscale_factor() video_manager.start() scene_manager.detect_scenes(frame_source=video_manager) scene_list = scene_manager.get_scene_list(base_timecode) # Each scene is a tuple of (start, end) FrameTimecodes. for i, scene in enumerate(scene_list): #scene[0].get_timecode(), scene[0].get_frames(), #scene[1].get_timecode(), scene[1].get_frames(),)) results.append((scene[0].get_timecode())) video_manager.release()
def find_scenes(videoURL): threshold = 30.0 video_path = settings.MEDIA_ROOT video_path = video_path.replace('\\', '/') video_manager = VideoManager([video_path + videoURL]) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector(threshold=threshold)) base_timecode = video_manager.get_base_timecode() #base_timecode = video_manager.get(cv2.CAP_PROP_POS_MSEC) video_manager.set_downscale_factor() video_manager.start() scene_manager.detect_scenes(frame_source=video_manager) scene_list = scene_manager.get_scene_list(base_timecode) return scene_manager.get_scene_list(base_timecode)
def _find_scenes(self, video_path, threshold=30.0): """https://pyscenedetect.readthedocs.io/en/latest/ Args: video_path ([type]): [description] threshold (float, optional): [description]. Defaults to 30.0. Returns: [type]: [description] """ video_manager = VideoManager([video_path]) scene_manager = SceneManager() scene_manager.add_detector(ContentDetector(threshold=threshold)) base_timecode = video_manager.get_base_timecode() video_manager.set_downscale_factor() video_manager.start() scene_manager.detect_scenes(frame_source=video_manager) time_frames = scene_manager.get_scene_list(base_timecode) return [(frame[0].get_frames(), frame[1].get_frames()) for frame in time_frames]
for threshold in random.sample(list_param, len(list_param)): algo = f"{algo_name}{threshold}" if os.path.exists(f"{outname}_{algo}.json"): continue video_manager = VideoManager([filename]) scene_manager = SceneManager() # for threshold in [10,20,30,40,50,60]: if algo_name == "ContentDetector": scene_manager.add_detector( ContentDetector(threshold=threshold)) # list_param = [64, 128, 256, 32, 16, 8, 4] # Base timestamp at frame 0 (required to obtain the scene list). base_timecode = video_manager.get_base_timecode() # 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. results = scene_manager.get_scene_list(base_timecode) # print(" ") # print(" ") # print(results) print(f"{algo} found {len(results)} shots")
stats_path = 'result.csv' video_manager = VideoManager([video_path]) stats_manager = StatsManager() scene_manager = SceneManager(stats_manager) scene_manager.add_detector(ContentDetector(threshold=50)) video_manager.set_downscale_factor() video_manager.start() scene_manager.detect_scenes(frame_source=video_manager) # result with open(stats_path, 'w') as f: stats_manager.save_to_csv(f, video_manager.get_base_timecode()) scene_list = scene_manager.get_scene_list() print(f'{len(scene_list)} scenes detected!') save_images(scene_list, video_manager, num_images=1, image_name_template='$SCENE_NUMBER', output_dir='scenes') write_scene_list_html('result.html', scene_list) for scene in scene_list: start, end = scene
def test_api(test_video_file): # (str) -> None """ Test overall PySceneDetect API functionality. Can be considered a high level integration/black-box test. """ print("Running PySceneDetect API test...") print("PySceneDetect version being used: %s" % str(scenedetect.__version__)) # Create a video_manager point to video file testvideo.mp4. Note that multiple # videos can be appended by simply specifying more file paths in the list # passed to the VideoManager constructor. Note that appending multiple videos # requires that they all have the same frame size, and optionally, framerate. video_manager = VideoManager([test_video_file]) stats_manager = StatsManager() scene_manager = SceneManager(stats_manager) # Add ContentDetector algorithm (constructor takes detector options like threshold). scene_manager.add_detector(ContentDetector()) base_timecode = video_manager.get_base_timecode() try: # If stats file exists, load it. if os.path.exists(STATS_FILE_PATH): # Read stats from CSV file opened in read mode: with open(STATS_FILE_PATH, 'r') as stats_file: stats_manager.load_from_csv(stats_file) start_time = base_timecode + 20 # 00:00:00.667 end_time = base_timecode + 20.0 # 00:00:20.000 # Set video_manager duration to read frames from 00:00:00 to 00:00:20. video_manager.set_duration(start_time=start_time, end_time=end_time) # Set downscale factor to improve processing speed. video_manager.set_downscale_factor() # Start video_manager. video_manager.start() # Perform scene detection on video_manager. scene_manager.detect_scenes(frame_source=video_manager) # Obtain list of detected scenes. scene_list = scene_manager.get_scene_list() # Like FrameTimecodes, each scene in the scene_list can be sorted if the # list of scenes becomes unsorted. print('List of scenes obtained:') for i, scene in enumerate(scene_list): print(' Scene %2d: Start %s / Frame %d, End %s / Frame %d' % ( i + 1, scene[0].get_timecode(), scene[0].get_frames(), scene[1].get_timecode(), scene[1].get_frames(), )) # We only write to the stats file if a save is required: if stats_manager.is_save_required(): with open(STATS_FILE_PATH, 'w') as stats_file: stats_manager.save_to_csv(stats_file, base_timecode) finally: video_manager.release()