2010-08-26 93 views
9

我想提取上傳視頻的第一幀並將其保存爲圖像文件。
可能的視頻格式是mpeg,avi和wmv。如何將視頻的第一幀保存爲圖像?

還有一件事要考慮的是,我們正在創建一個ASP.NET網站。

+2

任何視頻的第一幀通常是黑色的。你會更好地檢查幾個幀並選擇最大的一個(字節大小)。這個信不信由你,是一個很好的近似「最有趣的」,特別是在任何淡出黑色的情況下。 – 2011-01-20 06:42:31

回答

6

你可以使用FFMPEG作爲一個獨立的進程(最簡單的方法),並讓它爲你解碼第一個IDR。在這裏,你有一個具有GetThumbnail()方法的類FFMPEG,它傳遞的視頻文件的地址,要做出的JPEG圖像的地址和分辨率,你想要的形象是:

using System.Diagnostics; 
using System.Threading; 

public class FFMPEG 
{ 
    Process ffmpeg; 

    public void exec(string input, string output, string parametri) 
    { 
     ffmpeg = new Process(); 

     ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 
     ffmpeg.StartInfo.FileName = "utils/ffmpeg.exe"; 
     ffmpeg.StartInfo.UseShellExecute = false; 
     ffmpeg.StartInfo.RedirectStandardOutput = true; 
     ffmpeg.StartInfo.RedirectStandardError = true; 
     ffmpeg.StartInfo.CreateNoWindow = true; 

     ffmpeg.Start(); 
     ffmpeg.WaitForExit(); 
     ffmpeg.Close();  
    } 


    public void GetThumbnail(string video, string jpg, string velicina) 
    { 
     if (velicina == null) velicina = "640x480"; 
     exec(video, jpg, "-s "+velicina); 
    } 
} 

使用像這樣的:

FFMPEG f = new FFMPEG(); 
f.GetThumbnail("videos/myvid.wmv", "images/thumb.jpg", "1200x223"); 

對於這個工作,你必須在文件夾/ utils的ffmpeg.exe,或修改代碼,查找ffmpeg.exe。

還有其他方法可以在.NET中使用FFMPEG,就像.NET包裝器一樣,你可以爲他們使用谷歌。他們基本上在這裏做同樣的事情,只是更好。所以如果FFMPEG完成你的工作,我會推薦使用.NET包裝。

+0

謝謝...讓我檢查.net包裝 – CoderHawk 2010-08-27 04:19:04

+0

如何從文件中間的某處獲取幀? – Entity 2011-06-06 18:44:38

+1

參數像-ss 00:00:01.00 – rogerdpack 2011-09-18 05:05:37

0

可能編程式處理視頻的最佳工具是FFMpeg。它支持多種格式,甚至wmv。我懷疑它甚至有一個.net wrapper

3

儘量讓參數字符串格式,如:

ffmpeg.StartInfo.Arguments =" -i c:\MyPath\MyVideo -vframes 1 c:\MyOutputPath\MyImage%d.jpg" 

而不是

ffmpeg.StartInfo.Arguments = " -i " + input+ (parametri != null? " "+parametri:"")+" "+output; 

在上面提供的答案代碼。

我不知道是什麼原因,但是第二個提到的參數行在我的機器上不起作用,而當我改變了像第一個命令那樣的參數時,它工作正常。

相關問題