from ._bitrate_mode import BitrateMode class EncodingConfig: # Config keys config_allowed_filetypes = "AllowedFileTypes" config_encoding_modes = "EncodingModes" config_crfs = "CRFs" config_cbr_bitrates = "CBRBitrates" config_cbr_max_bitrates = "CBRMaxBitrates" config_threads = "Threads" config_limit_size_enable = "LimitSizeEnable" config_alternate_source_files = "AlternateSourceFiles" config_create_preview = "CreatePreview" config_include_unfiltered = "IncludeUnfiltered" # Default Config keys config_default_video_stream = "DefaultVideoStream" config_default_audio_stream = "DefaultAudioStream" # Default config values default_allowed_filetypes = ".avi,.m2ts,.mkv,.mp4,.wmv" default_encoding_modes = f"{BitrateMode.VBR.name},{BitrateMode.CBR.name}" default_crfs = "12,15,18,21,24" default_cbr_bitrates = "5600" default_cbr_max_bitrates = "6400" default_threads = 4 default_limit_size_enable = True default_alternate_source_files = False default_create_preview = False default_include_unfiltered = True default_video_filters = { "filtered": "hqdn3d=0:0:3:3,gradfun,unsharp", "lightdenoise": "hqdn3d=0:0:3:3", "heavydenoise": "hqdn3d=1.5:1.5:6:6", "unsharp": "unsharp", } def __init__( self, allowed_filetypes, encoding_modes, crfs, cbr_bitrates, cbr_max_bitrates, threads, limit_size_enable, alternate_source_files, create_preview, include_unfiltered, video_filters, default_video_stream, default_audio_stream, ): self.allowed_filetypes = allowed_filetypes self.encoding_modes = encoding_modes self.crfs = crfs self.cbr_bitrates = cbr_bitrates self.cbr_max_bitrates = cbr_max_bitrates self.threads = threads self.limit_size_enable = limit_size_enable self.alternate_source_files = alternate_source_files self.create_preview = create_preview self.include_unfiltered = include_unfiltered self.video_filters = video_filters self.default_video_stream = default_video_stream self.default_audio_stream = default_audio_stream @classmethod def from_config(cls, config): allowed_filetypes = ( config["Encoding"] .get( EncodingConfig.config_allowed_filetypes, EncodingConfig.default_allowed_filetypes, ) .split(",") ) encoding_modes = ( config["Encoding"] .get( EncodingConfig.config_encoding_modes, EncodingConfig.default_encoding_modes, ) .split(",") ) crfs = ( config["Encoding"] .get(EncodingConfig.config_crfs, EncodingConfig.default_crfs) .split(",") ) cbr_bitrates = ( config["Encoding"] .get( EncodingConfig.config_cbr_bitrates, EncodingConfig.default_cbr_bitrates ) .split(",") ) cbr_max_bitrates = ( config["Encoding"] .get( EncodingConfig.config_cbr_max_bitrates, EncodingConfig.default_cbr_max_bitrates, ) .split(",") ) threads = int( config["Encoding"].get( EncodingConfig.config_threads, EncodingConfig.default_threads ) ) limit_size_enable = config.getboolean( "Encoding", EncodingConfig.config_limit_size_enable, fallback=EncodingConfig.default_limit_size_enable, ) alternate_source_files = config.getboolean( "Encoding", EncodingConfig.config_alternate_source_files, fallback=EncodingConfig.default_alternate_source_files, ) create_preview = config.getboolean( "Encoding", EncodingConfig.config_create_preview, fallback=EncodingConfig.default_create_preview, ) include_unfiltered = config.getboolean( "Encoding", EncodingConfig.config_include_unfiltered, fallback=EncodingConfig.default_include_unfiltered, ) video_filters = config.items( "VideoFilters", EncodingConfig.default_video_filters ) default_video_stream = config["Encoding"].get( EncodingConfig.config_default_video_stream ) default_audio_stream = config["Encoding"].get( EncodingConfig.config_default_audio_stream ) return cls( allowed_filetypes, encoding_modes, crfs, cbr_bitrates, cbr_max_bitrates, threads, limit_size_enable, alternate_source_files, create_preview, include_unfiltered, video_filters, default_video_stream, default_audio_stream, ) def get_default_stream(self, stream_type): if stream_type == "video": return self.default_video_stream elif stream_type == "audio": return self.default_audio_stream return None