2013-05-20 126 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