From 0e7d16a986215267bc85e3c85bca2a2271c98570 Mon Sep 17 00:00:00 2001 From: Breakthrough Date: Sun, 28 Jan 2024 20:05:17 -0500 Subject: [PATCH] [cli] Cleanup some config defaults and ensure cut format is always set. --- scenedetect/_cli/config.py | 7 +++++-- scenedetect/_cli/context.py | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/scenedetect/_cli/config.py b/scenedetect/_cli/config.py index e28f8892..17920b07 100644 --- a/scenedetect/_cli/config.py +++ b/scenedetect/_cli/config.py @@ -238,9 +238,13 @@ def format(self, timecode: FrameTimecode) -> str: _CONFIG_FILE_NAME: AnyStr = 'scenedetect.cfg' _CONFIG_FILE_DIR: AnyStr = user_config_dir("PySceneDetect", False) +_PLACEHOLDER = 0 # Placeholder for image quality default, as the value depends on output format CONFIG_FILE_PATH: AnyStr = os.path.join(_CONFIG_FILE_DIR, _CONFIG_FILE_NAME) +DEFAULT_JPG_QUALITY = 95 +DEFAULT_WEBP_QUALITY = 100 +# TODO(v0.7): Remove [detect-adaptive] min-delta-hsv CONFIG_MAP: ConfigDict = { 'backend-opencv': { 'max-decode-attempts': 5, @@ -257,7 +261,6 @@ def format(self, timecode: FrameTimecode) -> str: 'min-scene-len': TimecodeValue(0), 'threshold': RangeValue(3.0, min_val=0.0, max_val=255.0), 'weights': ScoreWeightsValue(ContentDetector.DEFAULT_COMPONENT_WEIGHTS), - # TODO(v0.7): Remove `min-delta-hsv``. 'min-delta-hsv': RangeValue(15.0, min_val=0.0, max_val=255.0), }, 'detect-content': { @@ -312,7 +315,7 @@ def format(self, timecode: FrameTimecode) -> str: 'height': 0, 'num-images': 3, 'output': '', - 'quality': RangeValue(0, min_val=0, max_val=100), # Default depends on format + 'quality': RangeValue(_PLACEHOLDER, min_val=0, max_val=100), 'scale': 1.0, 'scale-method': 'linear', 'width': 0, diff --git a/scenedetect/_cli/context.py b/scenedetect/_cli/context.py index cfe5d5bc..6364a465 100644 --- a/scenedetect/_cli/context.py +++ b/scenedetect/_cli/context.py @@ -32,7 +32,8 @@ from scenedetect.stats_manager import StatsManager from scenedetect.scene_manager import SceneManager, Interpolation -from scenedetect._cli.config import ConfigRegistry, ConfigLoadFailure, TimecodeFormat, CHOICE_MAP +from scenedetect._cli.config import (ConfigRegistry, ConfigLoadFailure, TimecodeFormat, CHOICE_MAP, + DEFAULT_JPG_QUALITY, DEFAULT_WEBP_QUALITY) logger = logging.getLogger('pyscenedetect') @@ -152,14 +153,14 @@ def __init__(self): # `list-scenes` Command Options self.list_scenes: bool = False - self.list_scenes_quiet: bool = None # list-scenes -q/--quiet - self.scene_list_dir: str = None # list-scenes -o/--output - self.scene_list_name_format: str = None # list-scenes -f/--filename - self.scene_list_output: bool = None # list-scenes -n/--no-output - self.skip_cuts: bool = None # list-scenes -s/--skip-cuts - self.display_cuts: bool = True # [list-scenes] display-cuts - self.display_scenes: bool = True # [list-scenes] display-scenes - self.cut_format: TimecodeFormat = None # [list-scenes] cut-format + self.list_scenes_quiet: bool = None # list-scenes -q/--quiet + self.scene_list_dir: str = None # list-scenes -o/--output + self.scene_list_name_format: str = None # list-scenes -f/--filename + self.scene_list_output: bool = None # list-scenes -n/--no-output + self.skip_cuts: bool = None # list-scenes -s/--skip-cuts + self.display_cuts: bool = False # [list-scenes] display-cuts + self.display_scenes: bool = True # [list-scenes] display-scenes + self.cut_format: TimecodeFormat = TimecodeFormat.TIMECODE # [list-scenes] cut-format # `export-html` Command Options self.export_html: bool = False @@ -637,7 +638,7 @@ def handle_save_images( self.scale_method = Interpolation[self.config.get_value('save-images', 'scale-method').upper()] - default_quality = 100 if webp else 95 + default_quality = DEFAULT_WEBP_QUALITY if webp else DEFAULT_JPG_QUALITY quality = ( default_quality if self.config.is_default('save-images', 'quality') else self.config.get_value('save-images', 'quality'))