2008-09-30 113 views
26

我正在尋找實現從輸入視頻中檢索單個幀的功能,因此我可以將其用作縮略圖。如何在.Net中獲得視頻縮略圖?

沿着這些線路的東西應該工作:

// filename examples: "test.avi", "test.dvr-ms" 
// position is from 0 to 100 percent (0.0 to 1.0) 
// returns a bitmap 
byte[] GetVideoThumbnail(string filename, float position) 
{ 
} 

有誰知道如何在.net 3.0做到這一點?

正確的解決方案將是該功能的「最佳」實現。 避免選擇空白幀的獎勵點數。

+0

任何全酸味ce代碼示例? – Kiquenet 2013-11-29 18:36:24

回答

10

我結束了滾動我自己的獨立班(用我描述的單一方法),源可以是viewed hereMedia browser is GPL,但我很高興我爲該文件編寫的代碼爲Public Domain。請記住,它使用directshow.net項目的互操作,因此您必須使用它們清除代碼部分。

該課程不適用於DVR-MS文件,您需要爲這些課程注入直接顯示過濾器。

+0

嗨 - 這真的很有用,謝謝,但是我得到了一些沒有任何實際錯誤的問題。對於WMV文件(不支持),我從IMediaDet.get_OutputStreams()調用中獲得輸出流,但是IMediaDet.WriteBitmapBits()則不執行任何操作。 但是,對於AVI文件,IMediaDet.get_OutputStreams()調用不會返回任何內容,因此該方法只是簡單地返回而不做任何事情。 我已經排除了基本文件I/O問題和權限等(同一個應用程序上傳視頻,並提到也獲得特定格式的輸出流)。 任何指針/建議你可能會很棒! – user369142 2012-11-14 23:33:51

+0

個人我現在看看ffdshow,ms直接顯示界面是如此shakey – 2012-11-15 10:35:21

0

有在www.mitov.com一些庫,可能會有幫助。它是Directshow功能的通用包裝,我認爲其中一個演示顯示瞭如何從視頻文件中獲取幀。

2

1-得到ffmpeg.exe的最新版本:http://ffmpeg.arrozcru.org/builds/

2-提取文件和ffmpeg.exe複製到您的網站

3-使用此代碼:

Process ffmpeg; 

string video; 
string thumb; 

video = Server.MapPath("first.avi"); 
thumb = Server.MapPath("frame.jpg"); 

ffmpeg = new Process(); 

ffmpeg.StartInfo.Arguments = " -i "+video+" -ss 00:00:07 -vframes 1 -f image2 -vcodec mjpeg "+thumb; 
ffmpeg.StartInfo.FileName = Server.MapPath("ffmpeg.exe"); 
ffmpeg.Start();