如何使用多个 AVVideoCompositions 合成视频

How to composite videos using multiple AVVideoCompositions

我正在尝试弄清楚如何将多个视频 (AVAssets) 合成为一个视频,以便每个视频都经过自己的视频合成。但是,我看不到实现此目的的方法,并且想知道是否有人有任何想法。

考虑以下因素:

上图说明了我正在尝试做的事情。我想从四个不同的视频中提取视频轨道并将它们合并成一个视频,以便它们以类似网格的布局播放。

现在,我可以通过执行以下操作来实现此目的

虽然这可行,但它无法让我在将每个视频轨道合成到输出剪辑之前对其进行任何自定义效果。例如,在上图中,我想在每个轨道周围添加一个独特的边框颜色。使用单个视频(因此没有图层说明),然后我可以使用 AVVideoComposition applyingCIFiltersWithHandler 之类的东西添加边框,效果很好。但我不能使用它,因为我需要视频合成来设置变换和缩放指令。

applyingCIFiltersWithHandler 似乎没有提供一种方法来访问构成正在渲染的帧的轨道。)

我想我想要的是能够在 AVMutableVideoCompositionLayerInstruction 中进行某种类型的自定义渲染,但目前唯一可用的选项是变换和不透明选项。

(请注意,任何解决方案都要求我在渲染期间能够访问每个视频轨道的当前合成时间,因为一些 "effects" 我想render 是一个帧计数器和一个时间码显示。)

如有任何帮助、想法或提示,我们将不胜感激。

您需要实现一个实现 AVVideoCompositing 协议的自定义合成器。 https://developer.apple.com/reference/avfoundation/avvideocompositing

该协议中的 startRequest 函数接收一个 https://developer.apple.com/reference/avfoundation/avasynchronousvideocompositionrequest and this allows you to access the information from each track https://developer.apple.com/reference/avfoundation/avasynchronousvideocompositionrequest/1390379-sourceframe,然后将它们与您自己的自定义指令组合并以您自己的方式组合(将它们放在一起),返回一个最终的单个缓冲区,该缓冲区的帧由以您喜欢的方式播放曲目。