Filtr Alphamerge działa tylko na pierwszej klatce

0

Próbuję zaimplementować filtr rozmycia nad konkretnym obiektem innym niż prostokąt, mam maskę i przykładowe wideo, ale problem polega na tym, że wynik alphamerge pierwszej klatki wideo jest stosowany do całego wideo (tak jak nałożyłeś statyczny obraz na całą długość filmu ) Użyłem następującego polecenia

ffmpeg -y -i sample_video.mp4 -i masked_image.png -filter_complex 
"[0:v][1:v]alphamerge,boxblur=16[alf];[0:v][alf]overlay[v]" -map [v] -map 0:a -c:a copy -preset ultrafast test.mp4

sample_video.mp4 masked_image.png

AKTUALIZACJA: Twoje rozwiązanie działa całkiem dobrze, ale teraz wartość intensywności rozmycia nie wpływa na intensywność rozmycia

Obraz maski

Przykładowy obraz

Wynik z boxblur = 10

Wynik z boxblur = 30

Zain Ali
źródło

Odpowiedzi:

1

Twoja maska ​​to pojedynczy obraz, więc nie śledzi obiektu, ale zakładam, że Twoim problemem jest to, że piksele nakładki są nieruchome. Musisz zapętlić maskę, ponieważ alphamerge kończy się najkrótszym wejściem, a nakładka powtórzy ostatnią klatkę drugiego wejścia.

ffmpeg -y -i sample_video.mp4 -loop 1 -i masked_image.png ...
Gyan
źródło
Zauważyłem dla powyższego przypadku (użycie obrazu maski w celu zastosowania efektu rozmycia), że gdy zwiększasz wartość boxblur, a następnie zmniejszasz efekt rozmycia, tak jak od 1-16, to ciągle rośnie, a potem zaczyna maleć (bez względu na to, jak wysoką wartość wybierzesz) ), czy masz pojęcie, dlaczego tak się stało, czy może jest lepsza sugestia użycia masek do rozmycia?
Zain Ali
Czy możesz opublikować przykładowe zdjęcia?
Gyan
Zaktualizowałem swoje pytanie
Zain Ali,
Zmień boxblur=16na boxblur=16:ap=0. Nie chcemy rozmazać płaszczyzny alfa.
Gyan