Wenn man eine AVI Datei unter C# schreiben möchte, wird man feststellen das es zwar viele Wege gibt, aber keiner dieser Wege führt nach Rom. Jede vorgeschlagende Variante hat meist Abhängigkeiten, welche man nicht haben möchte. So wird bei vielen Varianten FFMPEG als DLL genutzt, bei anderen werden Windows DLLs genutzt, was dazu führt das der Quellcode nicht unabhängig von der Plattform ist. Abhilfe schafft hier die freie unter der MIT-Lizenz lizenzierte Bibliothek SharpAvi. Um eine AVI-Datei zu schreiben sind mit Hilfe der Bibliothek nur einige Zeilen Quelltext nötig:
//AviWriter anlegen AviWriter writer=new AviWriter("test.avi"); writer.FramesPerSecond=25; //Videostream anlegen IAviVideoStream stream=writer.AddVideoStream(); stream.Width=1920; stream.Height=1080; stream.Codec=KnownFourCCs.Codecs.Uncompressed; stream.BitsPerPixel=BitsPerPixel.Bpp24; //Encode für Kompression anlegen //Ohne Encoder wird die Datei unkomprimiert gepsiechert (stream.WriteFrame) var encoder=new MotionJpegVideoEncoderWpf(stream.Width, stream.Height, 100); var encodingStream=new EncodingVideoStreamWrapper(stream, encoder); //Schwarzen Frame anlegen byte[] frameData=new byte[stream.Width*stream.Height*3]; //Frames schreiben for(int i=0;i<25; i++) { encodingStream.WriteFrame(frameData, 0); } //Writer schließen writer.Close();
In diesem Beispiel wird eine AVI Datei mit 25 schwarzen Frames erzeugt, was bei der angegebenen Framerate exakt einer Sekunde entspricht. Zu finden ist SharpAvi auf der offiziellen Webseite. Alternativ kann der Spiegel auf GitHub genutzt werden.