Files

165 lines
5.2 KiB
Python

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