2121 If not, see <https://www.gnu.org/licenses/>.
2222
2323"""
24+ from video_transcoder .lib .encoders .base import Encoder
2425
2526
26- class LibsvtAv1Encoder :
27-
28- def __init__ (self , settings ):
29- self .settings = settings
27+ class LibsvtAv1Encoder (Encoder ):
28+ def __init__ (self , settings , probe = None ):
29+ super ().__init__ (settings , probe = probe )
3030
3131 def provides (self ):
3232 return {
@@ -48,7 +48,7 @@ def options(self):
4848 "enable_qm" : False ,
4949 "qm_min" : "8" ,
5050 "encoder_additional_params" : "no_additional_params" ,
51- "additional_params" : "" ,
51+ "additional_params" : "" ,
5252 }
5353
5454 def generate_default_args (self ):
@@ -62,20 +62,44 @@ def generate_default_args(self):
6262 advanced_kwargs = {}
6363 return generic_kwargs , advanced_kwargs
6464
65- def generate_filtergraphs (self ):
65+ def generate_filtergraphs (self , current_filter_args , smart_filters , encoder_name ):
6666 """
6767 Generate the required filter for this encoder
68- No filters are required for libx encoders
6968
7069 :return:
7170 """
72- return []
71+ generic_kwargs = {}
72+ advanced_kwargs = {}
73+ start_filter_args = []
74+ end_filter_args = []
75+
76+ # Check software format to use
77+ target_fmt = self ._target_pix_fmt_for_encoder (encoder_name )
78+
79+ # Handle HDR (only for HEVC)
80+ target_color_config = self ._target_color_config_for_encoder (encoder_name )
81+
82+ # If we have existing filters:
83+ if smart_filters or current_filter_args :
84+ start_filter_args .append (f'format={ target_fmt } ' )
85+ if target_color_config .get ('apply_color_params' ):
86+ # Apply setparams filter if software filters exist (apply at the start of the filters list) to preserve HDR tags
87+ end_filter_args .append (target_color_config ['setparams_filter' ])
88+
89+ # Return built args
90+ return {
91+ "generic_kwargs" : generic_kwargs ,
92+ "advanced_kwargs" : advanced_kwargs ,
93+ "smart_filters" : smart_filters ,
94+ "start_filter_args" : start_filter_args ,
95+ "end_filter_args" : end_filter_args ,
96+ }
7397
7498 def encoder_details (self , encoder ):
7599 provides = self .provides ()
76100 return provides .get (encoder , {})
77101
78- def args (self , stream_id ):
102+ def stream_args (self , stream_id ):
79103 stream_encoding = []
80104
81105 # Use defaults for basic mode
@@ -90,29 +114,30 @@ def args(self, stream_id):
90114 default_crf = 23
91115 stream_encoding += ['-crf' , str (default_crf )]
92116 return stream_encoding
93-
117+
94118 stav1_params = ["enable-stat-report=1" ]
95119 stav1_params += ['tune=' + str (self .settings .get_setting ('tune_stvav1' ))]
96-
120+
97121 if self .settings .get_setting ('overlays' ):
98122 # Enable overlays
99123 stav1_params += ['enable-overlays=1' ]
100-
124+
101125 if self .settings .get_setting ('variance_boost' ):
102126 # Enable variance boost
103127 stav1_params += ['enable-variance-boost=1' ]
104-
128+
105129 if self .settings .get_setting ('enable_qm' ):
106130 # Enable quantization matrix
107131 stav1_params += ['enable-qm=1' ]
108132 stav1_params += ['qm-min=' + str (self .settings .get_setting ('qm_min' ))]
109133
110- if self .settings .get_setting ('encoder_additional_params' ) in ['additional_params' ] and len (self .settings .get_setting ('encoder_svtav1_additional_params' )):
134+ if self .settings .get_setting ('encoder_additional_params' ) in ['additional_params' ] and len (
135+ self .settings .get_setting ('encoder_svtav1_additional_params' )):
111136 # Add additional parameters for SVT-AV1
112137 stav1_params += self .settings .get_setting ('encoder_svtav1_additional_params' )
113-
138+
114139 stream_encoding += ['-svtav1-params' , ":" .join (stav1_params )]
115-
140+
116141 # Add the preset
117142 if self .settings .get_setting ('preset' ):
118143 stream_encoding += ['-preset' , str (self .settings .get_setting ('preset' ))]
@@ -221,7 +246,7 @@ def get_constant_quality_scale_form_settings(self):
221246 if self .settings .get_setting ('video_encoder' ) in ['libsvtav1' ]:
222247 values ["description" ] = "Default value for libsvtav1 = 23"
223248 return values
224-
249+
225250 def get_video_pix_fmt_form_settings (self ):
226251 values = {
227252 "label" : "Pixel Format" ,
@@ -246,7 +271,7 @@ def get_video_pix_fmt_form_settings(self):
246271 if self .settings .get_setting ('mode' ) not in ['standard' ]:
247272 values ["display" ] = "hidden"
248273 return values
249-
274+
250275 def get_tune_stvav1_form_settings (self ):
251276 values = {
252277 "label" : "SVT-AV1: Tune" ,
@@ -271,7 +296,7 @@ def get_tune_stvav1_form_settings(self):
271296 if self .settings .get_setting ('mode' ) not in ['standard' ]:
272297 values ["display" ] = "hidden"
273298 return values
274-
299+
275300 def get_overlays_form_settings (self ):
276301 values = {
277302 "label" : "SVT-AV1: Enable Overlays" ,
@@ -282,7 +307,8 @@ def get_overlays_form_settings(self):
282307 "value" : 0 ,
283308 "label" : "No (Default)" ,
284309 },
285- { "value" : 1 ,
310+ {
311+ "value" : 1 ,
286312 "label" : "Yes"
287313 },
288314 ]
@@ -310,7 +336,7 @@ def get_variance_boost_form_settings(self):
310336 if self .settings .get_setting ('mode' ) not in ['standard' ]:
311337 values ["display" ] = "hidden"
312338 return values
313-
339+
314340 def get_enable_qm_form_settings (self ):
315341 values = {
316342 "label" : "SVT-AV1: Enable Quantization Matrix (enable-qm)" ,
@@ -348,9 +374,9 @@ def get_qm_min_form_settings(self):
348374 values ["display" ] = "hidden"
349375 if (not self .settings .get_setting ('enable_qm' )):
350376 values ["display" ] = "hidden"
351-
377+
352378 return values
353-
379+
354380 def get_encoder_additional_params_form_settings (self ):
355381 values = {
356382 "label" : "SVT-AV1: Additional Parameters" ,
@@ -371,10 +397,10 @@ def get_encoder_additional_params_form_settings(self):
371397 if self .settings .get_setting ('mode' ) not in ['standard' ]:
372398 values ["display" ] = "hidden"
373399 return values
374-
400+
375401 def get_additional_params_form_settings (self ):
376402 values = {
377- "label" : "SVT-AV1: Additional Parameters field" ,
403+ "label" : "SVT-AV1: Additional Parameters field" ,
378404 "description" : "Additional SVT-AV1 parameters as a colon-separated string (e.g., enable-cdef=1:enable-restoration=1)." ,
379405 "sub_setting" : True ,
380406 "input_type" : "textarea" ,
@@ -383,5 +409,5 @@ def get_additional_params_form_settings(self):
383409 values ["display" ] = "hidden"
384410 if self .settings .get_setting ('encoder_additional_params' ) not in ['additional_params' ]:
385411 values ["display" ] = "hidden"
386-
387- return values
412+
413+ return values
0 commit comments