Adds setting quality accoeding to pattern default

This commit is contained in:
Javanaut
2025-11-06 14:08:00 +01:00
parent c354ba09ba
commit 15bfbdbe88
12 changed files with 126 additions and 46 deletions

View File

@@ -522,14 +522,6 @@ def convert(ctx,
ctx.obj['logger'].debug(f"\nVideo encoder: {video_encoder}")
qualityTokens = quality.split(',')
q_list = [q for q in qualityTokens if q.isnumeric()]
ctx.obj['logger'].debug(f"Qualities: {q_list}")
presetTokens = preset.split(',')
p_list = [p for p in presetTokens if p.isnumeric()]
ctx.obj['logger'].debug(f"Presets: {p_list}")
context['bitrates'] = {}
context['bitrates']['stereo'] = str(stereo_bitrate) if str(stereo_bitrate).endswith('k') else f"{stereo_bitrate}k"
@@ -553,9 +545,12 @@ def convert(ctx,
tc = TmdbController() if context['use_tmdb'] else None
qualityKwargs = {QualityFilter.QUALITY_KEY: str(QualityFilter.DEFAULT_H264_QUALITY if (context['video_encoder'] == VideoEncoder.H264 and not quality) else quality)}
qualityKwargs = {QualityFilter.QUALITY_KEY: str(quality)}
qf = QualityFilter(**qualityKwargs)
if context['video_encoder'] == VideoEncoder.AV1 and preset:
presetKwargs = {PresetFilter.PRESET_KEY: preset}
PresetFilter(**presetKwargs)
@@ -799,15 +794,18 @@ def convert(ctx,
ctx.obj['logger'].info(f"Creating file {targetFilename}")
if rename_only:
shutil.copyfile(sourcePath, targetPath)
else:
fc.runJob(sourcePath,
targetPath,
targetFormat,
context['video_encoder'],
chainIteration,
cropArguments)
cropArguments,
currentPattern)
endTime = time.perf_counter()
ctx.obj['logger'].info(f"\nDONE\nTime elapsed {endTime - startTime}")

View File

@@ -1,4 +1,5 @@
import os, click
from logging import Logger
from ffx.media_descriptor_change_set import MediaDescriptorChangeSet
@@ -15,6 +16,8 @@ from ffx.filter.quality_filter import QualityFilter
from ffx.filter.preset_filter import PresetFilter
from ffx.filter.crop_filter import CropFilter
from ffx.model.pattern import Pattern
class FfxController():
@@ -46,7 +49,7 @@ class FfxController():
targetMediaDescriptor,
sourceMediaDescriptor)
self.__logger = context['logger']
self.__logger: Logger = context['logger']
def generateAV1Tokens(self, quality, preset, subIndex : int = 0):
@@ -179,12 +182,16 @@ class FfxController():
sourcePath,
targetPath,
targetFormat: str = '',
videoEncoder: VideoEncoder = VideoEncoder.VP9,
chainIteration: list = [],
cropArguments: dict = {}):
cropArguments: dict = {},
currentPattern: Pattern = None):
# quality: int = DEFAULT_QUALITY,
# preset: int = DEFAULT_AV1_PRESET):
videoEncoder: VideoEncoder = self.__context.get('video_encoder', VideoEncoder.VP9)
qualityFilters = [fy for fy in chainIteration if fy['identifier'] == 'quality']
presetFilters = [fy for fy in chainIteration if fy['identifier'] == 'preset']
@@ -192,7 +199,18 @@ class FfxController():
denoiseFilters = [fy for fy in chainIteration if fy['identifier'] == 'nlmeans']
deinterlaceFilters = [fy for fy in chainIteration if fy['identifier'] == 'bwdif']
quality = (qualityFilters[0]['parameters']['quality'] if qualityFilters else QualityFilter.DEFAULT_VP9_QUALITY)
if qualityFilters and (quality := qualityFilters[0]['parameters']['quality']):
self.__logger.debug(f"Setting quality {quality} from filter")
elif (quality := currentPattern.quality):
self.__logger.debug(f"Setting quality {quality} from pattern default")
else:
quality = (QualityFilter.DEFAULT_H264_QUALITY
if (videoEncoder == VideoEncoder.H264)
else QualityFilter.DEFAULT_VP9_QUALITY)
self.__logger.debug(f"Setting quality {quality} from default")
preset = presetFilters[0]['parameters']['preset'] if presetFilters else PresetFilter.DEFAULT_PRESET

View File

@@ -1,7 +1,9 @@
import itertools
import click
from .filter import Filter
from ffx.video_encoder import VideoEncoder
class QualityFilter(Filter):
@@ -14,6 +16,9 @@ class QualityFilter(Filter):
def __init__(self, **kwargs):
context = click.get_current_context().obj
self.__qualitiesList = []
qualities = kwargs.get(QualityFilter.QUALITY_KEY, '')
if qualities:
@@ -27,7 +32,9 @@ class QualityFilter(Filter):
raise ValueError('QualityFilter: Quality value has to be between 0 and 63')
self.__qualitiesList.append(qualityValue)
else:
self.__qualitiesList = [QualityFilter.DEFAULT_VP9_QUALITY]
self.__qualitiesList = [None]
super().__init__(self)
@@ -52,4 +59,4 @@ class QualityFilter(Filter):
def getYield(self):
for q in self.__qualitiesList:
yield self.getPayload(q)
yield self.getPayload(q)