我正在嘗試編寫一個C#代碼來提取.avi文件的每個幀並將其保存到提供的目錄中。你知道有什麼合適的圖書館用於這種目的嗎?提取.avi文件的幀
注意:無論安裝的編解碼器或系統架構如何,最終版本都必須適用於所有系統。它不能要求機器上存在另一個程序(如MATLAB)。
在此先感謝。 Tunc
我正在嘗試編寫一個C#代碼來提取.avi文件的每個幀並將其保存到提供的目錄中。你知道有什麼合適的圖書館用於這種目的嗎?提取.avi文件的幀
注意:無論安裝的編解碼器或系統架構如何,最終版本都必須適用於所有系統。它不能要求機器上存在另一個程序(如MATLAB)。
在此先感謝。 Tunc
這是不可能的,除非你添加一些限制你的輸入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中,大部分不是)。
你可以看一下FFmpeg的:http://www.ffmpeg.org/
一些C#的相關信息:Using FFmpeg in .net?
對於那些需要簡單的庫來處理.avi視頻的人,我已經使用了AForge。它是免費的,它不會增加程序的大小。由於我無法使FFMPEG工作,因此我使用了VFW庫,但只要機器具有特定.avi視頻的正確編解碼器,就可以很容易地提取幀。 – talkanat