Como criar efeitos “curtain” (“celeiro”) e “circle wipe” no FFmpeg?

1

Eu estava tentando criar dois efeitos usando o FFmpeg: "curtain" ("celeiro doors") e "circle wipe" mas não tive sucesso. A idéia básica é começar a partir da tela preta (100% de preenchimento preto) e durante 1 segundo (ou mais) exibir o vídeo inteiro (o preenchimento preto na parte superior e na parte inferior deve ficar cada vez menor).

Como posso fazer isso?

    
por Shchipunov 25.05.2018 / 10:52

1 resposta

0

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
    
por 25.05.2018 / 13:55

Tags