Варианты предсказуемого захвата кадров в приложении .NET - PullRequest
2 голосов
/ 18 декабря 2008

Я работаю в C # и мне нужно захватывать отдельные кадры видеофайлов. Как можно быстрее (быстрее, чем в режиме реального времени), я хочу найти конкретный номер кадра и записать каждый n-й кадр в графический формат файла, например BMP или JPEG. Очень желательно, чтобы захваченный кадр был предсказуемым и повторяемым, то есть не пропускал кадры.

У меня есть некоторый опыт работы с DirectShow, но я не знаю, лучше ли использовать эту технологию для решения этой проблемы в современной среде Windows .NET. В идеале я хотел бы найти библиотеку на основе .NET или COM, чтобы максимально абстрагироваться. У меня нет необходимости отображать видеофайл на экране, и я бы предпочел не иметь пользовательского интерфейса Windows для воспроизведения видео.

У кого-нибудь есть предложения по технологиям или конкретным продуктам? Они должны быть совместимы с видеофайлами на основе MPEG-2 и MPEG-4, включая DivX. Поддержка QuickTime была бы хорошим бонусом.

Ответы [ 3 ]

2 голосов
/ 19 декабря 2008

Я не вижу причины, по которой вам нужно делать это "быстрее, чем в режиме реального времени", поскольку вы считаете, что выполняете какую-то обработку и не отображаете видео.

Я написал нечто подобное, используя DirectShow.Net и .Net 2.0. Использование directshow потребует некоторого предварительного опыта, иначе вам будет очень сложно попробовать.

Вы также можете получить доступ к интерфейсу IMediaDet из окон, чтобы сделать захват кадра. Этот метод проще, но есть определенные ограничения, такие как поддержка MPEG2. Я заметил, что он также не поддерживает "некоторые" FLV. Проверьте образец в CodeProject - FrameGrabber

Поддержка Quicktime будет означать установку QuickTimeAlternative

Я могу опубликовать код, который я написал, используя DirectShow.Net. Дайте мне знать, если вам это нужно (мне нужно украсить это перед публикацией: P).

РЕДАКТИРОВАТЬ: ПРИМЕЧАНИЕ. Что касается вашего «предсказуемого» захвата, здесь нет никаких проблем, поскольку видео не воспроизводится в режиме реального времени, а приостанавливается, поэтому вы можете искать любую точку и затем извлекать кадр.

0 голосов
/ 22 декабря 2008

На случай, если у кого-то еще возникнет такая проблема, другой вариант - это элемент управления ActiveX на основе Delphi, который называется TVideoGrabber . Хотя это не бесплатно, это очень недорого и прекрасно подходит для DirectShow.

TVideoGrabber не подходит для моей проблемы, так как мое приложение не имеет графического интерфейса - оно работает как служба Windows. У меня есть это работает, но создание нескольких элементов управления (которые могут не быть потокобезопасными для запуска) и запуск в фиктивном цикле событий, из .NET, как служба Windows ... ну, есть несколько вещей, которые могут пойти не так Несмотря на то, что я обеспечил управление элементами управления только из потока создания, у меня все еще есть проблемы с параллелизмом. Но это другой вопрос ...:)

0 голосов
/ 18 декабря 2008

Aloha

(Бесплатная) программа Image Grabber II.net делает именно то, что вы описываете. Кажется, я помню, что источник также был опубликован, но не могу найти его сейчас. Требуется .NET Framework.

-Edoode

...