Für einen Audio-Workflow wollte ich unter anderem Audio-Dateien normalisieren, damit diese mit einer identischen Lautheit verfügbar sind. Dazu kann das freie ffmpeg genutzt werden:
ffmpeg -i local.flac -filter:a loudnorm local.wav
Allerdings wird bei der Normalisierung eine 2-Pass-Lösung empfohlen. Dabei wird im ersten Durchlauf die Datei analysiert, um die entsprechenden Werte für die qualitativ hochwertige Normalisierung zu ermitteln:
ffmpeg -i local.flac -filter:a loudnorm=print_format=json -f null NULL
Für die entsprechende Datei wird dann eine Ausgabe erzeugt:
{ "input_i" : "-33.65", "input_tp" : "-8.11", "input_lra" : "7.10", "input_thresh" : "-44.96", "output_i" : "-25.28", "output_tp" : "-2.00", "output_lra" : "4.50", "output_thresh" : "-36.36", "normalization_type" : "dynamic", "target_offset" : "1.28" }
Mithilfe dieser Informationen kann dann der zweite Durchlauf gestartet werden:
ffmpeg -i local.flac -filter:a loudnorm=linear=true:i=-16:lra=7.0:tp=-2.0:offset=0.50:measured_I=-33.65:measured_tp=-8.11:measured_LRA=7.10:measured_thresh=-44.96 -ar 44100 local.wav
Da die Lösung mittels ffmpeg etwas umständlich ist, wurde ffmpeg-normalize entwickelt. Dieses Python-Tool kann über den Python-Paketmanager installiert werden:
pip3 install ffmpeg-normalize
Anschließend kann die Normalisierung und Konvertierung vorgenommen werden:
ffmpeg-normalize local.flac -o local.wav -ar 44100
In diesem Fall wird die FLAC-Datei normalisiert und in eine Wave-Datei konvertiert und die entsprechende Samplerate auf 44100 gestellt. Um das Kommando einfacher zugänglich zu machen, kann eine Bash-Funktion definiert werden. Unter macOS muss diese in der entsprechenden Konfigurationsdatei der Z shell angelegt werden:
nano ~/.zshrc
Anschließend kann die entsprechende Funktion in der Datei definiert werden:
normalize () { ffmpeg-normalize "$1" -o "$1".wav -ar 44100 }
Nachdem das Terminal neu gestartet wurde, kann das Kommando wie folgt benutzt werden:
normalize local.flac