2013-07-24 10 views
11

Ich versuche, einen C# -Code zu schreiben, um jeden Frame einer .avi-Datei zu extrahieren und in einem bereitgestellten Verzeichnis zu speichern. Kennen Sie eine geeignete Bibliothek für diesen Zweck?Extrahieren von Frames einer .avi-Datei

Hinweis: Die endgültige Version muss auf allen Systemen funktionieren, unabhängig vom installierten Codec oder der Systemarchitektur. Es darf nicht das Vorhandensein eines anderen Programms (wie MATLAB) auf dem Gerät erfordern.

Vielen Dank im Voraus. Tunc

Antwort

12

Das ist nicht möglich, es sei denn, Sie einige Einschränkungen auf Ihre Eingabe avi hinzufügen Dateien oder haben Kontrolle über Encoder verwendet, um sie zu erstellen. Um ein Bild zu erhalten, müssen Sie es zuerst entschlüsseln. Dafür benötigen Sie einen geeigneten Codec, der mit Ihrer App installiert oder bereitgestellt wird. Und ich bezweifle, dass es möglich ist, jeden Codec da draußen zu berücksichtigen oder sie alle zu installieren/bereitzustellen. Also nein, Sie können einfach keine AVI-Datei öffnen. Sie können jedoch die beliebtesten (oder in Ihrem Kontext gebräuchlichen) Codecs unterstützen.

Der einfachste Weg, es zu tun ist in der Tat mit einem FFMPEG, da es bereits einige der gängigsten Codecs enthält (wenn es Ihnen nichts ausmacht extra 30 + Mb zu Ihrer App hinzugefügt). Wie Wrapper, ich habe AForge Wrapper in der Vergangenheit und es hat mir wirklich gefallen, weil es so einfach ist, mit zu arbeiten. Hier ist ein Beispiel aus seiner docs:

// 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(); 

Es gibt auch eine VfW-Wrapper in AForge (die standardmäßig in Windows enthalten ist), wenn Sie es einfach halten möchten, ohne externe Bibliotheken beteiligt sind. Sie werden immer noch VfW-kompatible Codecs benötigen, die tho (einige von ihnen sind standardmäßig in Windows enthalten, die meisten nicht).

+1

Für diejenigen, die eine einfache Bibliothek benötigen, um auf .avi Videos zu arbeiten, habe ich AForge verwendet. Es ist kostenlos und erhöht nicht die Programmgröße. Ich habe die VFW-Bibliothek benutzt, da ich FFMPEG nicht zum Laufen bringen konnte, aber es ist wirklich einfach, die Frames zu extrahieren, vorausgesetzt, die Maschine hat den richtigen Codec für das spezifische .avi-Video. – talkanat