FFmpeg deshake

Mit FFmpeg lassen sich Clips auch deshaken. Ob es immer gut funktioniert und mit den „Großen“ mithalten kann, kann ich momentan nicht beurteilen.
Die ersten vier Stellen des Filter geben das Rechteck an in dem die Bewegung gesucht wird (x, y, w, h), -1 überall bedeutet, dass das ganze Bild analysiert wird.
Die nächsten beiden Ziffern (rx, ry) geben die maximale Ausmaße der Bewegung an. Als nächstes kommt der edge Parameter, welcher angibt wie die entstehenden Ränder befüllt werden sollen, 0 der Rand wird leer gelassen, 1 das Original-Bild wird genommen und gekachelt, 2 die Kanten werden extrudiert und 3 das Bild wir gespiegelt.
Die nächste Zahl gibt die Blockgröße für die Bewegungssuche an, zwischen 0 und 64 ist zulässig. Anschließend kann die Kontrastschwelle für die Blöcke angegeben werden, nur Blöcke mit mehr als der angegebene Kontrast werden berücksichtigt, Bereich 1-255.
die letzte Ziffer gibt die Suchstrategie an = 0: erschöpfende Suche, 1: weniger erschöpfende Suche. Standard – erschöpfende Suche. Es kann auch noch ein Logfile angeben werden, wenn das benötigt wird.

Wenn am Rand genug Platz ist, macht es Sinn das Video zu croppen (Beschneiden), das geschieht mit: -filter:v crop=1600:900.

1
2
3
4
5
@echo off
c:\cmdtools\ffmpeg -i %1 -filter:v deshake=-1:-1:-1:-1:32:32:0:64:125:0 ^
-filter:v crop=1600:900 -s 1024x576 -sws_flags lanczos -vcodec libx264 -crf 23 ^
-preset slow -acodec libvo_aacenc -ab 128k -absf aac_adtstoasc -threads 0 ^
-y %~n1_deshake.mp4

FFmpeg deinterlacing

Hier ein Beispiel wie ffmpeg zum Deinterlacing verwendet werden kann. -vf eldorder=tff gibt an, dass das Inputvideo Top Field first ist.
-filter:v yadif=0:0:0 ist für das Deinterlacing verantwortlich, die erste Ziffer gibt den Mode an von yadif: 0 bedeutet 1 Frame pro Frame, 1 bedeutet 1 Frame per Field, 2 verwirft den „spatial interlacing check“ und 3 ist wie 1 nur wird hier auch der „spatial interlacing check“ übergangen. Die zweite Ziffer gibt parity an: 0 heißt Top Field First, 1 Bottom Field First und -1 automatisch. Die dritte Ziffer regelt auto, hier wird unterschieden zwischen 0 = alle Frames werden deinterlaced und 1 nur die Frames werden deinterlaced welche interlaced makiert wurden.
Mit -preset medium spart man sich den ganzen x264 Codec „Brimborium“ (hier gehen auch die Presets: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo). -s 768×432 -sws_flags lanczos skaliert das Video mit dem Lanczos Filter:

1
2
3
4
@echo off
c:\cmdtools\ffmpeg -vf eldorder=tff -i %1 -filter:v yadif=0:0:0 -vcodec libx264 -crf 24 ^
-preset medium -s 768x432 -sws_flags lanczos -acodec libvo_aacenc -ab 128k ^
-absf aac_adtstoasc -threads 0 -y %~n1.mp4

FFmpeg DVD encoding

DVD encode mit ffmpeg, -flags +ilme+ildct für interlaced Material, -sameq für gleiche Qualität wie das Original:

1
2
@echo off
c:\cmdtools\ffmpeg -i %1 -sameq -target pal-dvd -aspect 16:9 -flags +ilme+ildct %~n1.mpg

FFmpeg Apple ProRes encoding

FFmpeg kann jetzt auch in prores encodieren. Profile 3 steht für HQ, 0 wäre Proxy, -acodec pcm_s24le ist optional/bzw. für eine höhere Bittiefe, -flags +ilme+ildct für interlaced Material und mit -top 1 kann man angeben ob oberes Halbbild zuerst, oder unteres Halbbild (-top 0):

1
2
3
@echo off
c:\cmdtools\ffmpeg -i %1 -vcodec prores -profile:v 3 -flags +ilme+ildct -top 1 ^
-acodec pcm_s24le %~n1.mov

FFmpeg mp3 Compression

FFmpeg eignet sich auch sehr gut zum mp3s erstellen:

1
2
@echo off
c:\cmdtools\ffmpeg -i %1 -vn -acodec libmp3lame -ab 128k "%~n1.mp3"

Das ganze geht natürlich auch im Batch- Verfahren, für mehrere Dateien gleichzeitig:

1
2
3
4
@echo off
for %%f in (%*) do (  
c:\cmdtools\ffmpeg -i %%f -vn -acodec libmp3lame -ab 128k "%%~nf.mp3"
)

Bei Windows XP kann es sein, dass der Output Pfad nicht übernommen wird, dann sollte das Script so ausschauen:

1
2
3
4
@echo off
for %%f in (%*) do (
c:\cmdtools\ffmpeg -i %%f -vn -acodec libmp3lame -ab 128k "%%~df%%~pf%%~nf.mp3"
)

mp4 x264 Compression

mp4 Kompression mit ffmpeg. Der Code wird noch mal überarbeitet… Mit -preset […] könnte man sich auch die meisten Settings sparen. mp4box fügt noch einen „hint“ hinzu, das heißt das Video kann im Web angespielt werden, bevor es komplett geladen ist.

1
2
3
4
5
6
7
8
9
@echo off
c:\cmdtools\ffmpeg -i %1 -vcodec libx264 -crf 22 -pix_fmt yuv420p -profile:v main -coder 1 ^
-flags +loop+mv4 -cmp +chroma -partitions +parti8x8+parti4x4+partp8x8+partb8x8 ^
-me_method umh -subq 8 -me_range 16 -g 250 -keyint_min 5 -sc_threshold 40 -i_qfactor 0.71 ^
-b_strategy 2 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -bf 3 -refs 4 -trellis 1 ^
-acodec libvo_aacenc -ab 160k -profile:a aac_main -absf aac_adtstoasc -threads 0 -y ^
%~n1_x264.mp4
 
c:\cmdtools\mp4box -hint %~n1_x264.mp4