Combinando un zoom con un desvanecimiento conffmpeg

Combinando un zoom con un desvanecimiento conffmpeg

He estado probando FFmpeg a través de todos los tutoriales que puedo encontrar en Internet y estoy un poco desconcertado sobre cómo combinar un efecto de zoom pan con aparición y desaparición gradual de una serie de imágenes.

Llegué a lo siguiente después de combinar fragmentos de ejemplos que encontré, pero parece que el resultado que obtengo es secuencial y no es lo que pensé que sería.

Se agradecería cualquier sugerencia que me indicara la dirección correcta.

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

Respuesta1

Combinando un zoom con un desvanecimiento conffmpeg

El ejemplo que dio ffmpegen realidad funcionó con muy pocas modificaciones (mantenerlo -loopprovocó un error de segmentación: " Error in 'ffmpeg': double free or corruption (!prev): 0x0000000008dffa00").

Entonces tenemos:

ffmpeg\
-t 5 -i 1.jpg\
-t 5 -i 2.jpg \
-t 5 -i 3.jpg \
-t 5 -i 4.jpg\
-filtro_complejo \
"[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, desvanecerse=t=fuera: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, desvanecerse=t=fuera: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, desvanecerse=t=fuera: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

Salida de ejemplo:

ejemplo de zoompan y desvanecimiento

Calidad de la papa: ¡Necesito descubrir gifmejor la optimización! Los artefactos y la distorsión son el resultado de intentar obtener un tamaño de archivo < 2 MB y no están presentes en la salida de video original; debería ser suficiente para darle una idea de si se ajusta a su caso de uso. Las imágenes son mías.


(adicional)Usar transiciones variadas o arbitrarias

añadido basado en comentarios

Incluso con este ejemplo mínimo, todo filtergraphse vuelve bastante complejo rápidamente y es tedioso cambiar las cosas. Una biblioteca diferente podría funcionar mejor.

MLT / DERRETIR

Por ejemplo,MELTpara el marco MLTpodría hacer:

Melt fue desarrollado como una herramienta de prueba para el marco MLT. Se puede considerar como un potente, aunque algo oscuro, editor de vídeo multipista orientado a línea de comandos.

y se sugiere con frecuencia.

PelículaPy

Sin embargo,PelículaPy(página de GitHub) podría satisfacer mejor sus necesidades, ya que es un poco más conciso y (sugeriría) más fácil de usar, en la medida en que un editor de video de línea de comandos puede ser fácil de usar.

Probablemente le interesen más las secciones sobrecomponiendoytransiciones/efectos


Sugiero los dos anteriores basándome en mi propia experiencia al intentar hacer palanca en transiciones con ffmpeg; Es factible y capaz de producir algunos efectos muy decentes, pero el dolor no vale la pena. El script anterior debería responder a su pregunta sobre un alejamiento continuo con un desvanecimiento de entrada/salida.

información relacionada