Option 1: Eingebaute Normalisierungsfilter
Aktuell verfügt ffmpeg über zwei Filter, die direkt zur Normalisierung verwendet werden können - obwohl sie schon recht fortschrittlich sind, also nicht einfach Verstärkung anwenden, um einen Spitzenwert zu erreichen. Hier sind sie:
-
loudnorm
: Lautheitsnormalisierung gemäß EBU R128. Sie können ein integriertes Loudness-Ziel, ein Loudness-Bereichsziel oder den maximalen wahren Spitzenwert einstellen. Dies wird für die Veröffentlichung von Audio und Video empfohlen und wird von Rundfunkanstalten auf der ganzen Welt verwendet.
-
dynaudnorm
: “intelligente” Lautheitsnormalisierung ohne Clipping, bei der die Normalisierung dynamisch auf gefensterte Teile der Datei angewendet wird. Dies kann die Charakteristik des Klangs verändern, daher sollte es mit Vorsicht angewendet werden.
Außerdem kann der Filter volume
verwendet werden, um einfache Lautstärkeanpassungen vorzunehmen. Weitere Informationen finden Sie im Wiki-Eintrag Audio Volume Manipulation .
Der loudnorm
-Filter kann mit einem Durchgang verwendet werden, aber es wird empfohlen, zwei Durchgänge durchzuführen, was eine genauere lineare Normalisierung ermöglicht. Dies ist ein wenig schwer zu automatisieren. Wenn Sie außerdem eine “einfache” RMS-basierte oder Spitzenwert-Normalisierung auf 0 dBFS (oder ein anderes Ziel) wünschen, lesen Sie weiter.
Option 2: Verwenden Sie das ffmpeg-normalize
Tool
Ich habe ein Python-Programm zur Normalisierung von Mediendateien erstellt, das auch auf PyPi verfügbar ist . Sie müssen nur:
Zum Beispiel:
ffmpeg-normalize input.mp4 -o output.mp4 -c:a aac -b:a 192k
Oder, um einfach eine Anzahl von Audiodateien im Stapel zu normalisieren und sie als unkomprimierte WAV in einen Ausgabeordner zu schreiben:
ffmpeg-normalize *.m4a -of /path/to/outputFolder -ext wav
Das Tool unterstützt EBU R128 (Standard), RMS und Peak. Schauen Sie sich ffmpeg-normalize -h
für weitere Optionen an und lesen Sie die README für einige Beispiele.
Außerdem unterstützt es das Re-Encoding mit anderen Encodern (z. B. AAC oder MP3) oder das automatische Zusammenführen des Audios zurück ins Video.
Option 3: Manuelles Normalisieren von Audio mit ffmpeg
In ffmpeg können Sie den Filter volume
verwenden, um die Lautstärke einer Spur zu ändern. Stellen Sie sicher, dass Sie eine aktuelle Version des Programms herunterladen.
Diese Anleitung ist für die Peak-Normalisierung, was bedeutet, dass der lauteste Teil in der Datei auf 0 dB gesetzt wird, statt auf einen niedrigeren Wert. Es gibt auch eine RMS-basierte Normalisierung, die versucht, die durchschnittliche Lautheit über mehrere Dateien hinweg gleich zu machen. Dazu wird nicht versucht, die maximale Lautstärke auf 0 dB zu drücken, sondern die mittlere Lautstärke auf den gewünschten dB-Wert (z. B. -26 dB).
Ermitteln Sie die anzuwendende Verstärkung
Zuerst müssen Sie den Audiostrom auf die maximale Lautstärke analysieren, um zu sehen, ob sich eine Normalisierung überhaupt lohnt:
ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/null
Ersetzen Sie /dev/null
durch NUL
unter Windows.
Die Argumente -vn
, -sn
und -dn
weisen ffmpeg an, Nicht-Audio-Streams während dieser Analyse zu ignorieren. Dadurch wird die Analyse drastisch beschleunigt.
Dies gibt etwas wie das Folgende aus:
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] mean_volume: -16.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] max_volume: -5.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] histogram_0db: 87861
Wie Sie sehen können, ist unsere maximale Lautstärke -5,0 dB, also können wir 5 dB Verstärkung anwenden. Wenn Sie einen Wert von 0 dB erhalten, dann brauchen Sie das Audio nicht zu normalisieren.
Anwenden des Lautstärkefilters:
Jetzt wenden wir den volume
Filter auf eine Audiodatei an. Beachten Sie, dass das Anwenden des Filters bedeutet, dass wir den Audiostrom neu codieren müssen. Welchen Codec Sie für Audio verwenden wollen, hängt natürlich vom Originalformat ab. Hier sind einige Beispiele:
Einfache Audiodatei: Kodieren Sie die Datei einfach mit dem von Ihnen benötigten Encoder:
AVI-Format: Normalerweise gibt es MP3-Audio bei Videos, die in einem AVI-Container kommen:
MP4-Format: Bei einem MP4-Container finden Sie normalerweise AAC-Audio. Wir können den eingebauten AAC-Encoder von ffmpeg verwenden.
In den obigen Beispielen wird der Videostream mit -c:v copy
umkopiert. Wenn in Ihrer Eingabedatei Untertitel oder mehrere Videostreams vorhanden sind, verwenden Sie die Option -map 0
vor dem Ausgabedateinamen.