C#:使用forge.net进行视频压缩
我的应用程序以30 fps的速率从外部设备接收一系列图像(BitmapImage)。 我正在使用一个org.net库将收到的流保存在.avi文件中。 我使用以下代码对AVIWriter进行了本地化:C#:使用forge.net进行视频压缩,c#,.net,compression,video-capture,aforge,C#,.net,Compression,Video Capture,Aforge,我的应用程序以30 fps的速率从外部设备接收一系列图像(BitmapImage)。 我正在使用一个org.net库将收到的流保存在.avi文件中。 我使用以下代码对AVIWriter进行了本地化: AVIWriter writer; writer = new AVIWriter("wmv3"); writer.FrameRate = 30; writer.Open("test.avi", 320, 240); 对于接收到的每一帧,我将其添加到视频流中,代码行如下: writer.AddFra
AVIWriter writer;
writer = new AVIWriter("wmv3");
writer.FrameRate = 30;
writer.Open("test.avi", 320, 240);
对于接收到的每一帧,我将其添加到视频流中,代码行如下:
writer.AddFrame(ResizeBitmap(BitmapImage2Bitmap(e.ColorFrame.BitmapImage),320,240));
但是生成的文件太重。(10秒相当于大约3Mb)
我还尝试将writer.Quality
设置为一个较低的级别,但结果似乎是一样的(只减少了5-7%)
所以,我需要一个更有效的压缩
Forge.net支持哪些压缩?为了减少保存文件的重量,我应该使用什么压缩?我怀疑AVIWriter中没有使用帧间压缩(但我可能错了)。 您可以尝试改用arge.Video.FFMPEG中的VideoFileWriter:
var writer = new VideoFileWriter();
writer.Open("test.mpg", 320, 240, 30, VideoCodec.Default, 1000);
// add your frame
writer.WriteVideoFrame(frame);
请记住将Externals/ffmpeg/bin中的DLL从一个RGE zip放入您的输出目录。但不要忘记,如果您使用ffmpeg库的某些部分,使用ffmpeg可能会导致您需要在GPL下释放源代码。有一个版本的AForge仅包含LGPL下可用的版本(较小的GPL不要求您分发您的个人资源)