Combinando um zoom com um fade comffmpeg

Combinando um zoom com um fade comffmpeg

Tenho experimentado o FFmpeg por meio de todos os tutoriais que posso encontrar na Internet e estou um pouco confuso sobre como combinar um efeito zoompan com fade in e fade out de uma série de imagens.

Cheguei ao seguinte depois de combinar pedaços de exemplos que encontrei, mas parece que o resultado que obtive é sequencial e não o que pensei que seria.

Qualquer indicação que me indique a direção certa seria apreciada.

ffmpeg \ 
-loop 1 -t 5 -i input/slideshow/img0001.jpeg 
-loop 1 -t 5 -i input/slideshow/img0002.jpeg \
-loop 1 -t 5 -i input/slideshow/img0003.jpeg \
-loop 1 -t 5 -i input/slideshow/img0004.jpeg \
-filter_complex \
"[0:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=out:st=4:d=1[v0]; \
 [1:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" -map "[v]" -s "800x450" -t 40 output/out_fade.mp4

Responder1

Combinando um zoom com um fade comffmpeg

O exemplo que você deu ffmpegrealmente funcionou com muito poucas modificações (manter -loopcausou um segfault: " Error in 'ffmpeg': double free or corruption (!prev): 0x0000000008dffa00").

Então nós temos:

ffmpeg\
-t 5 -i 1.jpg \
-t 5 -i 2.jpg \
-t 5 -i 3.jpg \
-t 5 -i 4.jpg \
-filtro_complexo \
"[0:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=out:st=4:d=1 [v0];
 [1:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1, fade=t=out:st=4:d=1[v1]; \
 [2:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1, fade=t=out:st=4:d=1[v2]; \
 [3:v]zoompan=z='if(lte(zoom,1.0),1.5,max(1.001,zoom-0.0015))':d=125,fade=t=in:st=0:d=1, fade=t=out:st=4:d=1[v3]; \
 [v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p[v]" -map "[v]" -s "800x450" -t 40 ./ out_fade.mp4

Exemplo de saída:

exemplo de zoompan e fade

Qualidade da batata - preciso descobrir gifmelhor a otimização! Artefatos e distorções são resultado da tentativa de obter tamanho de arquivo <2 MB e não estão presentes na saída de vídeo original - deve ser o suficiente para lhe dar uma ideia se ele se adapta ao seu caso de uso. As imagens são de minha autoria.


(adicional)Usando transições variadas ou arbitrárias

adicionado com base em comentários

Mesmo com esse exemplo mínimo, o processo filtergraphfica bastante complexo rapidamente e é entediante mudar as coisas. Uma biblioteca diferente pode funcionar melhor.

MLT / DERRETER

Por exemplo,MELTpara a estrutura MLTpode fazer:

Melt foi desenvolvido como uma ferramenta de teste para a estrutura MLT. Ele pode ser considerado um poderoso, embora um tanto obscuro, editor de vídeo multitrack orientado para linha de comando.

e é frequentemente sugerido.

FilmePy

No entanto,FilmePy(página do GitHub) pode atender melhor às suas necessidades, pois é um pouco mais conciso e (sugiro) mais fácil de usar, na medida em que um editor de vídeo de linha de comando pode ser fácil de usar.

Você provavelmente está mais interessado nas seções sobrecomposiçãoetransições/efeitos


Eu sugiro os dois acima com base em minha própria experiência de tentar usar um pé de cabra em transições com ffmpeg; é factível e capaz de produzir efeitos muito decentes, mas a dor não vale a pena. O script acima deve responder à sua pergunta sobre um zoom contínuo com aumento/redução gradual.

informação relacionada