2010-08-26 5 views
9

Ich möchte den ersten Frame des hochgeladenen Videos extrahieren und als Bilddatei speichern.
Mögliche Videoformate sind mpeg, avi und wmv.Wie kann ich den ersten Frame eines Videos als Bild speichern?

Eine weitere Sache zu prüfen ist, dass wir eine ASP.NET-Website erstellen.

+2

Der erste Frame von jedem Video ist oft schwarz. Sie sollten besser mehrere Frames untersuchen und die größte auswählen (Byte-Größe). Dies, ob Sie es glauben oder nicht, ist eine gute Annäherung an das "Interessanteste", besonders in Situationen, in denen Schwarz nicht mehr vorhanden ist. –

Antwort

6

Sie könnten FFMPEG als separaten Prozess (einfachste Art und Weise) verwenden und lassen Sie es für Sie ersten IDR dekodieren. Hier finden Sie eine Klasse FFMPEG, die GetThumbnail() Methode hat, um es Ihnen Adresse der Videodatei übergeben, die Adresse des JPEG-Bildes vorgenommen werden, und die Auflösung, die Sie das Bild sein wollen:

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); 
    } 
} 

Verwendung wie dies:

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

Damit dies funktioniert, Sie ffmpeg.exe in Ordner/utils haben müssen, oder den Code ändern ffmpeg.exe zu lokalisieren.

Es gibt andere Möglichkeiten FFMPEG in .NET, wie .NET-Wrapper zu verwenden, können Sie für sie googeln. Sie machen das gleiche hier, nur besser. Also, wenn FFMPEG Ihre Arbeit erledigt, würde ich empfehlen, .NET Wrapper zu verwenden.

+0

danke ... lass mich überprüfen .net wrapper – CoderHawk

+0

Wie würde man einen Rahmen von irgendwo in der Mitte der Datei bekommen? – Entity

+1

Parameter wie -ss 00: 00: 01.00 – rogerdpack

0

Wahrscheinlich das beste Werkzeug für die programmatisch mit Videos arbeiten, ist FFMpeg. Es hat Unterstützung für viele Formate, sogar WMV. Ich vermute, es gibt sogar eine .net wrapper dafür.

3

Versuchen Argument String-Format wie zu machen:

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

Statt

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

in dem Antwortcode oben zur Verfügung gestellt.

Ich weiß nicht, was der Grund war, aber zweite erwähnte Argument Linie auf meine Maschine nicht funktioniert, während, wenn ich Argument wie der erste Befehl verändert es funktioniert gut.

Verwandte Themen