Ogg Theora, WebM und MP4-Video für HTML5 mit FFmpeg kodieren

Als Notiz zum Nachschlagen an mich selbst (und für alle, die es auch gebrauchen können): Um selbst gehostete Videos in allen möglichen Browsern abspielen zu können, braucht man – wenn man es möglichst sauber umsetzen will – mehrere verschiedene Versionen, die aus ein und derselben Quelldatei generiert werden.

Wenn nicht schon geschehen, sollte man sich als MacOS-Nutzer zuerst einmal Homebrew installieren, anschließend FFmpeg mit zusätzlichen Bibliotheken. Also Terminal öffnen und

brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libquvi --with-libvorbis --with-libvpx --with-opus --with-x265 --with-theora

eingeben. Nur falls FFmpeg bereits zuvor in einer minimalen Konfiguration installiert war, muss man es vor der erneuten Installation löschen mit

brew uninstall ffmpeg

Sollte die Installation also geklappt haben, werden die Videos wie folgt kodiert (in diesem Fall alle mit 5000 Kbps für den Videostream und 128 Kbps für den Audiostream)…

Ogg Theora:

ffmpeg -i quelldatei.mov -c:v libtheora -c:a libvorbis -b:v 5000k -b:a 128k -ar 44100 -vf scale=1920:1080 zieldatei.ogg

WebM:

ffmpeg -i quelldatei.mov -vcodec libvpx -b:v 5000k -c:a libvorbis -ac 2 -b:a 128k -ar 44100 -vf scale=1920:1080 zieldatei.webm

MP4:

ffmpeg -i quelldatei.mov -c:v libx264 -b:v 5000k -minrate 5000k -maxrate 5000k -bufsize 1835k -c:a aac -b:a 128k zieldatei.mp4

Um Homebrew und FFmpeg künftig auf dem laufenden zu halten:

brew update && brew upgrade ffmpeg

Anwendung natürlich auf eigene Gefahr.

Video-Uploads auf Twitter vom Desktop ist Raketenwissenschaft – Lösung: FFmpeg und Safari

Gerade Stunden damit zugebracht, ein Video vom Browser auf Twitter hochzuladen. Mit Firefox war es generell unmöglich, mit TweetDeck ebenfalls, mit Safari ging’s dann. Aber nur, wenn das Video sich in den sehr engen technischen Vorgaben bewegt, die Twitter vorgibt.

Als Notiz an mich selbst (und für alle, die ein ähnliches Problem haben und mit MacOS arbeiten):

  1. Video aus dem Schnittprogramm exportieren (in meinem Fall eine Masterdatei in FullHD mit ProRes422 in einem MOV-Container verpackt)
  2. Terminalfenster öffnen und ffmpeg mit folgender Kommandozeile nutzen

ffmpeg -i quelldatei.mov -r 25 -vcodec libx264 -b:v 2M -vf 'scale=1280:trunc(ow/a/2)*2' -pix_fmt yuv420p -strict -2 -acodec aac zieldatei.mp4

FFmpeg generiert nun aus dem ProRes422-Master eine mit H.264 enkodierte Datei, die mit 25 Bildern pro Sekunde läuft, skaliert sie herunter auf 1280 x 720 Pixel, nutzt für den Sound AAC und verpackt alles zusammen mit einer angemessenen Rate von 2000 Kbit/s. Wichtig ist, dass aus der Quelldatei eine Zieldatei mit YUV-Farbraum, 4:2:0 Chroma-Subsampling und 8 Bit Farbtiefe generiert wird – alles andere lehnt Twitter (Stand heute) ab.

Wer FFmpeg nicht installiert hat, dem empfehle ich, sich zunächst Homebrew und anschließend FFmpeg nach dieser Anleitung zu installieren. Wer viel mit Videokodierung zu tun hat, sollte nicht auf dieses Schweizer Messer verzichten. Vor allem, wenn man gelegentlich auf Twitter hochlädt und nicht auf iOS/Android-Apps angewiesen sein will.