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:
@@ -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
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user