Add audio normalization option and support

Introduce an "audio_normalization" option across the app and implement normalization for audio-only downloads. Updates include: add config default (ConfigManager), new language strings, settings UI checkbox + help text and logic to auto-enable force-audio-format when normalization is enabled, and persist the setting. Pass the setting from main app to DownloadThread, and in the downloader force re-encoding to mp3 when necessary and append --postprocessor-args ExtractAudio:-af loudnorm=... to apply EBU R128 normalization. This ensures normalization works reliably (avoids ffmpeg stream-copy errors) and keeps the behavior scoped to ExtractAudio postprocessor.
This commit is contained in:
oop7
2026-03-21 15:08:48 +02:00
parent fff674a0b8
commit b048f8ce09
5 changed files with 67 additions and 2 deletions
+8 -2
View File
@@ -257,6 +257,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
self.preferred_output_format = ConfigManager.get("preferred_output_format") or "mp4"
self.force_audio_format = ConfigManager.get("force_audio_format") or False
self.preferred_audio_format = ConfigManager.get("preferred_audio_format") or "best"
self.audio_normalization = ConfigManager.get("audio_normalization") or False
self.generic_mode_enabled = ConfigManager.get("generic_mode") or False
# Track if video analysis is completed
self.analysis_completed = False
@@ -640,12 +641,16 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
# Update Audio Format Settings
new_force_audio_format = dialog.get_force_audio_format_enabled()
new_preferred_audio_format = dialog.get_preferred_audio_format()
new_audio_normalization = dialog.get_audio_normalization_enabled()
audio_format_changed = False
if new_force_audio_format != self.force_audio_format or new_preferred_audio_format != self.preferred_audio_format:
if (new_force_audio_format != self.force_audio_format or
new_preferred_audio_format != self.preferred_audio_format or
new_audio_normalization != self.audio_normalization):
self.force_audio_format = new_force_audio_format
self.preferred_audio_format = new_preferred_audio_format
self.audio_normalization = new_audio_normalization
audio_format_changed = True
logger.info(f"Audio format settings updated - Force: {self.force_audio_format}, Preferred: {self.preferred_audio_format}")
logger.info(f"Audio format settings updated - Force: {self.force_audio_format}, Preferred: {self.preferred_audio_format}, Norm: {self.audio_normalization}")
# Update Generic Mode Setting
new_generic_mode = dialog.get_generic_mode_enabled()
@@ -778,6 +783,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
preferred_output_format=self.preferred_output_format, # Pass preferred format
force_audio_format=self.force_audio_format, # Pass force audio format setting
preferred_audio_format=self.preferred_audio_format, # Pass preferred audio format
audio_normalization=self.audio_normalization, # Pass audio normalization setting
filename_format=filename_format, # Pass the filename format
)