Ответ 1
Это невозможно, если вы не добавите каких-либо ограничений на ваши входные AVI файлы или не сможете управлять кодер, используемым для их создания. Чтобы получить изображение, вам придется сначала его декодировать, и для этого вам понадобится соответствующий кодек, установленный или развернутый с вашим приложением. И я сомневаюсь, что его можно учесть для каждого кодека или установить/развернуть их все. Нет, вы не сможете открыть какой-либо файл avi. Тем не менее, вы можете поддерживать самые популярные (или распространенные в вашем контексте) кодеки.
Самый простой способ сделать это - действительно использовать FFMPEG, так как его alredy включает в себя некоторые из наиболее распространенных кодеков (если вы не возражаете против добавления 30 + МБ к вашему приложению). Что касается оберток, я использовал AForge обертку в прошлом и очень понравился, из-за того, насколько просто работать. Вот пример из его документов:
// 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( );
В AForge также есть оболочка VfW (которая включена в Windows по умолчанию), если вы хотите сохранить ее простой без привлечения внешних библиотек. Вам все равно понадобятся совместимые с VfW кодеки (некоторые из них включены в Windows по умолчанию, большинство из них не являются).