Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_detector_metrics(test_video_file):
""" Test passing StatsManager to a SceneManager and using it for storing the frame metrics
from a ContentDetector.
"""
video_manager = VideoManager([test_video_file])
stats_manager = StatsManager()
scene_manager = SceneManager(stats_manager)
#base_timecode = video_manager.get_base_timecode()
assert not stats_manager._registered_metrics
scene_manager.add_detector(ContentDetector())
# add_detector should trigger register_metrics in the StatsManager.
assert stats_manager._registered_metrics
try:
video_fps = video_manager.get_framerate()
start_time = FrameTimecode('00:00:00', video_fps)
duration = FrameTimecode('00:00:20', video_fps)
video_manager.set_duration(start_time=start_time, end_time=duration)
video_manager.set_downscale_factor()
video_manager.start()
scene_manager.detect_scenes(frame_source=video_manager)
def test_scene_list(test_video_file):
""" Test SceneManager get_scene_list method with VideoManager/ContentDetector. """
vm = VideoManager([test_video_file])
sm = SceneManager()
sm.add_detector(ContentDetector())
try:
base_timecode = vm.get_base_timecode()
video_fps = vm.get_framerate()
start_time = FrameTimecode('00:00:05', video_fps)
end_time = FrameTimecode('00:00:15', video_fps)
assert end_time.get_frames() > start_time.get_frames()
vm.set_duration(start_time=start_time, end_time=end_time)
vm.set_downscale_factor()
vm.start()
num_frames = sm.detect_scenes(frame_source=vm)
def test_content_detect(test_video_file):
""" Test SceneManager with VideoManager and ContentDetector. """
vm = VideoManager([test_video_file])
sm = SceneManager()
sm.add_detector(ContentDetector())
try:
video_fps = vm.get_framerate()
start_time = FrameTimecode('00:00:00', video_fps)
end_time = FrameTimecode('00:00:05', video_fps)
vm.set_duration(start_time=start_time, end_time=end_time)
vm.set_downscale_factor()
vm.start()
num_frames = sm.detect_scenes(frame_source=vm)
assert num_frames == end_time.get_frames() + 1
finally:
vm.release()
def test_many_videos_downscale_detect_scenes(test_video_file):
""" Test scene detection on multiple videos in VideoManager. """
NUM_VIDEOS = 3
# Open VideoManager with NUM_VIDEOS test videos
video_manager = VideoManager([test_video_file] * NUM_VIDEOS)
video_manager.set_downscale_factor()
try:
video_manager.start()
scene_manager = SceneManager()
scene_manager.detect_scenes(frame_source=video_manager)
finally:
# Will release the VideoManagers in vm_list as well.
video_manager.release()
def scene_detect(opt):
video_manager = VideoManager([os.path.join(opt.avi_dir,opt.reference,'video.avi')])
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()
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)
savepath = os.path.join(opt.work_dir,'scene.pckl')
if scene_list == []:
scene_list = [(video_manager.get_base_timecode(),video_manager.get_current_timecode())]
video_manager_initialized = self._init_video_manager(
input_list=input_list, framerate=framerate, downscale=downscale)
# Ensure VideoManager is initialized, and open StatsManager if --stats is specified.
if not video_manager_initialized:
self.video_manager = None
logging.info('VideoManager not initialized.')
else:
logging.debug('VideoManager initialized.')
self.stats_file_path = get_and_create_path(stats_file, self.output_directory)
if self.stats_file_path is not None:
self.check_input_open()
self._open_stats_file()
# Init SceneManager.
self.scene_manager = SceneManager(self.stats_manager)
self.options_processed = True
def find_scenes(video_path):
start_time = time.time()
print("Analyzing video "+video_path)
# type: (str) -> List[Tuple[FrameTimecode, FrameTimecode]]
video_manager = VideoManager([video_path])
stats_manager = StatsManager()
# Pass StatsManager to SceneManager to accelerate computing time
scene_manager = SceneManager(stats_manager)
# Add ContentDetector algorithm (each detector's constructor
# takes detector options, e.g. threshold).
scene_manager.add_detector(ContentDetector())
base_timecode = video_manager.get_base_timecode()
# We save our stats file to {VIDEO_PATH}.stats.csv.
stats_file_path = '%s.stats.csv' % (video_path)
scene_list = []
folder = os.path.splitext(video_path)[0]
if os.path.exists(folder):
print('--- STOP : The folder for this video already exists, it is probably already split.')
video_manager_initialized = self._init_video_manager(
input_list=input_list, framerate=framerate, downscale=downscale)
# Ensure VideoManager is initialized, and open StatsManager if --stats is specified.
if not video_manager_initialized:
self.video_manager = None
logging.info('VideoManager not initialized.')
else:
logging.debug('VideoManager initialized.')
self.stats_file_path = get_and_create_path(stats_file, self.output_directory)
if self.stats_file_path is not None:
self.check_input_open()
self._open_stats_file()
# Init SceneManager.
self.scene_manager = SceneManager(self.stats_manager)
self.options_processed = True