2009-10-08 2 views
3

Что такое самая простая в использовании технология, которая даст мне доступ к рамкам видео в реальном времени и позволит мне изменить их. Я знаю DirectShow, но модель программирования кажется довольно сложной. Есть ли среда, которая упрощает программирование такого фильтра рамки?Доступ к видео кадру за кадром

ответ

0

Был обнаружен класс под названием AviFile в нескольких пакетах C++ от MS некоторое время назад. Я не уверен, что с этим происходит.

Лучший способ решить эту проблему - использовать DirectShow, если вы придерживаетесь окон.

Формат AVI файл (который хорошо documentent и вы можете найти под Google) немного похож на:

AVIRIFF size speed imgWidth imgHeight frameTotal imgCodec audioCodec frame size 
    FRAME 
    SOUND 
    FRAME 
    SOUND 
4

Вы можете взглянуть на ffmpeg команд и с открытым исходным кодом проект, который использует кодек библиотека.

0

рассмотреть вопрос о создании VLC plug-in

Работает на Linux и Windows, поддерживает видео в реальном времени в режиме реального времени, потоковое из файла, нагрузки кодеки и т. д.

0

наиболее простым является решение проблемы с AVIFile API. Есть много доступных образцов.

5

Дайте мне доступ в реальном времени к рамах Видео-ролик, и позвольте мне изменить их

Вы хотите получить несжатые видеокадры и изменять их до того, как они будут визуализированы? Или вы хотите изменить видеокадры, сохранив их обратно в медиафайле?

Первый из них будет немного легче. Несмотря на то, что DirectShow может показаться сложным сначала, это действительно элегантный дизайн. Я бы настоятельно предложил посмотреть образцы DirectShow.NET. Чтобы получить доступ к кадрам видео, вы просто настраиваете и добавляете фильтр SampleGrabber на график DirectShow, делаете graph.RenderFile (mymediafile, null), и вы получите обратный вызов для каждого фрейма. Вы можете изменить данные пикселя, и он появится на визуализированном видео. Это не должно занимать более 1 страницы кода. У меня есть example source code on using SampleGrabber, но он сделан для веб-камер. Воспроизведение медиа намного проще (graph.RenderFile!).

Если вам нужно записать этот материал в файл, вы бы сделали что-то похожее на то, что описано выше, но вместо использования средства визуализации видео вам нужно будет настроить график для использования видеокодеров и мультиплексоров. Наверное, не для кого-то нового для DirectShow;).

Если вы просто хотите получить фреймы, в Directshow имеется очень простой интерфейс под названием IMediaDet. У меня есть written a simple class, чтобы легко извлечь любые кадры из медиафайла. Он ориентирован на WPF, но вы можете использовать его для работы с прямым GDI.

+0

Я хочу, чтобы получить кадры, изменять их, а затем вынести их на экран. Что касается вашей реализации WPF, есть ли какие-либо успехи в производительности, о которых я должен беспокоиться? – luvieere

+0

Мой класс MediaDetector действительно хорош только для извлечения эскизов из медиа. Для воспроизведения видео не рекомендуется. Пример веб-камеры SampleGrabber, который у меня есть, очень эффективен. Вы получаете обратный вызов, отображающий фактический фреймбуфер, который будет отправлен визуализатору. Может ли использование WPF позволить вам вообще не использовать DShow? WPF вы можете легко создавать композитные вещи поверх видео с помощью MediaElement. –

4

Я понятия не имею, что именно вы пытаетесь достичь, поэтому это может вам не помочь, но если вам просто нужно изменить рамки видео на лету, я бы настоятельно рекомендовал посмотреть на AviSynth. Это видеосервер, который использует язык сценариев для изменения видео. Для него есть SDK, который вы можете использовать для записи двоичных плагинов. Для выполнения различных задач доступно множество плагинов. Пример сценария будет выглядеть следующим образом:

AviSource("C:\video.avi") 
Crop(20,0,-20,0) //Crops 20px from the left and right of video 
BicubicResize(640,480) //Resize to 640x480 using bicubic filter 
# increase the gamma 
Levels(0, 1.2, 255, 0, 255) 

Эти сценарии могут быть затем открыт в медиаплеере или кодировщика, такие как Virtualdub.