web-dev-qa-db-fra.com

Transformez la séquence d'images en vidéo avec transparence

J'ai ce qui semble être un problème très simple, mais cela s'avère beaucoup plus difficile que prévu. Voici le problème:

J'ai une séquence d'images assez grande composée d'images numérotées (sortie de Maya, pour ce que ça vaut). Les images sont actuellement au format Targa (.tga), mais je pourrais les convertir au format PNG ou autre format arbitraire si cela importe. L'important, c'est qu'ils ont un canal alpha.

Ce que je veux faire, c'est les transformer par programme en clip vidéo. Le format n'a pas vraiment d'importance, mais il doit être sans perte et avoir un canal alpha. Une vidéo non compressée dans un conteneur Quicktime serait probablement idéale.

Ma pensée initiale était ffmpeg, mais après avoir perdu la majeure partie de la journée, il semble qu'il n'y ait aucun support pour les canaux alpha. Soit je manque quelque chose, soit le libavcodec sous-jacent ne le fait tout simplement pas.

Alors, quelle est la bonne façon ici? Un outil en ligne de commande comme ffmpeg serait bien, mais toute solution qui s'exécute sur Windows et pourrait être appelée à partir d'un script serait bien.

Remarque: Avoir un canal alpha dans votre vidéo n'est pas si rare, et c'est vraiment utile si vous souhaitez le composer au-dessus d'un autre clip vidéo ou d'une image fixe. Pour autant que je sache, la vidéo non compressée, le codec Quicktime Animation et le codec Sorenson Video 3 prennent tous en charge la transparence, et j'ai entendu dire que le H.264 le fait également. Tout ce dont nous parlons vraiment, c'est de la profondeur de couleur 32 bits, et c'est assez largement pris en charge; les fichiers Quicktime .mov et Windows .avi peuvent le gérer, et probablement beaucoup plus.

Quicktime Pro est plus qu'heureux de transformer une séquence d'images en un fichier .mov 32 bits. Appuyez sur l'exportation, changez la profondeur de couleur en "Millions de couleurs +", sélectionnez le codec d'animation, augmentez la qualité jusqu'à 100, et vous y êtes - vidéo compressée sans perte, avec un canal alpha, et elle sera lue presque n'importe où depuis le codec fait partie de Quicktime depuis la version 1.0. Le problème est que Quicktime Pro n'a aucune sorte d'interface de ligne de commande (au moins sous Windows). ffmpeg prend en charge le codage à l'aide du codec Quicktime Animation (qu'il appelle qtrle), mais il ne prend en charge qu'une profondeur de 24 bits.

Le problème n'est pas de trouver un format vidéo prenant en charge un canal alpha. L'animation Quicktime serait idéale, mais même une vidéo non compressée devrait fonctionner. Le problème est de trouver un outil qui le supporte.

35
Cody Hatch

Oui, ffmpeg prend certainement en charge le canal alpha dans un fichier vidéo. Tous les codecs de ffmpeg ne semblent pas encore prendre en charge l'alpha. Motion PNG dans un fichier .MOV est une bonne combinaison pour alpha.

Pour encoder/importer des images avec alpha vers une vidéo avec alpha, essayez: ffmpeg -i %d.png -vcodec png z.mov

Quicktime jouera cela.

Pour décoder/exporter une vidéo avec alpha vers des images avec alpha, essayez: ffmpeg -i z.mov -f image2 export2\%d.png

Notez que je les ai exportés vers un répertoire appelé 'export2'. Assurez-vous de laisser les parties% d dedans. Ces commandes fonctionneront telles quelles sur un système Windows. Les utilisateurs de Linux/Mac devront peut-être ajouter des guillemets et échanger certains\pour/comme d'habitude.

29
dentad

Je sais que ce sujet est un peu ancien, mais je poste quand même.

FFMPEG avec Quicktime Animation (RLE) ou FFVHUFF/HUFFYUV fera l'affaire.

  • ffmpeg -i yoursequence% d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i yoursequence% d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i yoursequence% d.png -vcodec huffyuv movie_with_alpha.avi

Vous obtiendrez des fichiers vidéo avec transparence (canal alpha) préservée.

J'ai également entendu que la variation On2-VP6 (pas encore WebM-VP8) peut gérer l'alpha, mais je n'ai pas leur codec à portée de main.

Cela fonctionne également. - ffmpeg -i yoursequence% d.png -vcodec png movie_with_alpha.mov

18
satoc

Pour les développeurs Web atteignant cette question et se cognant la tête contre le mur de frustration ... Il est possible de créer un vidéo WebM transparente , mais pour le moment, vous devrez peut-être compiler ffmpeg et les bibliothèques requises à partir de la source.

Je voulais afficher une vidéo Blender rendue dans un site Web, mais préserver la transparence. La première étape consistait à rendre la sortie de Blender sous forme de fichiers PNG individuels. Après cela, j'ai passé un bon moment à forcer ffmpeg à convertir ces fichiers PNG en une seule vidéo. La commande de base est simple:

ffmpeg -i input%04d.png output.webm

Cette commande charge tous les fichiers PNG avec les noms de fichiers input0000.png à travers input9999.png et les transforme en vidéo. La transparence a été rapidement perdue. En parcourant la sortie, j'ai réalisé que ffmpeg sélectionnait utilement un format non transparent:

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

À ce stade, je me rendais compte que je devrais peut-être recompiler ffmpeg à partir de zéro. J'ai eu du mal avec quelques autres outils, mais j'ai fini par retrouver ffmpeg. Après avoir compilé libvbx et ffmpeg à partir de la dernière source, les choses ont fonctionné à merveille.

5
thirdender

Je suppose qu'il existe une forte possibilité que vous ou d'autres personnes souhaitiez utiliser une telle vidéo dans un flash interactif. Voici un tutoriel pour le faire, y compris la compilation de ffmpeg en avi non compressé avec un canal alpha à partir de png.

http://away3dtutorials.blogspot.com/2011/02/ffmpeg-to-compile-jpeg-to-video-with.html

1
user1006628

Cody,

Vous pouvez écrire votre propre utilitaire de ligne de commande en utilisant Quicktime SDK pour Windows , je vous recommande de vous en tenir aux API COM Quicktime de niveau supérieur et de ne vous plonger dans les API C que si vous en avez vraiment besoin.

-Pseudo

0
Nick Haddad