Videos
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 \;