Рендеринг видео альфа-канала поверх фона (AVFoundation, Swift) - PullRequest
0 голосов
/ 21 декабря 2018

Недавно я следовал этому учебнику, который научил меня, как воспроизводить видео с альфа-каналом в iOS.Это прекрасно работает для построения AVPlayer поверх чего-то вроде UIImageView, что позволяет мне сделать так, чтобы мое видео (с удаленным альфа-каналом) воспроизводилось поверх изображения.

Используя этот подход, мне теперь нужно найти способ сделать это при рендеринге / сохранении видео на устройство пользователя.Это мой код для генерации альфа-видео, которое воспроизводится в AVPlayer;

let videoSize = CGSize(width: playerItem.presentationSize.width, height: playerItem.presentationSize.height / 2.0)

let composition = AVMutableVideoComposition(asset: playerItem.asset, applyingCIFiltersWithHandler: { request in
   let sourceRect = CGRect(origin: .zero, size: videoSize)
   let alphaRect = sourceRect.offsetBy(dx: 0, dy: sourceRect.height)
   let filter = AlphaFrameFilter()
   filter.inputImage = request.sourceImage.cropped(to: alphaRect)
                .transformed(by: CGAffineTransform(translationX: 0, y: -sourceRect.height))
   filter.maskImage = request.sourceImage.cropped(to: sourceRect)
   return request.finish(with: filter.outputImage!, context: nil)

(Это было немного усечено для простоты, но я могу подтвердить, что этот подход правильно возвращает AVVideoComposition, который я могуВоспроизведение в AVPlayer.

Я понимаю, что могу использовать AVVideoComposition с AVExportSession, но это позволяет мне воспроизводить альфа-видео только на черном фоне (а не на изображении или видео,как мне нужно).

Есть ли способ наложить теперь уже удаленный фоновый альфа-канал поверх другого видео и обработать его?

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