PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# - Library für das Erstellen und Bearbeiten von Video-Dateien


MartinB
2012-03-08, 00:33:43
Kennt jemand eine gute (open source) Library die es ermöglicht relativ einfach Videos zu erstellen und diese zu Bearbeiten?

Im konkreten Fall geht es darum, dass ich RGB und Tiefenbilder als Bitmap Objekt vorliegen habe (intern, im Programm) und dazu auch jeweils eine Framenummer. Ich möchte nun aus diesen einzelnen Bitmaps ein Video erstellen, in welchem vom Nutzer Anmerkungen an bestimmte stellen gesetzt werden können. Auch soll eine mp3-Datei geladen und als Tonspur des Videos gesetzt werden.

kloffy
2012-03-08, 01:51:17
Schon den FFmpeg C# Wrapper (http://www.ffmpeg-csharp.com/) angeschaut? Ich habe FFmpeg nur kurz in C++ für ein Testprogramm verwendet. Hat damals gut funktioniert...

Edit: Nevermind, ich sehe gerade, dass der Wrapper im Gegensatz zu FFmpeg nicht open source ist.

MartinB
2012-03-08, 11:33:40
Ja, die hatte ich auch schon gefunden. Open Source ist defintiv besser.

Was ich noch gefunden habe ist das hier:
www.codeproject.com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile-Library

Aber bisher habe ich es noch nicht geschafft eine .avi Datei zu erstellen die auch geöffnet werden kann (auch nicht wenn ich es unkomprimiert abspeichere).

Alternativ würde es mir auch schon reichen wenn ich die als Jpeg exportieren Bilder in eine Avi Datei umwandeln könnte mittels einen externen Programmes wie Avidemux oder mencoder. Das ganze muss aber so gelöst sein, dass das Programm nicht extra installiert werden muss sondern direkt im Programmverzeichnis liegen kann. So wie ich das gesehen habe muss z.b. avidemux extra installiert werden.

Monger
2012-03-08, 11:55:01
Muss es Open Source sein, oder reicht auch Freeware?

Guck dir eventuell mal den MS Expression Encoder an. Die API davon sah für mich recht ordentlich aus, ist vollständig Managed, und es gibt Code Beispiele für Live Streaming, Bild in Bild Rendering, Screen Capturing etc.

MartinB
2012-03-08, 14:49:38
Das Ganze wird später in ein Forschungsprojekt meiner Uni integriert werden, daher sollte die Lizenz soetwas auch erlauben. Zwar gibt es auch Open Source Software die unter strengeren Lizenzen steht, aber da ist die Chance wenigstens größer.

Expression Encoder scheint dies leider nicht zu unterstützen:

This technique is called "time-lapse" or "stop-motion" and unfortunately Expression Encoder by itself isn't the right tool to do this. You could use an AVSynth script as a source for Encoder if you want, but other tailored products to do this will just get you better results.

MartinB
2012-03-09, 17:06:06
Ich habs jetz erstmal mit ffmpeg als externen Aufruf geregelt:

Process pr = new Process();
pr.StartInfo.FileName = (@"ffmpeg.exe");
pr.StartInfo.Arguments = @"-r 30 -f image2 -i output\rgb\%d.jpg -vcodec libx264 output\video.avi";
pr.Start();

MartinB
2012-03-10, 16:48:35
So, ich muss nochmal zurückrudern. Ganz so einfach wars nämlich doch nicht.

Das Problem ist das momentan davon ausgegangen wird das jedes Frame im gleichen Abstand berechnet wird, aber teilweise dauert die Berechnung länger als 1/30 Sekunde. Momentan speichern wir die Frames mit einer Framenummer und einem Zeitstempel (Zeit in Millisekunden seit Aufnahmestart) ab.

Hat jemand einen Vorschlag wie man daraus eine Videodatei bauen könnte?

KhanRKerensky
2012-03-13, 10:36:19
Das sollte gehen, wenn du das ganze in einen Matroska Container steckst.

http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge.html#mkvmerge.external_timecode_files