WebM, MP4, OGG encoden mit FFmpeg (Windows/Linux)

Sofern es denn möglich ist habe ich die Dinge gern selbst in der Hand. Wozu also Youtube, wenn man Webvideos auch selbst erstellen und vernünftig einbinden kann? Wenn es nach Kompatibilitätstabellen geht, sollte man bei Nutzung des <video> Tags am besten gleich 3 Videoformate bereithalten, um möglichst vielen Nutzern das Abspielen zu ermöglichen. Mindestens wäre allerdings wie man sieht eine Kombination aus H.264 + WebM oder H.264 + Theora recht sinnvoll. Ich persönlich habe mich für erstere Kombination entschieden.

Zunächst habe ich nach einer Variante für Windows gesucht. Man nehme dazu einen FFmpeg Build von Zeranoe und entpacke ihn nach einer präsenten Stelle (bei mir testweise „c:\ffmpeg“). Nun kann man sich im gleichen Ordner ein kleines Batch-Script bauen, was die Erstellung aller 3 Videoformate übernimmt. Das sieht dann wie folgt aus:

Speichern als html5convert.bat (oder Download)

REM mp4  (H.264 / ACC)
"c:\ffmpeg\bin\ffmpeg.exe" -i %1 -b:v 1600k -vcodec libx264 -preset slow -g 30 -s 640x360 %~n1_n.mp4
REM webm (VP8 / Vorbis)
"c:\ffmpeg\bin\ffmpeg.exe" -i %1 -b:v 1600k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 -s 640x360 %~n1_n.webm
REM ogv  (Theora / Vorbis)
"c:\ffmpeg\bin\ffmpeg.exe" -i %1 -b:v 1600k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 -s 640x360 %~n1_n.ogv
REM jpeg (screenshot at 10 seconds)
"c:\ffmpeg\bin\ffmpeg.exe" -i %1 -ss 00:00:10 -vframes 1 -r 1 -s 640x360 -f image2 %~n1_n.jpg

Das ganze kann man dann wenn man möchte noch ins Kontextmenü bringen, aber das soll hier erstmal nicht das Thema sein. Im einfachsten Fall also nun das Script in der Kommandozeile laden und als ersten Parameter die Quelldatei übergeben oder die Quelldatei einfach im Windows Explorer auf das Script ziehen und los gehts.

Es entstehen 4 neue Dateien mit dem Suffix „_n.*“, die dann zur Verwendung mit einem HTML5 Webplayer bereit sind. Die Parameter kann man natürlich beliebig anpassen, angefangen bei der durchschnittlichen Videobitrate (hier 1600kbit/s).

Das gleiche Verfahren mit einem ähnlichen Script kann man natürlich auch für Linux-Systeme nutzen. Auch hier kann man sich den Kompilieraufwand sparen, indem man fertige Binaries verwendet. Hier bekommt man diese für 32- und 64 Bit Systeme. Auch in dem Fall ist es ganz einfach. Ein Archiv der Wahl laden und entpacken. „chmod +x ffmpeg“ ausführen falls die Binary-Datei noch nicht als ausführbar gekennzeichnet ist.

Das Bash-Script zum Aufruf der 3 Encodingvorgänge muss im gleichen Ordner angelegt werden, in dem sich die Binärdatei ffmpeg befindet.

Speichern als html5convert.sh

#/bin/bash
if [ -n "$1" ]
then
if [ -f $1 ]
then
#mp4 (H.264 / ACC)
./ffmpeg -i $1 -b:v 1600k -vcodec libx264 -preset slow -g 30 -s 640x360 $1_n.mp4
#webm (VP8 / Vorbis)
./ffmpeg -i $1 -b:v 1600k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 -s 640x360 $1_n.webm
#ogv  (Theora / Vorbis)
./ffmpeg -i $1 -b:v 1600k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 -s 640x360 $1_n.ogv
#jpeg (screenshot at 10 seconds)
./ffmpeg -i $1 -ss 00:00:10 -vframes 1 -r 1 -s 640x360 -f image2 $1_n.jpg
else
echo "Datei ungueltig oder keine gewaehlt!"
fi
else
echo "Kein Parameter angegeben!"
fi

Das Script sollte also die gleiche Ausgabe erzeugen wie die Windowsvariante. Einen ganz guten Vergleich von HTML5 Video Playern findet ihr übrigens bei den Jungs von Prägnanz. Viel Spaß!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.