Wie auch schon vom letzten Rust-Vortrag musste ich auch dieses Mal das Video nachbearbeiten:
- Am Beginn musste wieder ein Teil (3:29 Minuten) abgeschnitten werden,
- zwei Aufnahmen miteinander verbunden werden und
- die Urheberrechtsinformationen hinzugefügt werden.
Dieses Mal habe ich für die Videoaufzeichnung auf meinem Laptop nicht Vokoscreen, sondern OBS-Studio verwendet. Dieses verbraucht weniger Ressourcen und somit hat dieses mal die lokale Aufzeichnung auch geklappt. Dennoch hatten wir zwischendurch den Eindruck, dass OBS-Studio stört und wir hatten die Aufzeichnung abgebrochen, wodurch zwei Dateien entstanden sind.
Verbinden von Dateien mit gleichem Codec
Für das Aneinanderhängen von Dateien habe ich zwei Anleitungen gefunden:
Damit habe ich mir dann diesen Befehl zusammengestellt:
console
ffmpeg -f concat -safe 0 \
-i <(for i in 2021-01-21*.mkv; echo "file $PWD/${(q)i}") \
-codec copy -ss 3:29 \
-metadata 'title=Programmierung in Rust' \
-metadata 'author=Jörg Sommer <joerg@jo-so.de>' \
-metadata year=2021 -metadata date=2021-01-21 \
-metadata 'copyright=© 2021 Jörg Sommer <joerg@jo-so.de>, CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0/deed.de>' \
-metadata 'comment=See <https://jo-so.de/2021-01/Rust-Vortrag.html>' \
~/Projekte/website/pages/2021-01/Rust-Vortrag.mp4
Die entscheidenden Optionen sind -f concat -i DATEI
, wobei in der DATEI
zeilenweise die Einträge für die Eingabedateien in der Form file …
stehen
müssen. Ich habe dafür keine Datei erstellt, sondern lasse diese von der Zsh
generieren. Da diese jedoch in einem anderen Verzeichnis liegt, erachtet
ffmpeg die Datei als unsicher und ich musste die Option -safe 0
angeben.
Der Rest ist dann wieder das Kopieren der Daten mit -codec copy
und das
Abschneiden des Anfangs mit -ss
. Da sowohl das Containerformat mkv, als auch
das Format mp4 das Videoformat h264 und das Audioformat aac unterstützen,
konnte ich in dem Schritt auch einfach das Containerformat wechseln, da mkv
mindestens vom Firefox 84 nicht erkannt wird.
Konvertierung von Formaten mit FFmpeg
Da das Videoformat vp9 kleinere Dateien erstellt
als h264 wollte ich auch das
Video als webm anbieten. Die Konvertierung von h264 in
vp9
für webm ist sehr einfach, jedoch läuft es bei mir schrecklich langsam
(Faktor 0,2): ffmpeg -i Rust-Vortrag.mp4 Rust-Vortrag.webm
Grau ist alle Theorie: Nach zehn Stunden Konvertierung kam eine webm-Datei von 620 MB heraus, die größer als die mp4-Datei mit 540 MB war. Also kam nicht die erwartete Verbesserung heraus und ich habe die Datei verworfen. Leider unterstützt mein Prozessor (i7‑4720HQ, Haswell) nicht das VP9-Format, weshalb die Rechenzeit nicht wesentlich kürzer wird.
Für die Konvertierung habe ich noch den Tipp bekommen, dass eine zweiphasige Konvertierung bessere Ergebnisse liefert:
ffmpeg -i vid.mkv -threads $(nproc) -b:v 500k -pass 1 -an -f null /dev/null &&
ffmpeg -i vid.mkv -threads $(nproc) -row-mt 1 -b:v 500k -pass 2 vid.webm
In der ersten Phase wird das Video analysiert und aufgrund dieser Daten dann das Video in der zweiten Phase umgewandelt. Allerdings habe ich diese zwanzig Stunden Arbeit nicht ausprobiert.
Sound-Verbesserung mit sox
Für die Verbesserung des Tons (in diesem Fall einer
Big-Blue-Button-Aufzeichnung) kann man
auch die Tonspur aus einem Video extrahieren und mit sox
nachbearbeiten. Im konkreten Fall
ging es vor allem um die Entfernung von
Rauschen, was
mit noisered
passiert. Die Reduktionen des Lautstärke (mit vol …
) war
notwendig, weil sox gewarnt hatte: »sox WARN highpass: highpass clipped 1231
samples; decrease volume?«
% ffmpeg -i webcams.webm -vn -acodec flac sound-old.flac
% sox sound-old.flac -n noiseprof sound.nprof
% sox --temp /var/tmp sound.flac sound-neu.flac \
vol 0.97 \
noisered sound.nprof \
remix - \
vol 0.95 \
highpass 100 \
norm \
compand 0.05,0.2 6:-54,-90,-36,-36,-24,-24,0,-12 0 -90 0.1 \
vad -T 0.6 -p 0.2 -t 5 \
fade 0.1 \
reverse \
vad -T 0.6 -p 0.2 -t 5 \
fade 0.1 \
reverse \
norm -0.5
% ffmpeg -threads $(nproc) -i deskshare.webm -i sound-new.flac \
-vcodec copy -acodec libopus -map 0:v -map 1:a joined.webm