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