Geralmente, existem dois métodos para alcançar tais efeitos.
# 1
Crie uma máscara animada em tons de cinza e anexe-a como o canal alfa do vídeo. Realize uma sobreposição do vídeo em uma tela preta.
Prós : opção única para gerar a máscara. Muito mais rápido que o método 2.
Contras : Parâmetros de animação como tamanho, velocidade, duração são fixos. Estes podem ser ajustados dentro do ffmpeg, mas os resultados podem não ser suaves. O arquivo de máscara precisa ser mantido e acessível.
# 2
Use o filtro de mesclagem com uma tela em branco como camada inferior e defina expressões para realizar o efeito.
Prós : personalizável. Pode precisar de alguma tentativa e erro para obter o efeito exato.
Contras : muito mais lento que o método 1. Em resoluções menores, o resultado é mais grosseiro do que uma máscara adequadamente com suavização de serrilhado. Se você não se lembra de expressões ou como elas funcionam, expressões também precisam ser salvas e ajustes podem ser difíceis.
Dito isto, aqui estão os dois efeitos usando o filtro de mesclagem. Ambos os efeitos começam em 2 segundos e acontecem por mais de 3 segundos.
Cortinas, reveladas verticalmente
ffmpeg -i in.mp4 -filter_complex \
"[0]format=yuv444p,split=2[bg][v];[bg]drawbox=t=fill[bg]; \
[v][bg]blend=all_expr='if(lte(2*abs(Y-H/2)/H,(T-2)/3),A,B)',\
format=yuv420p" \
out.mp4
Um método mais rápido pode ser adaptado do primeiro comando aqui . Esse comando faz isso horizontalmente.
Circle Wipe, expandindo
ffmpeg -i in.mp4 -filter_complex \
"[0]format=yuv444p,split=2[bg][v];[bg]drawbox=t=fill[bg]; \
[v][bg]blend=all_expr='if(lte(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/sqrt(pow(W,2)+pow(H,2)),(T-2)/3)/2,A,B)',\
format=yuv420p" \
out.mp4