Superposer des images animées avec transparence sur une image de fond statique en utilisant ffmpeg?

je cherche à créer une vidéo en utilisant un ensemble d'images png qui ont la transparence fusionnée avec un fond statique.

après avoir beaucoup creusé, j'ai l'impression que c'est définitivement possible en utilisant la bibliothèque des filtres.

ma réalisation initiale de la vidéo sans inclure l'arrière-plan est:

ffmpeg -y -qscale 1 -r 1 -b 9600 -loop -i bg.png -i frame_%d.png -s hd720 testvid.mp4

en utilisant -vf je peux appliquer l'arrière-plan de superposition:

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

cependant le problème est de superposer l'arrière-plan sur l'entrée. Selon libacfilter je peux partager l'entrée et jouer avec son contenu. Je me demande si je peux changer l'ordre de superposition?

Toute aide grandement appréciée!

UPDATE 1:

J'essaie de faire fonctionner le filtre suivant mais j'obtiens le film sans le fond:

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

UPDATE 2:

J'ai fait de la vidéo en utilisant l'option-vf. Juste les canalisations de la fente d'entrée appliquée image et à superposer les deux flux! Probablement pas le moyen le plus efficace... mais cela a fonctionné!

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
25
demandé sur blahdiblah 2012-05-04 00:17:02
la source

2 ответов

La superposition est commandé par l'ordre des entrées, à partir de le ffmpeg docs

[...] prend deux entrées et une sortie, la première entrée est le "principal" vidéo sur la seconde entrée est superposé.

votre second commandement devient ainsi:

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

avec les dernières versions de ffmpeg le nouveau -filter_complex commande fait le même processus encore plus simple:

ffmpeg -loop 1 -i bg.png -i frame_%d.png -filter_complex overlay -shortest testvid.mp4

Un travail complet exemple:

La source de la transparence de notre entrée images (toutes mes excuses pour la danse):

Dancing banana

Explosé de cadres avec ImageMagick:

convert dancingbanana.gif -define png:color-type=6 over.png

(Paramètre png:color-type=6 (RGB-Matte) est crucial parce que ffmpeg ne gère pas correctement la transparence indexée.) Les entrées sont nommés over-0.png,over-1.png,over-2.png, etc.

notre image de fond (graduée à banane):

Happy little mountain

en utilisant ffmpeg version N-40511-g66337bf (git de construire depuis hier), nous n':

ffmpeg -loop 1 -i bg.png -r 5 -i over-%d.png -filter_complex overlay -shortest out.avi

-loop boucle l'entrée de l'image de fond de sorte que nous n'avons pas seulement un cadre, crucial!

-r ralentit un peu la banane dansante, facultatif.

-filter_complex est une fonctionnalité ffmpeg très récemment ajoutée rendant la manipulation de plusieurs entrées plus facile.

-shortest fin encodage lorsque le plus court l'entrée se termine, ce qui est nécessaire car boucler l'arrière-plan signifie que l'entrée ne se terminera jamais.

à l'Aide d'un peu moins de pointe construire, 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 n'autorise pas l'établissement des taux, nous avons donc ralentir la place qui donne le même effet. Parce que le film superposé n'est pas une entrée correcte, nous ne pouvons pas utiliser -shortest et au lieu de cela, définissez explicitement le nombre de trames à la sortie à combien de trames d'entrée superposées nous avons.

Le résultat final (comme la sortie d'un gif pour embedding):

Dancing banana with background

47
répondu blahdiblah 2014-02-11 22:21:18
la source

pour les références dans l'avenir de 17/02/2015, la ligne de commande est :

ffmpeg -loop 1 -i images/background.png -i images/video_overlay%04d.png -filter_complex overlay=shortest=1 testvid.mp4

merci pour llogan qui ont pris le temps de répondre ici : https://trac.ffmpeg.org/ticket/4315#comment:1

5
répondu gabrielstuff 2015-02-17 11:38:14
la source

Autres questions sur