Объединить два видео с маской на одном (или обоих) видео в одно видео (например, круговое изображение одного видео поверх другого видео) - PullRequest
0 голосов
/ 28 февраля 2020

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

Something Like this

Однако кажется, что применение Маска CAShapeLayer выполняется на слое путем установки animationTool в AVMutableVideoComposition . Проблема в том, что, похоже, нет никакого способа настроить несколько слоев видео, где каждый слой содержит только одно видео для animationTool для работы, чтобы маска применялась ко всему или ничего .

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

Я могу настроить инструмент анимации для работы на двух слоях, например:

videoComposition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayers: [firstCALayer, secondCALayer], in: outputLayer)

Но это добавляет оба видео для каждого слоя, вместо одного видео в качестве фона в одном слое и другого видео в качестве видео внутри слоя PIP, у него есть оба видео в фоновом слое и оба видео в слое pip.

Возможно ли это вообще сделать с AVFoundation, или мне нужно будет попытаться выяснить, как это сделать в Metal? Кажется, ключом было бы как-то поместить каждое видео в свой CALayer , но я не смог понять, как это сделать.

...