Transformer la séquence d'image en vidéo avec transparence
j'ai ce qui semble que ce devrait être un problème très simple, mais il s'avère beaucoup plus difficile que je m'y attendais. Voici le problème:
j'ai une séquence d'images assez grande composée de cadres numérotés (sortie de Maya, pour ce que ça vaut). Les images sont actuellement dans Targa (.TGA), mais je pourrais les convertir en PNGs ou autre format arbitraire si cela compte. L'important, c'est qu'ils ont un canal alpha.
ce que je veux faire est programmatique tourner dans un clip vidéo. Le format n'a pas vraiment d'importance, mais il doit être sans perte et avoir un canal alpha. Vidéo non compressée dans un conteneur Quicktime serait probablement idéal.
ma première pensée a été ffmpeg, mais après avoir gaspillé la majeure partie de la journée à ce sujet, il semble qu'il n'a aucun soutien du tout pour les chaînes alpha. Soit je rate quelque chose, soit le libavcodec sous-jacent ne le fait pas.
Alors, quel est le bon chemin? Un outil en ligne de commande comme ffmpeg soyez gentil, mais n'importe quelle solution qui tourne sur Windows et pourrait être appelé à partir d'un script serait très bien.
Note: avoir un chanel alpha dans votre vidéo n'est pas vraiment si rare, et c'est vraiment utile si vous voulez le composer sur un autre clip vidéo ou une image fixe. Pour autant que je sache, la vidéo non compressée, le codec D'Animation Quicktime et le codec Sorenson Video 3 prennent tous en charge la transparence, et J'ai entendu dire que H. 264 le fait aussi. On ne parle que de couleur 32 bits. profondeur, et c'est assez largement soutenu; les deux Quicktime .mov files et Windowss .les fichiers avi peuvent le manipuler, et probablement beaucoup plus.
Quicktime Pro est plus qu'heureux de transformer une séquence d'image en 32 bits .mov fichier. Hit exporter, changer la profondeur de couleur à " des Millions de couleurs+", sélectionner le codec D'Animation, la manivelle de la qualité jusqu'à 100, et vous êtes là - sans perte vidéo compressée, avec un chanel alpha, et il va lire en arrière presque n'importe où depuis le codec a fait partie de Quicktime depuis la version 1.0. Le problème est que Quicktime Pro n'a pas d'interface en ligne de commande (du moins sous Windows). ffmpeg prend en charge l'encodage à L'aide du codec D'Animation Quicktime (qu'il appelle qtrle), mais il ne prend en charge qu'une profondeur de bits de 24 bits.
le problème n'est pas de trouver un format vidéo qui supporte un canal alpha. L'Animation Quicktime serait idéale, mais même la vidéo non compressée devrait fonctionner. Le problème est de trouver un outil qui le supporte.
5 réponses
Oui ffmpeg supporte certainement alpha channel dans un fichier vidéo. Tous les codecs de ffmpeg ne semblent pas encore supporter alpha tho. Motion PNG in A.MOV file est une bonne combinaison pour alpha.
Pour encoder/importer des images avec alpha pour une vidéo avec alpha essayer: ffmpeg -i %d.png -vcodec png z.mov
Quicktime va jouer à ça.
Pour décoder/exporter une vidéo avec alpha des images avec alpha essayer: ffmpeg -i z.mov -f image2 export2\%d.png
notez que je les ai exportés dans un répertoire appelé 'export2'. Assurez-vous de laissez le %d pièces. Ces commandes fonctionneront comme sur un système Windows. Linux/Mac les utilisateurs peuvent avoir besoin d'ajouter des guillemets et échanger quelques \ / comme d'habitude.
je sais que ce sujet est un peu vieux, mais je poste quand même.
FFMPEG avec Animation Quicktime (RLE) ou FFVHUFF/HUFFYUV fera l'affaire.
- ffmpeg-i votre conséquence % D. png-vcodec qtrle movie_with_alpha.mov
- ffmpeg-i votre conséquence % D. png-vcodec ffvhuff movie_with_alpha.avi
- ffmpeg-i votre conséquence % D. png-vcodec huffyuv movie_with_alpha.avi
vous obtiendrez des fichiers vidéo avec transparence (canal alpha)) préserver.
j'ai aussi entendu On2-vp6 variation (pas encore le WebM-VP8) peut gérer alpha, mais je n'ai pas leur codec à portée de main.
Cela fonctionne aussi. - ffmpeg-i votre conséquence % D. png-vcodec png movie_with_alpha.mov
pour les développeurs web atteignant cette question et frappant leur tête contre le mur dans la frustration... il est possible de créer un transparent vidéo WebM, mais pour le moment vous pourriez avoir besoin de compiler ffmpeg et les bibliothèques requises à partir de la source.
je voulais afficher une vidéo de Blender rendue dans un site Web mais préserver la transparence. La première étape a consisté à rendre la sortie du Blender sous forme de fichiers PNG individuels. Après ça, j'ai passé pas mal de temps à essayer de forcer ffmpeg pour 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 png avec les noms de fichier input0000.png
input9999.png
et les transforme en une vidéo. La transparence a été rapidement perdue. En passant au peigne fin la sortie, j'ai réalisé que ffmpeg était en train de sélectionner un format non transparent:
Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'
a ce point je me rendais compte que je pourrais avoir à recompiler ffmpeg à partir de zéro. J'ai lutté avec quelques autres outils, mais finalement fini par revenir avec ffmpeg. Après avoir compilé libvbx et ffmpeg à partir de la dernière source, les choses ont bien fonctionné.
je suppose qu'il y a une forte possibilité que vous ou d'autres veuillent utiliser une telle vidéo dans un flash interactif. Voici un tutoriel sur la façon de le faire, y compris la compilation ffmpeg à avi non compressé avec canal alpha de png.
http://away3dtutorials.blogspot.com/2011/02/ffmpeg-to-compile-jpeg-to-video-with.html
Cody,
vous pouvez écrire votre propre utilitaire de ligne de commande en utilisant le Quicktime SDK for Windows, je recommande de rester avec les API Quicktime de niveau supérieur et de plonger dans les API C seulement si vous devez vraiment le faire.
-Pseudo