ffmpeg
Cheat SheetTools

FFmpeg – der wahrscheinlich beste Encoder für 360° Videos

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.

    Warum FFmpeg ?

    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.

    • FFmpeg unterstützt quasi jedes Audio- und Video-Format. Man ist nicht an Presets gebunden wie bei den meisten Schnittsoftwares und kann sehr detailliert in den Encoding-Vorgang eingreifen.
    • Selbst ist der Tonmensch: Im Produktionsprozess, gerade bei Virtual Reality, kann es sehr viel Zeit sparen, sich das Video einfach selber so zu konvertieren, wie man es gerne hätte, ohne, dass man den Editor nochmal bitten muss, ein neues File zu rendern, welches dann noch hoch- und wieder runtergeladen werden muss.
    • Auch für den Editor interessant: In den meisten Fällen ist kein Re-Rendering nötig. Wenn z.B. nur der Ton ausgetauscht werden muss, kann FFmpeg einfach den Audio-Stream ändern, wobei das Video unangetastet bleibt und ist damit nicht nur für 360° Videos interessant.
    • Die meisten Programmcodes, wie hier, können einfach kopiert, eingefügt, und hier immer wieder gerne nachgeschlagen werden.
    • FFmpeg ist übrigens auch für das Streaming von herkömmlichen und VR-Videos interessant.

    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

    Installation

    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.

    Übersicht

    Die Basics:

    • Audio aus Video entfernen
    • Audio aus Video extrahieren
    • Audio an Video anfügen
    • Audio.wav bei Video.mp4 ersetzen
    • Lautstärke von einem Video anpassen
    • Länge eines Media-File anpassen
    • Länge auf das kürzestes Media-File anpassen

    360° Video spezifischer:

    • Bildrate halbieren
    • Video skalieren
    • Stereoskopisch zu Monoskopisch
    • Standbild loopen und Ton anhängen

    Spatial Audio Encoding:

    • Vierkanaliges FOA.wav mit Video
    • Video für Google Jump Inspector encodieren
    • Higher Order Ambisonic HOA.wav zu Quicktime.mov
    • Quad-Binaural

    Weitere interessante Codecs:

    • H.264 (MPEG-4/AVC: Advanced Video Coding)
    • H.265 (HEVC: High-Efficiency Video Coding)
    • DNxHD (Digital Nonlinear Extensible High Definition)
    • WebM
    • TIFF, EXR oder DPX Sequenzen
    • MPEG-H 3D Audio

    Copy and Paste

    Die Basics

    Audio aus Video entfernen

    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

    Audio aus Video extrahieren

    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

    Audio an Video anfügen

    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

    Audio.wav bei Video.mp4 ersetzen

    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

    Lautstärke von einem Video anpassen

    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

    Länge eines Media-File anpassen

    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

    Länge auf das kürzestes Media-File anpassen

    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

    360° Video spezifischer

    Bildrate halbieren

    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

    Video skalieren

    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

    Stereoskopisch zu Monoskopisch

    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

    Standbild loopen und Ton anhängen

    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

    Spatial Audio

    Vierkanaliges FOA.wav mit Video

    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

    Video für Google Jump Inspector encodieren

    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

    Higher Order Ambisonic HOA.wav zu Quicktime .mov

    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

    Quad-Binaural

    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

    Weitere interessante Codecs

    H.264 (MPEG-4/AVC: Advanced Video Coding)

    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 -c:a aac -b:a 320K output.mp4

    H.265 (HEVC: High Efficiency Video Coding)

    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

    DNxHD (Digital Nonlinear Extensible High Definition)

    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 -pix_fmt yuv422p -profile:v dnxhr_lb -y output.mov

    WebM

    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

    TIFF, EXR oder DPX Sequenzen

    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

    MPEG-H 3D Audio

    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.

    Troubleshooting

    FFmpeg zeigt Fehlermeldungen meist in roter Schrift an. Diese können schnell gegoogelt werden. Sonst helfen spontan diese kleinen Tricks:

    • Leerzeichen im Dateinamen beseitigen
    • Dateipfad enthält nicht die benötigte(n) Dateie(n)
    • Videocodec unterstützt das Format der Variablen nicht und FFmpeg findet keine passenden Alternativen.

    Ebenfalls hilfreich

    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.

    Erfahre mehr

    Diese Webseite verwendet Cookies. Wenn Sie diese Webseite weiterhin besuchen, stimmen Sie der Nutzung von Cookies zu. Mehr dazu finden Sie in meiner Datenschutzerklärung.
    Notwendige Cookies
    Tracking
    Auswahl speichern Alles akzeptieren