iOS: видео как GL-текстура с альфа-прозрачностью - PullRequest
10 голосов
/ 04 июля 2011

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

Информация о видео в качестве текстуры GL находится здесь: Можно ли использовать видео в качестве текстуры для 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

Спасибо.

Ответы [ 3 ]

4 голосов
/ 30 апреля 2012

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

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

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

0 голосов
/ 30 июля 2012

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

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

0 голосов
/ 30 апреля 2012

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

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

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

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

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

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

...