Nun, einfache Situation. Ich habe etwa 5000 Frames als PNG-Dateien erstellt, die ich als Animation in einer .NET-Anwendung anzeigen möchte. Jedes Bild hat eine Größe von 1920x1080 und die PNG-Datei verwendet Alphakanäle für (teilweise) Transparenz. Und das wird die Dinge etwas komplizierter machen, weil ich es lieber transparent halten würde. (Aber wenn das nicht möglich ist, füge ich einfach jedem PNG ein Hintergrundbild hinzu.)
Wegen der großen Menge an Bildern würde ich viel Speicher benötigen. Nun, eine 1-TB-Festplatte und ein 12-GB-Quad-Core-Intel-Xeon-System mit Vista 64-Bit lösen diese Speicheranforderungen. Aber solange kein Werkzeug erstellt wird, das 64-Bit unterstützt, wird es wahrscheinlich nach dem Laden von vielleicht 800 der 5000 Bilder ersticken. Also brauche ich ein Werkzeug, das das kann.
Das Filmformat ist nicht so wichtig. Weder ist die Komprimierung, solange die Bildqualität hoch bleibt. (Und es gibt einen Grund, warum ich eine so große Auflösung verwendet habe!) Verlustfreie Komprimierung wäre jedoch vorzuziehen. Mein System ist schnell genug, um den Film danach erneut abzuspielen, also mache ich mir keine Sorgen über die Geschwindigkeit. Die Bildqualität ist hier jedoch der wichtigste Faktor.
Bisher habe ich mir zwei Möglichkeiten ausgedacht: 1) Ich finde ein kostenloses Tool, das mit so vielen Daten umgehen kann. (Kostenlos oder sehr billig.) 2) Ich schreibe selbst ein solches Werkzeug ...
Option 1 ist hier ein bisschen fehl am Platz. Außerdem zucken meine Hände als Softwareingenieur nur um es selbst zu schreiben! In C # mit möglichst keinen Drittanbieter-Bibliotheken. Also meine Frage: - Wo fange ich an, das selbst zu schreiben?
(Falls Sie sich wundern, dieser Film ist eine Animation, in der eine junge Frau durch die Straßen einer Stadt läuft, vorbei an mehreren Schildern, die Eigenschaften eines Produkts erwähnen. Am Ende des Films geht sie zu einem größeren Schild das zeigt den Namen des Produkts selbst. Und es ist eine lange, kontinuierliche Szene, keine Pausen. Und wirklich Spaß zu schaffen! Und etwa 10 GB Bilder ...)FFMPEG ist in der Lage, eine Filmdatei aus einer Reihe von Bilddateien zu erstellen. Dieser Link zu ihrem Handbuch zeigt ein Beispiel:
Was die Erstellung der Filmdatei ohne Bibliotheken von Drittanbietern angeht ... wird das etwas schwieriger. Viele Filmformate sind enorm kompliziert und eine ohne eine vorhandene Bibliothek zu erstellen, wäre ziemlich schmerzhaft (es sei denn, ich habe deine Frage falsch interpretiert und du fragst nicht wirklich nach, ob du den eigentlichen Encoder erstellst)
Wenn ich Ihre Frage nicht falsch interpretiert habe, könnte eine einfache Implementierung eines YUV-basierten Film-Codecs machbar sein. HuffYUV ist mir bewusst, dass das nicht zu herausfordernd sein könnte. p>
Zwei Dinge:
Es gibt ein paar Lösungen, die mir in den Sinn kommen:
Sie interessieren sich nicht für die Größe, aber Sie tun kümmern sich um Qualität. Das erste, was ich mir fragen würde, ist: Ist es wirklich wirklich egal wie groß? Die meisten Videoformate (insbesondere H.264) bieten Ihnen eine hervorragende Qualität bei einer wesentlich geringeren Dateigröße (10x). Sie werden kaum in der Lage sein, den Unterschied zu erkennen. Ja, Ihre Inhalte sind HD, aber HD-Inhalte auf TV oder Blu-ray werden ebenfalls komprimiert (mit H.264 oder VC-1) und es ist gut genug für alle anderen. Also würde ich das ernsthaft als eine Option betrachten, da es den Rest viel einfacher macht.
Wenn Sie möchten, können Sie immer auf ein verlustfreies Videoformat zurückgreifen, z. B. HuffYUV . Dadurch erhalten Sie mindestens eine > Komprimierung, während Sie die Größe Ihrer Videodaten um die Hälfte (oder mehr) verringern.
Wie gesagt, Sie verlieren durch die Verwendung eines kodierten Videoformats die Transparenz. Wenn Sie die Transparenz beibehalten und die Dateigröße immer noch nicht interessiert, warum behalten Sie die PNGs nicht und zeigen sie als sehr schnelle Diashow in Ihrer Anwendung an? Wenn Ihr einziges Problem damit besteht, müssen Sie alle PNGs gleichzeitig in den Speicher laden ... tun Sie das nicht. Lesen Sie ein paar Frames voraus (ein fester Betrag oder so weit der Speicher ausreicht), und sobald Sie einen Frame angezeigt haben, entfernen Sie ihn aus dem Speicher und lesen Sie einen neuen Frame voraus. Auf diese Weise erhalten Sie perfekte Qualität und konstante Speicheranforderungen. Das einzige Problem ist, dass Ihre Festplatte und Ihr Prozessor in der Lage sein müssen, mit der Rate von 30 PNGs pro Sekunde (oder was auch immer Ihre Bildrate ist) Schritt zu halten.
Wenn 5000 einzelne Bilddateien zu unhandlich werden, können Sie sie alle in ein benutzerdefiniertes Dateiformat einfügen. Eine ZIP-Datei kommt Ihnen als einfaches tragbares Format in den Sinn, oder Sie können Ihre eigenen rollen.
Sie können mit mencoder tun, was Sie wollen:
Hier ist ein Link zu dieser Dokumentation: Kodierung von mehreren Bilddateien (JPEG, PNG, TGA, usw.)
Zur Transparenz: Ich glaube nicht, dass es einen Video-Codec gibt, der transparenct unterstützt, also haben Sie hier kein Glück ...