transparente - ¿Superponer imágenes animadas con transparencia sobre una imagen de fondo estática usando ffmpeg?
quitar fondo imagen png autocad (2)
Estoy buscando crear un video usando un conjunto de imágenes png que tienen transparencia fusionada con un fondo estático.
Después de mucho excavar, parece que es definitivamente posible usando la biblioteca de filtros.
Mi video inicial sin incluir el fondo es:
ffmpeg -y -qscale 1 -r 1 -b 9600 -loop -i bg.png -i frame_%d.png -s hd720 testvid.mp4
Usando -vf
puedo aplicar el fondo como superposición:
ffmpeg -y -qscale 1 -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png [wm];[in][wm] overlay=0:0 [out]" -s hd720 testvid.mp4
Sin embargo, el problema es que está superponiendo el fondo sobre la entrada. Según libacfilter puedo dividir la entrada y jugar con su contenido. Me pregunto si de alguna manera puedo cambiar el orden de superposición.
Cualquier ayuda muy apreciada!
ACTUALIZACIÓN 1:
Estoy tratando de hacer que funcione el siguiente filtro, pero obtengo la película sin el fondo:
ffmpeg -y -qscale 1 -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png [bg]; [in] split [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]" -s hd720 testvid.mp4
ACTUALIZACIÓN 2:
Conseguí hacer video usando la opción -vf. Simplemente conectó la ranura de entrada, aplicó la imagen sobre ella y superpuso las dos fuentes de alimentación divididas. Probablemente no sea la forma más eficiente ... ¡pero funcionó!
ffmpeg -y -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png, scale=1280:720:0:0 [bg]; [in] format=rgb32, split [T1], fifo, [bg] overlay=0:0, [T2] overlay=0:0 [out]; [T1] fifo [T2]" -s hd720 testvid.mp4
El orden de la superposición se controla por el orden de las entradas, desde los documentos ffmpeg
[...] toma dos entradas y una salida, la primera entrada es el video "principal" en el que se superpone la segunda entrada.
Tu segundo comando se convierte así en:
ffmpeg -y -loop 1 -qscale 1 -r 1 -b 9600 -i frame_%d.png -vf "movie=bg.png [wm];[wm][in] overlay=0:0" -s hd720 testvid.mp4
Con las últimas versiones de ffmpeg, el nuevo comando -filter_complex
simplifica aún más el mismo proceso:
ffmpeg -loop 1 -i bg.png -i frame_%d.png -filter_complex overlay -shortest testvid.mp4
Un ejemplo completo de trabajo:
La fuente de nuestras imágenes de entrada transparentes (disculpas por bailar):
Explotó a cuadros con ImageMagick :
convert dancingbanana.gif -define png:color-type=6 over.png
(La configuración de png:color-type=6
(RGB-Matte) es crucial porque ffmpeg no maneja correctamente la transparencia indexada). Las entradas se denominan over-0.png
, over-1.png
, over-2.png
, etc.
Nuestra imagen de fondo (escalada a banana):
Usando la ffmpeg version N-40511-g66337bf
(una compilación de git de ayer), hacemos:
ffmpeg -loop 1 -i bg.png -r 5 -i over-%d.png -filter_complex overlay -shortest out.avi
-loop
la entrada de la imagen de fondo para que no tengamos solo un cuadro, ¡crucial!
-r
ralentiza un poco el plátano danzante, opcional.
-filter_complex
es una característica ffmpeg recientemente agregada que facilita el manejo de múltiples entradas.
-shortest
extremos más cortos codifican cuando finaliza la entrada más corta, lo cual es necesario ya que en bucle el fondo significa que esa entrada nunca terminará.
Usando una versión menos ffmpeg version 0.10.2.git-d3d5e84
generación, ffmpeg version 0.10.2.git-d3d5e84
:
ffmpeg -loop 1 -r 5 -i back.png -vf ''movie=over-%d.png [over], [in][over] overlay'' -frames:v 8 out.avi
movie
no permite el ajuste de velocidad, por lo que disminuimos la velocidad del fondo, lo que da el mismo efecto. Debido a que la película superpuesta no es una entrada adecuada, no podemos usar -shortest
y, en su lugar, establecer explícitamente la cantidad de cuadros a la cantidad de cuadros de entrada superpuestos que tenemos.
El resultado final (salida como un gif para incrustar):
Para referencias en el futuro a partir del 17/02/2015, la línea de comando es:
ffmpeg -loop 1 -i images/background.png -i images/video_overlay%04d.png -filter_complex overlay=shortest=1 testvid.mp4
gracias por llogan que se tomó el tiempo de responder aquí: https://trac.ffmpeg.org/ticket/4315#comment:1