Video für HTML5 mit ffmpeg kodieren
Problem:
Du hast eine Videodatei und möchtest sie so kodieren, dass alle drei aktuell verfügbaren HTML5-Codecs (WebM, Theora und H.264) auf der Mehrheit der Geräte unterstützt werden.
Lösung
Du kannst ffmpeg für diese Aufgabe verwenden.
Auf Linux kannst du das folgende Bash-Skript verwenden, vorausgesetzt du hast ffmpeg installiert
#!/bin/bash
#Pfad und Erweiterung vom Dateinamen entfernen
strippedFilename=$(echo $1 | rev | cut -d/ -f1 | cut -d. -f2- | rev)
resolution=640x360
#H.264 kodieren
avconv -i $1 -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 -s $resolution ${strippedFilename}.mp4
#WebM kodieren
avconv -i $1 -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 -s $resolution ${strippedFilename}.webm
#Theora kodieren
avconv -i $1 -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 -s $resolution ${strippedFilename}.ogv
#Vorschaubild extrahieren
avconv -i $1 -ss 00:10 -vframes 1 -r 1 -s $resolution -f image2 ${strippedFilename}.jpgDenke daran, die Variable für die Auflösung anzupassen (oder entferne die Option -s komplett, wenn du das Original verwenden möchtest) je nach gewünschter Videoqualität. 640x480 scheint mir eine gute Lösung zu sein, wenn Bandbreite wichtiger ist als Qualität. Es ist sogar auf 2G-Verbindungen ansehbar, wenn man es ein paar Sekunden laden lässt.
Beachte, dass avconv der Ersatz für das ffmpeg-Werkzeug in neueren Versionen ist. ffmpeg selbst ist veraltet. Wenn du eine ältere Version von ffmpeg hast, ersetze einfach alle Vorkommen von avconv durch ffmpeg im obigen Skript.
Das Skript erstellt außerdem ein Vorschaubild, siehe den letzten Befehl.
Du kannst auch diese modifizierte Version des Skripts verwenden, die die doppelte Erweiterung oder das Verzeichnis nicht entfernt, sodass z.B. beim Kodieren von video.avi video.avi.mp4 statt video.mp4 entsteht. Verwende die modifizierte Version, wenn du eine Datei kodieren musst, die bereits eine der zu generierenden Erweiterungen (.mp4, .ogv oder .webm) hat und du diese Datei im aktuellen Verzeichnis benötigst.
#!/bin/bash
#H.264 kodieren
avconv -i $1 -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 -s 640x360 $1.mp4
#WebM kodieren
avconv -i $1 -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 -s 640x360 $1.webm
#Theora kodieren
avconv -i $1 -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 -s 640x360 $1.ogv
#Vorschaubild extrahieren
avconv -i $1 -ss 00:10 -vframes 1 -r 1 -s 640x360 -f image2 $1.jpgDie Befehle wurden diesem Blog-Eintrag entnommen und für Linux entsprechend angepasst. Siehe den Originalbeitrag für eine Windows-Lösung.