Inhalt
Wenn mich jemand fragen würde, was denn mein Lieblings-Encoder sei, so würde ich wahrscheinlich mit FFmpeg antworten. Das hat zwar noch niemand getan, (warum auch!? 😀 ) aber trotzdem möchte ich ihn hier vorstellen.
Seit einer halben Ewigkeit habe ich nun einen Notizzettel, auf dem verstreut die besten Kommandozeilen dafür liegen, da dachte ich mir, ich bringe etwas Ordnung in das Ganze und hoffe, dass es auch für andere hilfreich ist.
Bevor wir in die nerdigen Details gehen und wir uns fühlen können wie bei hackertyper.com, zunächst ein paar grundlegende Worte, wieso mich FFmpeg überzeugt hat, auch wenn es nicht mal eine grafische Oberfläche (GUI) hat und auf den ersten Blick etwas abschreckend wirken kann.
Wer wissen will, für welche Plattform man am besten welches Audio-Format nutzt, kann hier ebenso bei meinem Blog-Post dazu nachschauen: Spatial Audio format support für 360° Video Platforms & Players
Die Einrichtung von FFmpeg ist nicht ganz so einfach, wie man das heutzutage von anderen Softwares gewohnt ist, aber die Dateien lassen sich hier schonmal kostenlos runterladen.
Zum Glück gibt es im Internet sehr gute Anleitungen für Windows und Mac auf Deutsch, Englisch und anderen Sprachen, also einfach mal die Suchmaschine des Vertrauens fragen.
Wenn man alles richtig gemacht hat, kann man nun mit Strg+Rechtsklick die Eingabeaufforderung (cmd) direkt im Explorer öffnen und die unten beschriebenen Codes direkt nutzen.
Fangen wir einfach an. Der Prozess den ich mit am meisten nutze, ist es, die Audio-Spur, die meistens einem Videofile anhängt, komplett zu entfernen (nicht nur stumm schalten). Das stellt sicher, dass beim späteren Encoding kein Konflikt entsteht, wenn etwa der Ton ausgetauscht werden soll. Es wird ein neues Video-File mit identischem Bildinhalt erstellt, der Video-Stream wird einfach kopiert, enthält aber nun keine Audio-Spur mehr.
ffmpeg -i input.mp4 -c:v copy -an output.mp4
Das gleiche geht quasi auch umgekehrt, wenn man etwa den Ton aus einem Video gewinnen will. Meistens ist der Ton hier schon durch AAC o.ä. verlustbehaftet komprimiert, ist also eher die unschöne Lösung, das Audio einfach in ein wav zurückzuführen, kann aber zu Testzwecken praktisch sein.
ffmpeg -i video.mp4 -vn -c:a copy -acodec pcm_s16le output.wav
Möchte man Sound an ein stummes Video hinzufügen, geht das mit zwei Inputs, Bewegtbild und Ton. Hier muss der Ton in AAC umgewandelt werden, da mp4 als H264 kein Audio-Stream im Wav-Format unterstützt.
ffmpeg -i input.mp4 -i input.wav -c:v copy -c:a aac -b:a 320k output.mp4
Will man nicht den Umweg gehen, erst ein neues Video-File, ohne Tonspur zu erstellen, sondern will das Audio einfach direkt austauschen, geht das so:
ffmpeg -i input.mp4 -i newaudio.wav -c:v copy -c:a aac -b:a 320k -map 0:v:0 -map 1:a:0 output.mp4
Ebenfalls sehr praktisch ist das Anpassen der Lautstärke. Diese Code kann für eine gleichmäßige Lautstärke bei mehreren Videos untereinander sorgen, ohne, dass neu gerendert oder gar neuer Ton exportiert werden muss.
ffmpeg -i input.mp4 -vcodec copy -af "volume=-15dB" -b:a 320k output.mp4
Möchte man nur einen bestimmten Teil eines Videos, oder Audios, etwa zum Testen nutzen, geht das wie folgt. Auch hier wird nicht neu gerendert, sondern lediglich die unerwünschten Teile des Videos entfernt.
ffmpeg -i input.mp4 -ss 00:01:00 -t 00:00:10 -c:v copy -c:a copy output.mp4
Im Normalfall sollten Bild und Ton die gleiche Länge haben, kann aber ebenfalls eine hilfreiche Abkürzung sein, da mit “-shortest” die Länge des finalen Files auf die kürzeste Dauer der beiden Inputs gesetzt wird.
ffmpeg -i input.mp4 -i audio.aac -shortest -c:v copy -c:a copy output.mp4
Ein Video, das z.B. mit 59,94 Frames aufgenommen wurde, auf 29,97 Frames konvertieren? FFmpeg wird automatisch eine Bitrate auswählen, welche in den meisten Fällen zu gering gesetzt wird. Manuell müsste sie mit dem Befehl -b:v 40m z.B. auf die Hälfte der ursprünglichen Bitrate gesetzt werden.
ffmpeg -i input.mp4 -r 30000/1001 output.mp4
Zum Arbeiten sind Videos mit 4k oder mehr meist zu groß und belasten die Performance unnötig. Hierfür kann man die Höhe und Breite des Videos manuell festsetzen.
ffmpeg -i input.mp4 -s 1920*960 output.mp4
Alternativ kann der Videofilter die Ausmaße des Videos halbieren.
ffmpeg -i input.mp4 -vf scale=iw\*.5:ih\*.5 output.mp4
Hat man ein 3D 360° Video, sieht es auf der VR-Brille bestimmt toll aus, ist aber für herkömmliche Bildschirme weniger geeignet, da ein Auge zur Ansicht reicht, also 2D. Hier wird das Video in der Mitte, horizontal bzw. vertikal, halbiert.
Over-under (top-bottom):
ffmpeg -i input.mp4 -vf crop=h=in_h/2:y=0 output.mp4
Side-by-side (left-right):
ffmpeg -i input.mp4 -vf crop=w=in_w/2:x=0 output.mp4
Hat man gerade nur ein 360° Bild Panorama zur Verfügung und möchte den Ton schnell in ein Video umwandeln, kann das Standbild mit folgendem Befehl einfach hintereinander kopiert werden.
ffmpeg -loop 1 -i stillframe.jpg -i input.wav -map 1:a -map 0:v -c:a copy -channel_layout 4.0 -c:v libx264 -b:v 50000k -bufsize 50000k -shortest output.mov
Nützlich für z.B. YouTube und SamsungVR. Einfacher geht es auch mit dem FB360 Encoder, der injiziert Metadaten automatisch, was sonst manuell noch mit dem „YouTube Spatial Media Metadata Injector“ getan werden muss. Funktioniert auch für FuMa oder Quad, eben alles, was vierkanalig ist, meistens ist es aber ein First Order Ambisonic im ambiX Format.
ffmpeg -i input.mp4 -i input.wav -c:v copy -c:a aac -b:a 512k output.mp4
Jump Inspector kann Ambisonics erster Ordnung und Ambisonics dritter Ordnung, benötigt darüber hinaus aber auch das Video in einem bestimmten Format. Außerdem liest der Google Jump Inspector die Meta-Daten aus dem Dateinamen, diesen also unbedingt anpassen, wie hier vorgeschlagen.
ffmpeg -i input.mp4 -c:v libx264 -b:v 40m -vf scale=3840:2160 -r 30 -profile main -pix_fmt yuv420p -an output.360.mono.mp4
Da mp4 keine 16 Audio-Kanäle unterstützt, muss das Video in ein Quicktime-Format gebracht werden. Dafür kann der mov-Container den Ton verlustfrei als wav-Stream abspielen, was für den Google Jump Inspector, GoPro VR Player 3 oder VLC Media Player interessant sein kann. Ton ist ein wav in Ambisonic dritter Ordnung mit 16 Kanälen.
ffmpeg -i input.mp4 -i input.wav -c:a copy -c:v copy output.mov
Ein kleiner Spezialfall ist quad-binaural, gelegentlich auch als omni-binaural bezeichnet, welches der SamsungVR Player unterstützt. Auch hier werden die Meta-Daten aus dem Dateinamen gelesen. Vor- und Nachteile dieses Exoten können hier nachgelesen werden: Formate für 360° Sound
ffmpeg -i input.mp4 -i 0.wav -i 90.wav -i 180.wav -i 270.wav -map 0:v -map 1:a -map 2:a -map 3:a -map 4:a -vcodec copy -c:a aac -b:a 512k output_mono360_quadraphonic_binaural.mp4
Das wohl am meisten verbreitetste Format für Videos ist aktuell wohl H264. Dieser unterstützt aber Audio nicht als .wav, sondern z.B. AAC und ist damit kein verlustfreier Sound, was beim Arbeiten mit 3D Audio später eine Rolle spielt.
ffmpeg -i input.mp4 -c:v libx264 -b:v 50M -profile main -pix_fmt yuv420p -c:a aac -b:a 320K output.mp4
H265 ist immer mehr im Kommen, aber noch nicht so weit verbreitet. Er kann die Dateigröße eines Video bei gleicher Qualität im Vergleich zu H264 um die Hälfte reduzieren, ist aber entsprechend rechenintensiv.
ffmpeg -i input.mp4 -c:v libx265 -b:v 25M -c:a aac -b:a 320K output.mp4
Die meisten Digital Audio Workstations (DAW) wie Avid ProTools können Rechenleistung sparen, in dem das Video auf eine geringe Auflösung gebracht und in einen Codec gewandelt wird, der weniger prozessorlastig ist, als etwa H264.
ffmpeg -i input.mp4 -vf scale=iw\*.5:ih\*.5 -map 0:v -c:v dnxhd -profile:v dnxhr_lb -y output.mov
WebM, ist ein Container für die von Google eingeführten Videocodecs VP8 und VP9, welcher für gewöhnlich das Audioformat Opus als .ogg nutzt, aber einige Zeit zum Encodieren benötigt.
ffmpeg -i input.mp4 -c:v libvpx -crf 4 -b:v 50M -map 0:v:0 -map 0:a:0 -c:a libvorbis -af "pan=quad|c0=c0|c1=c1|c2=c2|c3=c3" -preset ultrafast output.webm
Solche Dateitypen erreichen die Audio-Postproduktion eher selten, ist aber trotzdem nicht uninteressant. Hier wird nicht nur eine Datei als Input gesetzt, sondern es muss auch eine Framerate für den Input festgelegt werden, damit die Länge des späteren Videos klar ist. Im Output kann die Framrate mit “-r” wieder angepasst werden.
ffmpeg -i input_0001.dpx -framerate 60 -c:v libx264 -b:v 30M -r 30 -an output.mp4
Ich konnte noch nichts über dieses Format bezüglich FFmpeg finden, bin aber gespannt wie es sich entwickelt in Sachen Objekt-basiertes Audio und Audio Definition Model (ADM). Ich denke, dass FFmpeg mit den ganzen Meta-Daten unhandlich werden kann und vermute, dass hier spezielle Encoder zu Einsatz kommen werden, aber wir werden sehen.
FFmpeg zeigt Fehlermeldungen meist in roter Schrift an. Diese können schnell gegoogelt werden. Sonst helfen spontan diese kleinen Tricks:
Wer ein Mac-User ist und sich den ganzen Spaß verpassen will, der kann iFFmpeg probieren, oder einfach per Drag and Drop seine Dateien mit Droplets von AudioEase360 konvertieren. Danke dafür!
Windows Nutzer können myFFmpeg ausprobieren.
Außerdem hat sich bei der Erstellung dieses Artikels Github als hilfreich erwiesen und hat noch eine Übersicht der Variablen. FFmpeg Cheat Sheet for 360° video.
Hier das eigene Wiki von und zu FFmpeg: https://trac.ffmpeg.org/wiki
Mit dem Kommando ffmpeg -i input.mp4 kann man Dateien auch analysieren. Für mich praktischer ist aber die Verwendung einer anderen Software, wie MediaInfo passender, da hier Dateien per Drag and Drop schneller und übersichtlicher kontrolliert werden können.
Danke auch an sämtliche Foren, die per Suchmaschine auch meine Fragen beantworten konnten. Ich hoffe mit diesem Artikel ist nicht nur mir geholfen.
Hier findest Du ein YouTube Tutorial : https://youtu.be/MPV7JXTWPWI?si=0qvnRZoyT75wes4E
Erfahre mehr