Audio-Dateien mittels ffmpeg normalisieren

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

mov-Dateien mittels ffmpeg zu mp4-Dateien konvertieren

Im Internet und den Appstores existieren eine Reihe unzählige Anzahl von Konvertierungstools für Video- und Audiodateien. Und meist sind diese Werkzeuge aufgeblasen oder schlimmer mit unerwünschter Software versehen. Glücklicherweise kann die Konvertierung mittels ffmpeg auch einfach von der Hand gehen. Dazu muss ffmpeg im ersten Schritt installiert werden, z.B. unter macOS mittels Homebrew:

brew install ffmpeg

Anschließend kann im Terminal die eigentliche Konvertierung stattfinden:

ffmpeg -i example.mov -vcodec h264 -acodec aac example.mp4

Je nach Größe der Datei ist die Konvertierung nach einigen Minuten abgeschlossen.

Downloads über youtube-dl auf MP4-Dateien beschränken

Wer die Kommandozeilenanwendung youtube-dl nutzt um YouTube-Videos herunterzuladen, sieht das diese jeweils den besten Audio-Stream und den besten Video-Stream nutzt. Im Normalfall wird dann meist der WebM-Stream und der M4A-Stream heruntergeladen. Soll nur der MP4-Stream heruntergeladen werden, kann dies über einen entsprechenden Parameter eingestellt wird:

youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' videoId123

Damit wird immer noch der beste Stream ausgewählt, allerdings beschränkt auf die Erweiterung MP4 bzw. M4A. Nach dem Download der beiden Streams, werden diese dann, mittels FFmpeg, in einer MP4-Datei gemergt.

ffmpeg wird von zsh beendet

Beim Aufruf von ffmpeg im Terminal kam es unter macOS Big Sur auf einem M1-Mac zu folgender Fehlermeldung:

zsh: killed     ffmpeg

Installiert war ffmpeg über den Paketmanager Homebrew. In diesem Fall half es ffmpeg mitsamt seiner Abhängigkeiten wieder neu zu installieren:

rew reinstall $(brew deps ffmpeg) ffmpeg

Nach dieser Prozedur konnte ffmpeg im Terminal wieder normal benutzt werden.

Mittels FFmpeg Videos aus Bilderreihen zu machen

Aus einer Bilderreihe wollte ich vor einigen Tagen ein Zeitraffer-Video erstellen. Zur Umsetzung auf der Kommandozeile entschied ich mich für FFmpeg. Dort sieht der entsprechende Aufruf wie folgt aus:

ffmpeg -start_number 1 -i img_%d.jpg -vcodec mpeg4 video.mp4

In diesem Fall ist die Bilderreihe in fortlaufenden Bilddateien nach dem Schema img_1.jpg, img_2.jpg usw. abgelegt. Das fertige Video wird in der Datei video.mp4 gespeichert. Die Startnummer kann frei gewählt werden; die Nummerierung muss hierbei ununterbrochen sein, damit die komplette Bilderreihe im Video landet.