ffmpeg
deconfigurationother_softwareffmpeg

Allgemeines zu ffmpeg

  • Die Entwicklung von ffmpeg geht sehr schnell und leider haben sich in der Vergangenheit (Version 1.x auf 2.x) viele Kommandozeilenparameter geändert. Deshalb nicht zu lange mit Tipps aus Foren aufhalten, die irgendwie nicht funktionieren!
  • Eine aktuelle Version sollte von der Webseite heruntergeladen werden. Wenigstens Fedora und Ubuntu haben derzeit keine aktuellen Packages!
  • Es gibt eine statisch gelinkte Version, die man auch auf seinem Webserver laufen lassen kann
  • das ffprobe, das im Paket enthalten ist, kann Videoformate erkennen und daraus csv, xml oder JSON generieren
  • Es gibt eine GUI für ffmpeg, die winff heißt

Kommandozeile von ffmpeg

-threads 7
regelt effektiv wieviele Prozessoren in einem Mehrprozessorsystem zum Umwandeln genutzt werden und von daher wie lange das Umwandeln dauert. Leider wird das nicht von allen Videocodecs unterstützt. Als Faustregel: Anzahl der CPU-Kerne -1 als Wert einstellen und 0, wenn man nicht weiß, wieviele Kerne man hat (das ist die Automatik)

Allgemeines zu Kodierung für verschiedene Geräte

  • Der VLC Mediaplayer ist kein guter Player zum testen! Unter bislang ungeklärten Umständen verwaschen die Bilder oder Farben mit der Zeit, um beim nächsten Keyframe wieder auf "richtig" zu springen. Ergebnis wirkt optisch ruckelig, aber eben nur im VLC!
  • viele Geräte untersützen für x264 nur Farbtiefen bis 12bit. Das Pixelformat dazu ist bei ffmpeg yuv420p und sollte immer mit angegeben werden, weil die automatik manchmal quatsch macht.
  • die Konvertierung nach webm funktioniert mit Standardeinstellungen gar nicht gut: Die Qualität ist mies. Das liegt an den -qmin und -qmax werten, die angeblich optional anzugeben sind, aber wenn man sie nicht angibt, funktionierts nicht wie erwartet.
  • Handymonitore sind oft Dunkler eingestellt, als Bildschirme auf dem Schreibtisch. Das spart Akku. Aber auch, wenn man mit dem Telefon draußen ist, wirkt der Bildschirm dunkler gegen das Tageslicht. Deshalb sollten Videos für mobile Geräte etwas aufgehellt werden.

Erstellen eines webm-videos für html5

ffmpeg -i %04d.png -c:v libvpx -quality good -cpu-used 0 -crf 10 -qmin 4 -qmax 20 -g 25 -threads 7
-g 25
regelt nach wievielen frames ein keyframe erzwungen werden soll
-crf 10
regelt die angepeilte Durchschnittsqualität. Sollte deshalb zwischen qmin und qmax liegen.
-qmin und -qmax
minimale und maximale Kompressionsqualität pro frame (zwischen 4 und 60 | 60=schlecht)

Android

Es gibt eine Liste der auf Android-Telefonen unterstützten Videoformate. Diese sollte benutzt werden, weil es Hardwarebeschleuniger für Videoformate gibt ohne die es beim Handy meistens auch nicht geht. Wichtig ffmpeg in der Version 2.0 wird benötigt, um den Videofilter curves nutzen zu können! Auf die Weise wird das Video so beschnitten, dass es den Bildschirm möglichst gut ausfüllt:

# SD (high quality)
ffmpeg -i %04d.png -c:v libx264 -preset veryslow -pix_fmt yuv420p -crf 18 -profile:v baseline -vf curves=lighter,scale=480:-1,crop=480:360 handy-hd-curve-lighter.mp4

# HD 720p (not playable on all devices)
ffmpeg -i %04d.png -c:v libx264 -preset veryslow -pix_fmt yuv420p -crf 18 -profile:v baseline -vf curves=lighter,scale=1280:-1,crop=1280:720 handy-hd-curve-lighter.mp4

# native resolution, youtube compatible (two phases)
ffmpeg -i input.avi -c:a libmp3lame -c:v libx264 -preset veryfast -pix_fmt yuv420p -crf 18 -profile:v baseline -movflags +faststart output.mkv
ffmpeg -i input.avi                 -c:v libx264 -vprofile high -preset slower -b:v 1000k -vf scale=-1:576 -threads 0 -c:a aac -strict -2 -ab 196k -movflags +faststart output.mp4

HTML5 Video Element

Eigentlich war vorgesehen, dass das HTML5-video-tag als Kindelemente source-tags hat, die ihrerseits jeweils wieder media-attribute bekommen sollten. Allerdings hat das bislang leider kein Browser umgesetzt. Darum braucht man eine Browserweiche, wenn man größere Videos hat, die nativ auf einem Handy nicht unterstützt werden, aber im Browser am Computer in hoher Qualität abgespielt werden sollen. http://www.w3.org/wiki/HTML/Elements/source - w3 spezifikation des source tags http://www.w3schools.com/tags/att_source_media.asp - status der Browserunterstützung

DVD

Mit ffmpeg lassen sich alle Möglichen Videodateien in ein DVD-Kompatibeles Mpeg-Format konvertieren:

ffmpeg -i video.mp4 -target dvd output.mpg

dvdauthor kann daraus eine abspielbare dvd erzeugen:

dvdauthor --title -o dvd -f output.mpg
dvdauthor -o dvd -T
mkisofs -dvd-video -o dvd.iso dvd/
# growisofs -dvd-compat -dvd-video -speed=4 -Z /dev/dvd dvd/*

Webcam streaming

    v4l2-ctl --list-formats-ext -d /dev/video2
    V4L2UCP_DEV=/dev/video2 v4l2ucp 
    ffplay -flags +low_delay -analyzeduration 0  -max_probe_packets 1  -max_delay 0   -probesize 100000 -input_format yuyv422 -video_size 1920x1080 -framerate 60 -profile:v baseline -i  /dev/video2
top