2013-05-20 95 views
3

我的应用程序以30 fps的速率从外部设备接收一系列图像(BitmapImage)。 我正在使用Aforge.net库将收到的流保存在.avi文件中。 我用下面的代码inizializing的AVIWriter:C#:使用aforge.net进行视频压缩

AVIWriter writer; 
writer = new AVIWriter("wmv3"); 
writer.FrameRate = 30; 
writer.Open("test.avi", 320, 240); 

并且对于每个帧接收的I添加它在视频流中,用下面的代码行:

writer.AddFrame(ResizeBitmap(BitmapImage2Bitmap(e.ColorFrame.BitmapImage),320,240)); 

但是所生成的文件过重。 (10秒对应于约3Mb)。

我尝试了也设置低水平writer.Quality,但结果似乎相同(只有5-7%)。

所以,我需要更高效的压缩。

Aforge.net支持哪些压缩?我应该使用什么压缩方式来减少保存的文件的重量?

回答

5

我怀疑在AVIWriter中没有使用帧间压缩(但我可能是错的)。 您可以尝试使用VideoFileWriter从Aforge.Video.FFMPEG代替:

var writer = new VideoFileWriter(); 
writer.Open("test.mpg", 320, 240, 30, VideoCodec.Default, 1000); 
// add your frame 
writer.WriteVideoFrame(frame); 

记得把DLL文件从外部对象/ ffmpeg的/ bin中从AForge压缩到你的输出目录。

+0

不要忘记,如果您使用FFmpeg库的某些部分,使用FFmpeg可能会导致您需要在GPL下发布源代码。有可用的LGorge版本,只有LGPL下可用的版本(较小的GPL不要求您分发您的个人来源) – netniV