10
votes

Comment créer un film à partir de 5000 fichiers PNG?

Bien, situation simple. J'ai créé environ 5000 images sous forme de fichiers PNG que je souhaite afficher comme une animation dans une application .NET. Chaque image est de taille 1920x1080 et le fichier PNG utilise des canaux alpha pour la transparence (partielle). Et ça va compliquer un peu les choses, car je préférerais le garder transparent. (Mais si cela est impossible, je vais simplement ajouter une image d'arrière-plan à chaque PNG.)

En raison de la grande quantité d'images, j'aurais besoin de beaucoup de mémoire. Eh bien, un disque dur 1 To et un système Intel Xeon de 12 Go Quad-Core exécutant Vista 64-Bits résolvent ces exigences de mémoire. Mais à moins qu'un outil ne soit créé pour prendre en charge 64 bits, il s'étouffera probablement après avoir chargé peut-être 800 des 5000 images. J'ai donc besoin d'un outil qui peut faire cela.

Le format de film n'est pas si important. La compression, tant que la qualité de l'image reste élevée. (Et il y a une raison pour laquelle j'ai utilisé une résolution si énorme!) La compression sans perte serait préférée, cependant. Mon système est assez rapide pour rejouer le film de nouveau pour que je ne sois pas inquiet de sa vitesse. Cependant, la qualité de l'image est le facteur le plus important ici.

Jusqu'à présent, j'ai proposé deux options: 1) Je trouve un outil gratuit qui peut gérer cette quantité de données. (Gratuit ou très bon marché.) 2) J'écris moi-même un tel outil ...

L'option 1 est un peu hors de la place ici. En outre, en tant qu'ingénieur logiciel, mes mains sont simplement des contractions pour l'écrire moi-même! En C # avec de préférence aucune bibliothèque tiers. Donc ma question: - Où commencer à écrire cela moi-même? (au cas où vous vous demandez, ce film est une animation où une jeune femme se promène dans les rues de la ville, passant plusieurs signes qui mentionnent des caractéristiques d'un produit. À la fin du film, elle se promène à un signe plus important qui montre le nom du produit lui-même. Et c'est une longue scène continue, pas de pauses. Et bien amusant de créer aussi! Et environ 10 Go d'images ...)


0 commentaires

5 Réponses :


10
votes

FFMPEG est capable de créer un fichier vidéo à partir d'une série de fichiers image, ce lien vers son manuel montre un exemple:

http://ffmpeg.org/ffmpeg-doc.html# SEC5

Quant à la création du fichier de film Programaticcaly, sans bibliothèques tiers ... cela va être un peu plus difficile. De nombreux formats de cinéma sont extrêmement compliqués et de créer un sans une bibliothèque existante seraient assez douloureux (sauf si j'ai mal interprété votre question et que vous ne vous demandez pas vraiment de créer le codeur réel)

Si je n'ai pas mal interprété votre question, une simple mise en œuvre d'un film de film basé sur YUU pourrait être faisable. HUFFYUV en est un au courant de cela pourrait ne pas être trop difficile.


5 commentaires

Je n'aime pas trop de MPEG depuis que c'est un format de compression à perte de temps. J'aimerais avoir un format de film sans perte d'abord que je pouvais ensuite utiliser pour convertir à tout autre format que je voudrais. Il devrait y avoir un format sans perte quelque part, non? Peu importe si le film final devient de 40 Go de taille ou autre chose. J'ai juste besoin d'avoir toutes 5000 images dans un format de film sans perte. Pourtant, FFMPEG a l'air prometteur. Je ne sais pas si cela peut gérer cela beaucoup de données, cependant. (Ni si cela peut être compilé à une application de 64 bits.)


FFMPEG ne devrait pas avoir de problèmes tout avec la manipulation de nombreuses données, si vous descendez cette route. Par exemple, je l'ai utilisé pour encoder le rêve d'Elephant ( Elephantsdream.org ) avant, qui est disponible comme à propos de 12 Go de PNG sans perte.


Oh, je viens de remarquer que tu voulais un codec de film de préférence sans perte. FFMPEG prend en charge le mode sans perte de X264 (un codeur H.264) ainsi que quelques formats YUV (comme HuffYuv) qui devraient également être sans perte


Je viens de tenter cela sur Linux, cela fonctionne très bien. Mais l'installation nécessite également d'installer Yasm.


@Falaina @wimtenbrink: J'ai utilisé ffmpeg -r 10 -i% 03d.png -pix_fmt yuv420p -vcodec libx264 out.avi .



5
votes

Deux choses:

  • Vous êtes pas d'écrire un codeur vidéo approprié par vous-même. Pas par une longueur débordante. Donc, vos options sont soit pour réutiliser un codeur existant, soit pas utiliser un codeur du tout.
  • Aucun format vidéo ne traitera de transparence. Soit vous donnez toutes les images un arrière-plan ou vous ne pourrez pas utiliser un format vidéo existant.

    Il y a quelques solutions qui me tient à l'esprit:

    Vous ne vous souciez pas de la taille, mais vous faites soin de la qualité. La première chose que je vous demanderais est: faites-vous vraiment vraiment pas attention à la taille? La plupart des formats vidéo (en particulier H.264) vous donneront une excellente qualité à une taille de fichier sensiblement inférieure (pensez 10x). Vous serez à peine capable de dire la différence. Oui, votre contenu est HD, mais la teneur en HD sur la télévision ou le Blu-ray est également compressée (à l'aide de H.264 ou VC-1) et c'est assez bon pour tout le monde. Donc, je considère sérieusement cela comme une option, car il rend le reste beaucoup plus facile.

    Si vous le souhaitez, vous pouvez toujours recourir à un format vidéo sans perte, telle que HuffYuv . Cela vous donnera au moins certains compression, tout en coupant la taille de vos données vidéo en deux (ou plus).

    Comme je l'ai dit, en utilisant un format vidéo codé, vous perdez la transparence. Si vous souhaitez conserver la transparence, vous ne vous souciez toujours pas de la taille du fichier, pourquoi ne pas conserver les PNG et les afficher comme un diaporama très rapide dans votre application? Si votre seul problème avec ceci est la mémoire requise de chargement de tous les PNG en mémoire à la fois ... ne faites pas cela. Lisez quelques images en avant (un montant fixe ou aussi loin que la mémoire le permet), et une fois que vous avez affiché un cadre, retirez-le de la mémoire et lisez une nouvelle image à venir. De cette façon, vous devez garder une qualité parfaite et des exigences de mémoire constantes. Le seul problème est que votre disque et votre processeur devront pouvoir suivre le taux de lecture 30 PNGS par seconde (ou quel que soit votre taux de trame).

    En outre, si 5000 fichiers d'image distincts sont trop lourds pour manipuler, vous pouvez les envelopper tous dans un format de fichier personnalisé. Un fichier zip vous envoie à l'esprit comme un format portable simple, ou vous pouvez rouler votre propre.


1 commentaires

Eh bien, je veux un fichier maître que je peux convertir en d'autres formats de cinéma. Ce fichier maître doit donc être la plus haute qualité possible. Alors Huffyuv sonne bien. Mais il doit rester à 1920x1080 et Huffyuv ne semble pas supporter cela. À propos de la transparence, je m'attendais déjà à ce que cela ne soit pas possible, donc aucun problème là-bas. La taille ne sera pas un problème car le fichier maître est stocké sur mon système qui dispose d'un espace disque To gratuit.



12
votes

Si vous êtes sous Windows, vous pouvez également consulter VirtualDub. http://www.virtualdub.org/

Il peut rendre Avis de BMPS, PNGS, etc.


3 commentaires

Eh bien, c'est un soutien 64-bits. :-) Téléchargement? Vérifier! Installer? Vérifier! Fonctionnement? Vérifier! La conversion a réussi? OUI! Et avec code source disponible, donc la solution parfaite. :-)


Je seconde cela; Cet outil est excellent pour rendre n'importe quel ensemble d'images dans une vidéo. Installez FFDShow, puis vous avez accès au codeur H.264 et d'autres qui fonctionneront de bonne qualité pour un débit élevé.


Je ne pouvais pas utiliser ce programme pour lire un dossier de 5000 images et créer une vidéo !!



2
votes

Vous pouvez faire ce que vous voulez avec Mencoder:

Voici un lien de cette documentation: Encodage de plusieurs fichiers d'image d'entrée (JPEG, PNG, TGA , etc.)

À propos de la transparence: je ne pense pas qu'il y ait un codec vidéo qui prend en charge Transparenct, vous n'avez donc pas de chance ici ...


2 commentaires

Je suis déjà très heureux avec VirtualHub. :-) Mencoder a l'air bien aussi, mais le besoin de cygwin qui ne me rend pas heureux. Et enfin, Mencoder ne prend pas en charge les fenêtres de 64 bits. VirtualHub fait, donc VirtualHub fait une meilleure utilisation de mes ressources. Pourtant, ça ressemble à une bonne option.


Mencoder peut être compilé pour des fenêtres indigènes avec Mingw, aucun cygwin n'est nécessaire. Vous pouvez trouver Mplayer / Mencoder Windows Binaires ici oss.netfarm.it/mplayer-win32.php.



1
votes

ou - si vous êtes sous Windows - utilisez simplement la cinéma.

Cela nécessite une perte de bélier et une puissance de traitement, mais est plus intuitive puis VirtualDub et vous permet d'ajouter des effets et des titres simples.


1 commentaires

Oui, je sais que ça ne vous aidera pas pour votre cas ;-). Cela pourrait être utile dans le futre cependant :-).