Это невозможно, если не добавить некоторые ограничения на ваш входной 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();
Существует также VfW (который входит в Windows, по умолчанию) обертка в AForge, если вы хотите сохранить его простым, без привлечения внешних библиотек. Вам все равно понадобятся совместимые с VfW кодеки (некоторые из них включены в Windows по умолчанию, большинство из них не являются).
Для тех, кому нужна простая библиотека для работы с видео .avi, я использовал AForge. Он бесплатный и не увеличивает размер программы. Я использовал библиотеку VFW, так как мне не удалось заставить FFMPEG работать, но очень просто извлечь фреймы при условии, что у машины есть соответствующий кодек для конкретного видео .avi. – talkanat