Videos

Ekkart Kleinod  • 

Einfache Konvertierung

Werkzeug: ffmpeg

Formatkonvertierung mts - mp4

$> ffmpeg -i file.mts file.mp4

Video deinterlacen und in mp4 umwandeln

$> ffmpeg -i file.mts -deinterlace file.mp4

Formatkonvertierung mts - mpg

$> ffmpeg -i file.mts file.mpg

Formatkonvertierung mts - mpg, Codec MPEG2-Video, Audio unverändert

$> ffmpeg -i file.mts -vcodec mpeg2video -acodec copy file.mpg

Formatkonvertierung mts - mpg, deinterlace

$> ffmpeg -i file.mts -deinterlace file.mpg

Formatkonvertierung mts - mpg, Größe VGA

$> ffmpeg -i file.mts -s vga file.mpg

Größe ändern

scale-Filter

$> ffmpeg -i infile.mp4 -vf scale=1920x1080 outfile.mp4

Videos rotieren

transpose-Filter rotiert das Video und ändert die Größe

  • 0 = 90° entgegen Uhrzeigersinn und verikal spiegeln (default)
  • 1 = 90° im Uhrzeigersinn
  • 2 = 90° entgegen Uhrzeigersinn
  • 3 = 90° im Uhrzeigersinn und verikal spiegeln
$> ffmpeg -i infile.mp4 -vf "transpose=1" outfile.mp4

rotate-Filter rotiert das Video und ändert nicht die Größe

  • Gradzahl muss mit π/180 multipliziert werden, da rotate in radians arbeitet
  • bilineare Interpolation wird ausgeschaltet, um Unschärfen zu vermeiden
$> ffmpeg -i infile.mp4 -vf "rotate=90*(PI/180):bilinear=0" outfile.mp4

Vertikal zu horizontal

mit Blurring. Dank an envatotuts+, Jackson COuse

$> ffmpeg -i infile.mp4 -filter_complex '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' outfile.mp4

Batch-Konvertierung

Alle Videos eines Ordners und seiner Unterordner deinterlacen und als mp4 abspeichern:

$> find -name "*.mts" -exec ffmpeg -i {} -deinterlace {}.mp4 \;

Alle Videos eines Ordners und seiner Unterordner deinterlacen, auf VGA verkleinern und als mp4 abspeichern:

$> find -name "*.mts" -exec ffmpeg -i {} -deinterlace -s vga {}.vga.mp4 \;

Film in Einzelbilder konvertieren

Werkzeug: ffmpeg

Dies ist die Vorstufe für die Erstellung eines animierten gifs.

Im Beispiel wird zusätzlich eine Skalierung vorgenommen Ausgabe ist auch als jpg möglich. Der Dateiname muss entsprechend mit Platzhaltern versehen werden.

  • -i - Eingabedatei
  • -r - Framerate (ohne Angabe = Originalframerate)
  • -s - Ausgabegröße (ohne Angabe = Originalgröße)
  • -f - Ausgabeformat
$> ffmpeg -i file.mp4 -r 12 -s 640x360 -f image2 image-%3d.png

Codec eines Films herausbekommen

Werkzeug: ffprobe

$> ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 <file>

alle Informationen:

$> ffprobe <file>

Zeitraffer Video → Video

Blender oder ffmpeg nehmen.

Wird der Ton nicht entfernt oder angepasst, bleibt das Video in der Ursprungslänge, da der Ton noch vorhanden ist. Ton anpassen mit ffmpeg ist schwierig, daher das am besten mit Blender erledigen.

Video 10fach beschleunigen (Ton bleibt):

$> ffmpeg -i <infile> -filter:v "setpts=PTS/10" <outfile>

Video 10fach beschleunigen (Ton entfernen):

$> ffmpeg -i <infile> -an -filter:v "setpts=PTS/10" <outfile>

https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

MKV-Dateien splitten

mkvmerge nehmen.

An allen chapters splitten:

$> mkvmerge --output <outfile> --split "chapters:all" <infile>

Für alle Dateien (chapters oder timestamp):

$> find -name "*.mkv" -exec mkvmerge --output "{}.conv.mkv" --split "chapters:all" "{}" \;
$> find -name "*.mkv" -exec mkvmerge --output "{}.conv.mkv" --split "timestamps:00:00:07.000" "{}" \;

Videoinformation

Beim zweiten Befehl: loglevel 0 schaltet alle Fehlermeldungen von ffprobe aus, bei Fehlern kommt also nur ein leeres JSON.

$> ffprobe <file>
$> ffprobe -loglevel 0 -print_format json -show_format -show_streams <file>

Audiocodecs aller Dateien, das 2>&1 leitet stderr nach stdout um, damit grep funktioniert - warum auch immer ffprobe nach stderr ausgibt...

$> find -name "*.mp4" -exec ffprobe {} \; 2>&1 | grep Audio

Codecs

  • Alle
  • Video
  • Audio
  • Encoder Video
  • Encoder Audio
  • Encoder Video oder Audio
$> ffmpeg -codecs
$> ffmpeg -codecs | grep "^ ..V... .*"
$> ffmpeg -codecs | grep "^ ..A... .*"
$> ffmpeg -codecs | grep "^ .EV... .*"
$> ffmpeg -codecs | grep "^ .EA... .*"
$> ffmpeg -codecs | grep "^ .E[VA]... .*"

Video umkodieren

Andere Codecs einfach angeben, copy für Kopie

$> ffmpeg -i <file> -vcodec <codec> -acodec <codec> <newfile>
$> ffmpeg -i <file> -vcodec <codec> -acodec copy <newfile>
$> ffmpeg -i <file> -vcodec copy -acodec <codec> <newfile>

Batch

$> find -name "*.mp4" -exec ffmpeg -i "{}" -vcodec copy -acodec copy "{}".copy.mp4 \;