ken*_*nyc 7 macos objective-c video-processing avfoundation ios
我试图弄清楚如何将多个视频(AVAssets)合成为一个视频,以便每个视频都经过自己的视频合成。但是,我看不到实现这一目标的方法,想知道是否有人有任何想法。
考虑以下:
上图说明了我正在尝试做的事情。我想从四个不同的视频中获取视频轨道并将它们合并到一个视频中,以便它们以类似网格的布局播放。
现在,我可以通过执行以下操作来实现这一目标
创建单个 AVMutableComposition
向可变合成添加四个视频轨道
创建四个应用AVMutableVideoCompositionLayerInstruction适当的实例transform以缩放和平移轨道。
创建一个AVMutableVideoComposition,向其添加图层说明,然后在适当的位置设置该视频合成AVAssetExportSession
虽然这有效,但它并没有让我能够在将每个视频轨道合成到输出剪辑之前对每个视频轨道进行任何自定义效果。例如,在上图中,我想在每个轨道周围添加独特的边框颜色。使用单个视频(因此没有图层说明),然后我可以使用类似 的东西添加边框AVVideoComposition applyingCIFiltersWithHandler,效果很好。但我不能使用它,因为我需要视频合成来设置变换和缩放指令。
(applyingCIFiltersWithHandler似乎没有提供一种方法来访问构成正在渲染的帧的轨道。)
我想我想要的是能够在 a 中进行某种类型的自定义渲染AVMutableVideoCompositionLayerInstruction,但目前唯一可用的选项是转换和不透明度选项。
(请注意,任何解决方案都要求我在渲染每个视频轨道期间访问当前合成时间, 因为我想要渲染的一些“效果”是帧计数器和时间码显示。)
任何帮助、想法或提示将不胜感激。
您需要实现一个实现 AVVideoCompositing 协议的自定义合成器。https://developer.apple.com/reference/avfoundation/avvideocompositing
该协议中的 startRequest 函数接收https://developer.apple.com/reference/avfoundation/avasynchronousvideocompositionrequest,这允许您访问每个轨道的信息https://developer.apple.com/reference/avfoundation/avasynchronousvideocompositionrequest/ 1390379-sourceframe,然后将它们与您自己的自定义指令组合并以您自己的方式合成(将它们放在一起),返回一个最终的单个缓冲区,该缓冲区以您喜欢的方式从轨道合成帧。
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |