2017-07-11 2 views
1

Ich habe ein Quadrat-Video von Snap Spectacles (1088x1088), die ich überlagern möchte, gezoomt und verschwommen.Overlay kreisförmigen Video mit Transparenz mit maskedmerge

Beispiel Eingaberahmen:

original snap spectacles video frame

in und unscharfen Hintergrund Erzeugte gezoomt:

generated zoomed in and blurred background

gewünschter Ausgang:

desired output

Ich denke, ich kann dies mit ffmpeg's maskedmerge tun, aber ich habe Probleme, Beispiele zu finden.

Es gibt an example of maskedmerge that merges two videos of the same size and dynamically removes a green screen, und ein anderes das merges videos with transparency.

Hier ist die nächste, die ich habe in der Lage zu bekommen:

ffmpeg -i background.jpg -vf "movie=input.jpg[inner];[in][inner] overlay=#{offset}:0 [out]" -c:a copy output.jpg

enter image description here

tl; dr: Da die ersten beiden Frames, wie kann ich den dritten Frame erzeugen (als Video) ?

+1

Sie müssen eine kreisförmige Maske für das Hauptvideo erstellen und diese Maske mit dem Video alphanumerieren. – Mulvya

Antwort

1

Verstanden!

Wie @Mulvya empfohlen, brauchte ich eine kreisförmige Maske:

ffmpeg circular mask

Da Maske snapmask.png, ein verschwommenes Quadrat Hintergrund Video background.mov und das Original-Video 65B6354F61B4AF02_HD.MOV, sie sein können verschmolzen wie folgt:

ffmpeg -i background.mov -loop 1 -i snapmask.png -filter_complex " \ 
[1:v]alphaextract, scale=1080:1080 [mask];\ 
movie=65B6354F61B4AF02_HD.MOV, scale=1080:1080 [original];\ 
[original][mask] alphamerge [masked];\ 
[0:v][masked] overlay=420:0;"\ 
-c:a copy output.mov 

Sie können jedoch eine bessere Leistung erzielen, indem Sie im selben Befehl das unscharfe Hintergrundvideo im laufenden Betrieb erzeugen. Nun ist die einzigen Eingänge sind die ursprüngliche Brille rundes Video und die kreisförmige Maske:

ffmpeg -i 65B6354F61B4AF02_HD.MOV -loop 1 -i snapmask.png -filter_complex "\ 
[0:v]split[a][b];\ 
[1:v]alphaextract, scale=1080:1080[mask];\ 
[a]scale=1080:1080 [ascaled];\ 
[ascaled][mask]alphamerge[masked];\ 
[b]crop=946.56:532:70.72:278, boxblur=10:5,scale=1920:1080[background];\ 
[background][masked]overlay=420:0"\ 
-c:a copy 65B6354F61B4AF02_HD_sq.MOV 

Die crop=946.56:532:70.72:278 Bit ist was ich gefunden habe arbeitete am besten einen rechteckigen Abschnitt des kreisförmigen Videos zu beschneiden Zum Vergrößern in.

Es hat eine Weile gedauert, bis ich meinen Kopf um das ffmpeg-Filtersystem gelegt habe, aber das ist nicht so gruselig, wie ich anfangs gedacht hatte. Die grundlegende Syntax ist [input]command args[output], und Befehle können verkettet werden, ohne ihre Ausgaben explizit zu benennen (wie in [1:v]alphaextract, scale=1080:1080[mask]).