Можно ли использовать фильтр CIFilter и GPUImage в AVMutableComposition? - PullRequest
3 голосов
/ 07 мая 2020

У меня есть AVMutableComposition с двумя дорожками (по одной для видео и аудио), которые объединяют несколько видео (в виде сегментов: AVCompositionTrackSegment) для воспроизведения. Мне нужно применить фильтры к выбранным видео, а не ко всей композиции (скажем, на 2-м и 4-м сегментах, когда у меня всего 4 сегмента). Например, если пользователь выбирает применить фильтр к видео 2, я применяю этот фильтр для соответствующей продолжительности композиции, используя AVMutableVideoComposition(asset: AVAsset, applyingCIFiltersWithHandler: (AVAsynchronousCIImageFilteringRequest) -> Void). Работает нормально.

Теперь я хочу использовать несколько настраиваемых фильтров, созданных с использованием библиотеки GPUImage. Итак, мой вопрос: есть ли у GPUImage API для применения фильтров к выбранному сегменту или для определенной c продолжительности AVMutableComposition? Так что я могу использовать и CIFilter для встроенных, и GPUImage для пользовательских фильтров.

1 Ответ

1 голос
/ 11 мая 2020

Да, именно здесь вы можете использовать AVVideoCompositing. В видеокомпозиции вы можете использовать настраиваемый композитор, где вы можете определить каждую дорожку как идентификатор дорожки, а затем с помощью этого trackId вы получите frameBuffer, и вы можете делать что угодно с этим буфером кадра, как вы можете использовать gpuImage для пользовательских фильтров или вы можете Metal для создания пользовательских фильтров. В этом топе c есть образец проекта, сделанный инженерами Apple, вы можете его увидеть. Ссылки для справки: https://developer.apple.com/documentation/avfoundation/avvideocompositing?language=objc https://github.com/ElfSundae/AVDemo/tree/master/AVCustomEdit

...