You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Resolve the highest-priority configured language to a canonical desired key.
804
+
805
+
:param stream_type: Stream type key ('audio' or 'subtitle')
806
+
:return: Canonical language key from DESIRED_LANGUAGES or None
807
+
"""
808
+
809
+
priority_names=resolve_priority_list(stream_type) # Resolve ordered priority names for the requested stream type.
810
+
iflen(priority_names) ==0: # Verify at least one configured priority exists.
811
+
returnNone# Return None when no priority language is configured.
812
+
813
+
top_priority_name=priority_names[0] # Read the highest-priority display name from configuration.
814
+
iftop_priority_nameinDESIRED_LANGUAGES: # Verify top priority already matches a canonical desired language key.
815
+
returntop_priority_name# Return canonical key directly when an exact key match exists.
816
+
817
+
normalized_priority=normalize_text(top_priority_name) # Normalize top priority text for robust alias comparison.
818
+
normalized_aliases=get_normalized_desired_language_aliases() # Build normalized alias map for desired languages.
819
+
820
+
forlanguage_name, aliasesinnormalized_aliases.items(): # Iterate canonical language aliases for fuzzy canonical resolution.
821
+
foraliasinaliases: # Iterate each normalized alias for the current canonical language.
822
+
ifalias=="": # Verify alias has meaningful content before comparison.
823
+
continue# Continue to next alias when normalized alias is empty.
824
+
ifalias==normalized_priorityornormalized_priorityinaliasoraliasinnormalized_priority: # Verify alias relation between priority value and canonical aliases.
825
+
returnlanguage_name# Return canonical language key when alias relation matches.
826
+
827
+
returnNone# Return None when no canonical desired language can be resolved.
Detect canonical stream language using tags, title, codec, and fuzzy aliases.
833
+
834
+
:param stream: Stream metadata dict
835
+
:param stream_type: Stream type key ('audio' or 'subtitle')
836
+
:return: Canonical language key from DESIRED_LANGUAGES or None
837
+
"""
838
+
839
+
tags=stream.get("tags", {}) or {} # Resolve stream tags mapping with empty fallback.
840
+
raw_lang=stream.get("raw_language") ortags.get("language") ortags.get("LANGUAGE") ortags.get("lang") or""# Resolve raw language metadata with fallbacks.
841
+
raw_title=stream.get("raw_title") orstream.get("title") ortags.get("title") or""# Resolve raw title metadata with fallbacks.
842
+
detected_language=detect_language(raw_lang, raw_title, stream_type) # Reuse existing normalized language detector first.
843
+
ifdetected_languageisnotNone: # Verify canonical language was resolved from standard metadata fields.
844
+
returndetected_language# Return detected canonical language immediately when available.
845
+
846
+
normalized_aliases=get_normalized_desired_language_aliases() # Build normalized desired language aliases for fallback matching.
847
+
metadata_values= [] # Initialize metadata value list for fuzzy fallback matching.
848
+
metadata_values.append(normalize_text(stream.get("codec", ""))) # Append normalized codec name to fallback candidates.
849
+
metadata_values.append(normalize_text(raw_lang)) # Append normalized raw language value to fallback candidates.
850
+
metadata_values.append(normalize_text(raw_title)) # Append normalized raw title value to fallback candidates.
851
+
forvalueintags.values(): # Iterate all tag values for additional fuzzy matching input.
852
+
metadata_values.append(normalize_text(value)) # Append normalized tag value to fallback candidates.
853
+
854
+
priority_names=resolve_priority_list(stream_type) # Resolve configured priority language names for deterministic ordering.
855
+
ordered_languages= [] # Initialize ordered canonical language scan list.
Determine whether processing can be skipped when default streams already match priority.
879
+
880
+
:param video_path: Path to the video file
881
+
:param audio_streams: List of parsed audio stream dicts
882
+
:param subtitle_streams: List of parsed subtitle stream dicts
883
+
:return: True when both default audio and subtitle streams already match highest priority
884
+
"""
885
+
886
+
default_audio_stream=find_current_default_stream(audio_streams) # Resolve currently flagged default audio stream.
887
+
default_subtitle_stream=find_current_default_stream(subtitle_streams) # Resolve currently flagged default subtitle stream.
888
+
desired_audio_language=resolve_priority_canonical_language("audio") # Resolve canonical top-priority audio language from configuration.
889
+
desired_subtitle_language=resolve_priority_canonical_language("subtitle") # Resolve canonical top-priority subtitle language from configuration.
890
+
891
+
ifdefault_audio_streamisNoneordefault_subtitle_streamisNone: # Verify both default streams exist before skip decision.
892
+
returnFalse# Return False when one of the default streams is missing.
893
+
ifdesired_audio_languageisNoneordesired_subtitle_languageisNone: # Verify top-priority canonical languages were resolved from configuration.
894
+
returnFalse# Return False when priority canonical languages cannot be resolved.
895
+
896
+
current_audio_language=detect_stream_language_for_validation(default_audio_stream, "audio") # Detect canonical language for current default audio stream.
897
+
current_subtitle_language=detect_stream_language_for_validation(default_subtitle_stream, "subtitle") # Detect canonical language for current default subtitle stream.
898
+
899
+
ifcurrent_audio_language==desired_audio_languageandcurrent_subtitle_language==desired_subtitle_language: # Verify both defaults already match highest-priority desired languages.
900
+
verbose_output(f"[DEBUG] Skipping file as default streams already match desired priority: {os.path.basename(video_path)}") # Output debug skip log in the existing format.
901
+
returnTrue# Return True to skip remuxing for this file.
902
+
903
+
returnFalse# Return False when at least one default stream does not match configured priority.
ifshould_skip_processing_for_correct_defaults(video_path, audio_streams, subtitle_streams): # Verify whether both current defaults already match highest-priority desired languages.
1209
+
return# Skip remuxing when default streams already match configured priority.
1210
+
1085
1211
apply_prune_and_set_defaults(video_path, audio_streams, subtitle_streams) # Prune non-desired and set defaults
0 commit comments