2013-07-24 116 views
11

我正在嘗試編寫一個C#代碼來提取.avi文件的每個幀並將其保存到提供的目錄中。你知道有什麼合適的圖書館用於這種目的嗎?提取.avi文件的幀

注意:無論安裝的編解碼器或系統架構如何,最終版本都必須適用於所有系統。它不能要求機器上存在另一個程序(如MATLAB)。

在此先感謝。 Tunc

回答

12

這是不可能的,除非你添加一些限制你的輸入AVI文件或控制用於創建它們的編碼器。要獲取圖像,您必須先解碼圖像,爲此,您需要安裝適當的編解碼器或與您的應用程序一起部署。我懷疑它可能會考慮到每個編解碼器或安裝/部署它們。所以不,你將無法打開只是任何 avi文件。但是,您可以支持最流行的(或在您的上下文中常用的)編解碼器。

最簡單的方法是使用FFMPEG,因爲它的alredy包含了一些最常用的編解碼器(如果你不介意額外的30 + Mb添加到你的應用程序)。至於包裝,我以前使用AForge包裝,真的很喜歡它,因爲它的工作原理非常簡單。下面是它的文檔的例子:

// create instance of video reader 
VideoFileReader reader = new VideoFileReader(); 
// open video file 
reader.Open("test.avi"); 
// read 100 video frames out of it 
for (int i = 0; i < 100; i++) 
{ 
    Bitmap videoFrame = reader.ReadVideoFrame(); 

    videoFrame.Save(i + ".bmp") 

    // dispose the frame when it is no longer required 
    videoFrame.Dispose(); 
} 
reader.Close(); 

還有一個VFW(這是默認包含在Windows)包裝在AForge,如果你想保持它的簡單不涉及外部庫。您仍然需要安裝與VfW兼容的編碼解碼器(其中一些默認包含在Windows中,大部分不是)。

+1

對於那些需要簡單的庫來處理.avi視頻的人,我已經使用了AForge。它是免費的,它不會增加程序的大小。由於我無法使FFMPEG工作,因此我使用了VFW庫,但只要機器具有特定.avi視頻的正確編解碼器,就可以很容易地提取幀。 – talkanat