2008-12-18 35 views
2

我正在C#中工作,並且需要捕獲視頻文件的單個幀。儘快(比實時更快),我希望尋找一個特定的幀編號,並將每第n幀捕獲成圖形文件格式,如BMP或JPEG。非常希望被捕獲的幀是可預測和可重複的,即不丟幀。.NET應用程序中可預測幀捕獲的選項

我對DirectShow有一些經驗,但不知道在現代Windows .NET環境中這種技術是否最適合這個問題。理想情況下,我想找到一個.NET或基於COM的庫來儘可能多地抽象。我不需要在屏幕上實際顯示視頻文件,實際上不希望有用於視頻播放的Windows用戶界面。

有沒有人有技術或特定產品的建議,看看?他們需要兼容基於MPEG-2和MPEG-4的視頻文件,包括DivX。 QuickTime支持將是一個不錯的獎勵。

回答

2

我不明白爲什麼你需要做的這個「比實時更快」因爲你被認爲是在做某種處理,不顯示任何視頻。

我用DirectShow.Net和.Net 2.0寫了類似的東西。使用directshow需要一些先前的經驗,否則你將很難嘗試。

您還可以從Windows訪問IMediaDet接口來執行幀捕獲。這種方法比較簡單,但有一定的侷限性,如MPEG2支持。我注意到它也不支持「某些」flv。看看在CodeProject - FrameGrabber

支持QuickTime樣本將意味着安裝QuickTimeAlternative

我可以張貼我使用DirectShow.Net編寫的代碼。讓我知道你是否需要它(我需要在發佈之前美化它:P)。

編輯:注意:至於你的「可預測的」捕捉,根本沒有問題,因爲視頻不是實時回放,而是暫停,所以你可以尋找任何點,然後提取幀。

+0

看來DirectShow是贏家。感謝您的鏈接。我需要比實時更快的速度,因爲我希望儘快對視頻中的圖像進行額外的處理,並且幀捕獲是用戶等待的時間的一部分。 :) – Jeremy 2008-12-19 16:16:11

0

阿羅哈

的(免費)計劃圖像採集II.net不正是你的描述。我似乎記得這個源文件也已發佈,但現在找不到。它需要.NET框架。

-Edoode

+0

感謝您的建議,我也找不到源代碼。 – Jeremy 2008-12-19 16:13:34

0

爲了防止其他人出現此類問題,另一個選項是基於Delphi的ActiveX控件,名爲TVideoGrabber。雖然它不是免費的,但它非常便宜,並且很適合用作DirectShow的薄包裝。

TVideoGrabber對我的問題來說是一個尷尬的問題,因爲我的應用程序沒有GUI - 它作爲Windows服務運行。我確實有它的工作,但實例化多個控件(可能不是線程安全的開始),並運行在一個虛假的事件循環,從.NET,作爲一個Windows服務...以及有幾件事情可能會出錯。儘管我確保控件只能在創建線程中操作,但我似乎仍然存在併發問題。但這是另一個問題...... :)

相關問題