iOS: видео в виде текстуры GL с альфа-прозрачностью

Я пытаюсь найти лучший подход для отображения видео на текстуре GL при сохранении прозрачности альфа-канала.

Информация о видео в виде текстуры GL находится здесь: Is возможно ли использовать видео в качестве текстуры для GL в iOS? и iOS4: как использовать видеофайл в качестве текстуры OpenGL?.

Использование ffmpeg для обеспечения альфа-прозрачности, но не для магазинов приложений, находится здесь: iPhone: отображать полупрозрачное видео поверх UIView?

Видеоисточник будет сниматься перед зеленым экраном для хроматической кодировки. Видео можно оставить нетронутым, чтобы оставить зеленый экран, или обработать его в наборе для редактирования видео и экспортировать в Quicktime Animation или Apple Pro Res 4444 с Alpha.

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

  1. Обработка порогового значения видео в реальном времени, поиск зеленого цвета для удаления
  2. Выясните, как использовать вышеупомянутые кодеки Quicktime для сохранения альфа-канала.
  3. Смешивание двух видео вместе: 1) Основное видео с RGB 2) отдельное видео с альфа-маской

Я хотел бы узнать ваши мысли о лучшем подходе для iOS и OpenGL ES 2.0.

Спасибо.


person ryatkins    schedule 04.07.2011    source источник
comment
Для меня совершенно непонятно, чем ты хочешь заниматься. Как передать видео в приложение?   -  person tomk    schedule 06.12.2011
comment
Скорее всего, хранится локально в основном пакете   -  person ryatkins    schedule 19.12.2011
comment
Вы всегда можете изменить цвет в шейдере, это довольно простая операция.   -  person the swine    schedule 23.01.2012
comment
Значит, это будет цветовое наложение в реальном времени на каждом кадре видео? Убьет ли это производительность?   -  person ryatkins    schedule 24.01.2012
comment
Не обязательно. Здесь есть элементарная реализация шейдера хромакея: Assembla.com/ code / ffgl / subversion / nodes / trunk / Source / Однако аккуратный Chroma Keying требует гораздо большего, чем простая установка пороговых значений. Вам гораздо лучше предварительно обработать видео и выполнить рендеринг с альфа-каналом (ваш вариант 2).   -  person appas    schedule 27.01.2012
comment
Насколько я видел, видеокодек на iOS не поддерживает альфа-канал.   -  person ryatkins    schedule 27.01.2012
comment
@ryatkins, вы выбрали какой-либо из вышеперечисленных вариантов? Я только начал исследовать это и наткнулся на ваш вопрос, который я задаю себе на данном этапе. Любая помощь будет очень высоко ценится.   -  person Rog    schedule 05.06.2012
comment
Для подробного сравнения подхода с использованием зеленого экрана и полного альфа-канала, пожалуйста, ознакомьтесь с моим сообщением в блоге на эту тему: modejong.com/blog/post18_green_screen   -  person MoDJ    schedule 12.01.2016


Ответы (3)


Самый простой способ сделать хроматический ключ для простого смешивания фильма и другой сцены - использовать GPUImageChromaKeyBlendFilter из моего GPUImage рамки. Вы можете предоставить источник фильма как GPUImageMovie, а затем смешать его с фоновым содержимым. Фильтр цветового ключа позволяет вам указать цвет, близость к этому цвету и плавность смешивания для использования в операции замены. Все это ускоряется графическим процессором с помощью настроенных шейдеров.

В качестве источников можно использовать изображения, фильмы и живые камеры, но если вы хотите визуализировать это с содержимым OpenGL ES за своим фильмом, я бы рекомендовал визуализировать содержимое OpenGL ES в FBO с текстурой и передавать эту текстуру через GPUImageTextureInput.

Вы могли бы использовать это для вывода текстуры, содержащей кадры вашего фильма, с заменой ключевого цвета постоянным цветом с альфа-каналом 0. Эта текстура может быть извлечена с помощью GPUImageTextureOutput для последующего использования в вашей сцене OpenGL ES.

person Brad Larson    schedule 30.04.2012

Apple показала образец приложения на WWDC в 2011 году под названием ChromaKey, которое показывает, как обрабатывать кадры видео, переданные в текстуру OpenGL, обработанные и, возможно, записанные в видеофайл.

(Очень производительно)

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

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

Не должно быть так сложно переписать пример приложения Chromakey, чтобы использовать видеофайл в качестве ввода вместо канала камеры, и довольно легко отключить код chormakey.

Вам нужно будет изменить настройку видеовхода, чтобы ожидать данных RGBA вместо RGB или Y / UV. Пример приложения настроен на использование RGB, но я видел другие примеры приложений от Apple, которые вместо этого используют Y / UV.

person Duncan C    schedule 29.04.2012

Взгляните на бесплатное приложение APNG в магазине приложений. Он показывает, как анимированный PNG (.apng) может быть отображен непосредственно в представлении iOS. Ключевым моментом является то, что APNG поддерживает альфа-канал в формате файла, поэтому вам не нужно возиться с хитростями цветности, которые на самом деле не будут работать для всего вашего видеоконтента. Этот подход более эффективен, чем использование нескольких слоев или приемов цветности, поскольку не требуется повторный раунд обработки каждый раз, когда текстура отображается в цикле.

Если вы хотите взглянуть на небольшой пример проекта xcode, который отображает анимацию альфа-канала на стороне вращающегося куба с OpenGL ES2, его можно найти по адресу Загрузить текстуры OpenGL с альфа-каналом на iOS. В примере кода показан простой вызов функции glTexImage2D (), которая загружает текстуру на видеокарту один раз для каждого обратного вызова ссылки отображения.

person MoDJ    schedule 29.07.2012