прозрачное видео iPhone - PullRequest
       2

прозрачное видео iPhone

2 голосов
/ 15 марта 2012

У меня есть видео, которое было записано на синем экране.

Есть ли способ сделать его прозрачным на устройствах iOS? Я знаю, что могу сделать это с помощью пиксельных шейдеров и openGL, но я боюсь, что процесс декодирования видеокадра / загрузки текстуры openGL и удаления фрагментов с помощью пиксельного шейдера будет слишком медленным.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

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

Пример SimpleVideoFileFilter в рамках показывает, как загрузить фильм, отфильтровать его и закодировать обратно на диск.Изменение этого параметра для выполнения хроматизации дает следующее:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0];
[filter setThresholdSensitivity:0.4];

[movieFile addTarget:filter];

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
[filter addTarget:movieWriter];

[movieWriter startRecording];
[movieFile startProcessing];

[movieWriter setCompletionBlock:^{
    [filter removeTarget:movieWriter];
    [movieWriter finishRecording];
}];

Приведенный выше код будет загружать фильм из ресурсов приложения с именем sample.m4v, подавать его в фильтр хроматических ключей, для которого установлено значение «ключ от чистого»синего цвета с чувствительностью 0,4, прикрепите фоновое изображение, чтобы использовать его для цветовой кодировки, а затем отправьте все это в кодировщик фильмов, который записывает Movie.m4v в каталог приложения /Documents.

Вы можете настроитьпорог и определенный синий оттенок, чтобы соответствовать вашим потребностям, а также заменить входное изображение другим фильмом или другим источником по мере необходимости.Этот процесс также может быть применен к видео в реальном времени с камеры устройства iOS, и вы можете отобразить результаты на экране, если хотите.

На iPhone 4 под управлением iOS 5.0 хроматографическое нажатие занимает 1,8 мс (500+ FPS) для 640x480 кадров видео, 65 мс для 720p кадров (15 FPS).Новые устройства на базе A5 в 6-10 раз быстрее, чем для этих операций, поэтому они могут обрабатывать видео 1080p без проблем.Я использую быстрые кэши текстур в iOS 5.0 для загрузки и извлечения кадров, что ускоряет обработку в этой версии ОС более 4.x.

Единственное предупреждение, которое я имею по этому поводу, это то, что я не совсем понялзвук для записи прямо в кодировке моего фильма, но я сейчас над этим работаю.

2 голосов
/ 15 марта 2012

Если вы хотите визуализировать видео, но установите прозрачные синие пиксели, то единственный эффективный способ сделать это - использовать OpenGL. Это должно быть легко возможно для устройств iOS, декодирование видео выполняется аппаратно, и у меня есть несколько проектов, в которых я передаю видеокадры в OpenGL, используя glTexSubImage2D, работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...