[C] Video erstellen mit libavformat (Programmieren)

[C] Video erstellen mit libavformat (Programmieren)

Hallo,

diese Frage ist hier vielleicht unpassend, aber das hier ist das einzige Forum, was ich so schnell gefunden habe.
Also hier meine Frage:
Ich möchte ein C-Programm schreiben, mit welchem ich ein neues Video erstellen und dann neue Einzelbilder zu diesem "zupacken" kann, so dass es am Ende ein fertiges Video wird.
So weit ich das herausgefunden gabe eignet sich hierfür ffmpeg mit den Libraries libavcodec und libavformat. Die Dokumentation, die ich gefunden habe ist auf der Seite http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html,
allerdings scheint mir das nicht ganz das zu sein, was ich suche.
Kann mir da jemand weiterhelfen?
@archur:
Ich habe vor ein paar Jahren so was mal als VB-Code geschrieben (OCX, basierend auf der avifil32.dll), aber die Menge Code sprengt hier den Rahmen ein wenig.
Falls es Dich trotzdem interessiert (obwohl kein C++), nimm doch Kontakt über Mail auf. Das Teil besteht aus Deklarationen, der Klasse für das Verwalten von DIB's und dem OCX (Codec-Auswahl und AVI-Datei + Stream-Handling). Es läßt sich jeder im System installierte Codec auswählen.

Hier noch ein Link:
http://www.codeproject.com/csharp/steganodotnet4.asp?df=100&;forumid=25253&exp=0&select=768576&tid=768576|C#-Beispiel
Danke, aber in C sollte das ganze schon sein. Übrigens auf die Seite, die du als Link geschickt hast, kann ich nicht zugreifen.
Mit jemandem Mail Kontakt aufzunehmen, halte ich nicht für nötig, da das ganze mehr oder weniger eine Freizeit Beschäftigung von mir ist.
@Archur:
Ich hab das OCX grade mal getestet, geht auch mit DivX und VP6. Der Quellcode ist komplett ausdokumentiert und geht auch noch, obwohl er schon fast 10 Jahre alt ist *lol*. Aber wie gesagt, es ist VB.

Obwohl, die Übersetzung nach C++ sollte eigentlich primi sein, da sowieso über 50% des Quellcodes API-Aufrufe sind. Das aufwendigste waren die Deklarationen und die DIB, aber die sollte eigentlich kein Geheimnis sein. Ich poste keine Links mehr auf meine Archive, da ich ständig ohne Einverständs 'fremdverlinkt' wurde. Deshalb der Mail-Vorschlag.
Danke, aber wie gesagt C wäre nicht schlecht.
Und um ehrlich zu sein, da ich kein sonderlich guter "Programmierer" bin, sind Abkürzungen wie OCX oder VP6 Fremdwörter für mich.
VP6 ist ein Video-Codec wie z.B. DivX oder XVid. Als OCX bezeichnet man ActiveX-Steuerelemente, die sich im Prinzip in jede Anwendung einfügen lassen, egal ob VB, C++ usw.

Der User braucht also selbst nichts mehr zu programmieren, sondern nutzt diese komplette Bibliothek über eine definierte Schnittstelle.

Um ohne derartige Hilfen (Bibliotheken) einen AVI- oder MPEG-Stream zu schreiben, benötigst Du schon gewissen Grundkenntnisse. Das OCX wäre eine Variante, sozusagen um einen fertigen Code 'drumrum' zu programmieren. Gewissermaßen als Baustein. Aber versuchs ruhig mal so. Lerning by doing.
Erstmal danke für die Begriffserklärung.

Meinst du mit "versuchs mal so", dass ich das ganze ohne OCX probieren soll?

Aber mal ne andere Frage, ich hab das jetzt so verstanden, dass OCX sowas ähnliches wie die
libavformat und libavcodec.
Ein OCX (das man sich auch selbst Programmieren kann), läßt sich als Zusatzsteuerelement in diversen Programmiersprachen nutzen. Im weitesten Sinne handelt es sich dabei sehr wohl um eine Bibliothek mit einer fest definierten Schnittstelle. Eine einfache Definiton findest Du auch hier.

Man nutzt diese Komponenten z.B., um häufig benötigten Code schnell und einfach in verschiedene Programme einzubinden. Ich gehe zum Beispiel auf Arbeit den Weg, alle zeitkritischen Programmteile als in C++ erstellte Komponenten in VB einzubinden, da dort die Oberflächen und das 'Drumherum' schneller und damit kostengünstiger zu erstellen sind.

Im Übrigen habe ich im OCX letztendlich auch nur wieder auf die Windows-eigenen Bibliotheken zugegriffen. Es ist also gewissermaßen eine Schnittstelle zur Schnittstelle.

Aber ohne Verständnis der ganzen Geschichte dürfte es Dir schwer fallen, eine eigene Konvertierung zu schreiben. Du kannst Dir ja mal im Internet den Quellcode für DVDx suchen, ich habe damit selber vor längerer Zeit rumgespielt. Da ist eigentlich alles komplett vertreten. Aber es ist definitiv nicht einfach und als Einstiegsprojekt denkbar ungeeignet.
Also scheint es doch komplizierter zu sein als ich dachte.
Ich wollte für ein FRaktal Programm halt noch die Möglichkeit Fraktal-Filme aufzunehmen.
Ich kann auch Bilder machen, ich dachte man müsste so ein Bild dann "nurnoch" zu einem Video-Stream hinzufügen.
Genau dafür hatte ich ja das OCX ja mal geschrieben. Man gibt nur den Dateinamen fürs AVI an und schmeißt ein Bild nach dem anderen rein. Alles andere einschließlich Ausgabeoptionen macht dann dieses Teil. Das läßt sich in jedes VB (ab 5) oder C++ reinhängen und ab 10 Zeilen Quellcode ist man fertig mit dem neuen Programm.
Dann dürfte das genau das sein was ich suche.
Vorrausgesetzt, dass das OCX auch für Linux geht.

Wird das eigentlich mit eincompiliert oder ist das ein Programm, das noch zusäthlich benötitgt wird?
Das geht nicht unter Linux, sondern nur unter Windows.

Ich hatte mal früher eine OpenSource-Bibliothek für MPEG's, die lief (auch) unter Linux, aber ich habe meine letzte Linux-Installation vor 2 Jahren gelöscht und finde jetzt die blöde CD mit den alten Bibliotheken nimmer (hab gestern Abend danach gesucht). Ich hab keine Zeit mehr für Linux-Spielereien. Leider. Die Firmen, für die wir arbeiten, stellen auch alles auf Win um. Linux lohnt sich für mich beruflich nicht mehr. Zumindest in den Bereichen, wo wir arbeiten fliegen alle Linux-Systeme raus. Es gibt keine innovativen Branchenlösungen mehr. Nur noch Win - ich hab mich auch umstellen müssen.

[edit]
Mir ist grade noch was eingefallen. Zumindestens weiß ich, wie das Teil hieß. Guckst Du hier: bbMPEG
Du mußt ein wenig scrollen, da gibts auch eine ältere Linux-Source...
Mach dir bitte nicht zu viel Mühe (du brauchst keine CDs für mich zu suchen), ich mache das ganze wie gesagt nur aus Spaß und total unproffesionell.

Ja, bbmpeg scheint soetwas zu sein wie ffmpeg.
Allerdings haben wir uns hier ein wenig "verquatscht" ich suche eigentlich eine Dokumentation zu ffmpeg, die beschreibt wie ich eine neues Video damit erstellen kann.
<a href="http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html";>Die Doku, die ich bisher gefunden habe</a> ist zwar sehr gut, behandelt aber nur das bearbeiten eines bereits vorhandenen Videos.
Ein Vorteil von ffmpeg ist, dass es die Libraries libavcodec und libavformat mitliefert, die das Bearbeiten und (hoffentlich) auch das Erstellen eines Videos ermöglichen. Die beiden Libraries können dann mit eincompiliert werden und die Benutzer des (bereizs erwähnten) <a href="http://tinyfract.berlios.de";>Fraktal Programms</a> (hab mal einen Link zur Website gemacht, falls es dich interressiert womit ich die Videos erstellen kann) brauchen nichts neu zu installieren.
Soweit meine Idee.
Ich bin natürlich auch offen für neue Libraries, aber es sollten schon Libraries sein, die dann beim Compilieren des C (nicht C++) Codes mit eincompiliert werden und später beim ausführen nicht mehr erforderlich sind).
Schade, ich hatte gehofft ich kann wie bei HTML Links mit "a" machen.
Link zur Doku: http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html
Und Link zu dem Fraktal Programm http://tinyfract.berlios.de
Das Teil geht doch nur zum abspielen! Das ist ein Decoder zum Auspacken und dekodieren von Videostreams um sie als Bitmap auf die Platte zu packen. Also genau das Gegenteil von dem, was Du brauchst.

Hier könntest Du vielleicht noch was finden: KLICK

[edit]
Ich hatte nicht alles gelesen. Sorry. Da mache ich Dir wenig Hoffnung. Aber ich hatte mal eine ältere PovRay-Source. Die konnte auch Videos ohne zusätzliche Bibliotheken!
Was heißt die konnte auch Videos ohne zusätzliche Bibliotheken?
Das Programm (PovRay) ist ja mega genial.
Auf jeden Fall einen Download wert!
Vor allem gibt es dazu eine deutsche(!) Dokumentation.
Das ist vielleicht interessant für die Video Erzeugung.
Genau DAS meinte ich ;o)
Logge dich ein um einen Beitrag zu schreiben.