Questo non è possibile, a meno che non si aggiungono alcune restrizioni al avi di ingresso file o avere il controllo su codificatore utilizzato per crearli. Per ottenere un'immagine devi prima decodificarla, e per questo avrai bisogno di un codec appropriato installato o distribuito con la tua app. E dubito che sia possibile tenere conto di ogni codec là fuori o installarlo/distribuirli tutti. Quindi no, non sarai in grado di aprire un qualsiasi file avi. Puoi, tuttavia, supportare i codec più popolari (o comuni nel tuo contesto).
Il modo più semplice per farlo è utilizzare FFMPEG, poiché include alcuni dei codec più comuni (se non ti dispiace aggiungere 30 + Mb aggiuntivi alla tua app). Per quanto riguarda i wrapper, ho usato il wrapper AForge in passato e mi è piaciuto molto, a causa di quanto sia semplice lavorare con. Ecco un esempio dalla sua documentazione:
// 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();
C'è anche un VfW (che è incluso in Windows per impostazione predefinita) involucro in AForge, se si vuole mantenere le cose semplici senza coinvolgere librerie esterne. Avrai comunque bisogno di codec VfW compatibili installati (alcuni sono inclusi in Windows per impostazione predefinita, la maggior parte non lo sono).
fonte
2013-07-24 06:10:23
Per quelli che richiedono una semplice libreria per lavorare su video .avi, ho usato AForge. È gratuito e non aumenta molto le dimensioni del programma. Ho usato la libreria VFW poiché non ero in grado di far funzionare FFMPEG, ma è davvero facile estrarre i frame a condizione che la macchina abbia il codec corretto per il video .avi specifico. – talkanat