我的应用程序从外部设备接收一系列图像(BitmapImage),速率为30 fps。 我正在使用Aforge.net库来保存.avi文件中收到的流。 我使用以下代码来初始化AVIWriter:
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%)。
所以,我需要更有效的压缩。
Aforge.net支持哪些压缩?我应该使用什么压缩来减少保存文件的权重?
答案 0 :(得分:6)
我怀疑AVIWriter中没有使用帧间压缩(但我可能错了)。 您可以尝试使用Aforge.Video.FFMPEG中的VideoFileWriter:
var writer = new VideoFileWriter();
writer.Open("test.mpg", 320, 240, 30, VideoCodec.Default, 1000);
// add your frame
writer.WriteVideoFrame(frame);
请记住将来自AForge zip的Externals / ffmpeg / bin中的dll放入输出目录。