Ios AVVideoCompositionCoreAnimationTool具有大量子层/动画的导出性能

Ios AVVideoCompositionCoreAnimationTool具有大量子层/动画的导出性能,ios,core-animation,avfoundation,Ios,Core Animation,Avfoundation,我正在开发一个应用程序,它使用AVMutableVideoComposition和AVVideoCompositionCoreAnimationTool(通过AVExportSession导出)在2-10秒的时间内导出CALayer动画 每个构图中可以有数百个图层,每个图层都会附加动画 let animationLayer = CALayer() animationLayer.frame = CGRectMake(0, 0, size.width, size.height) animationL

我正在开发一个应用程序,它使用
AVMutableVideoComposition
AVVideoCompositionCoreAnimationTool
(通过
AVExportSession
导出)在2-10秒的时间内导出CALayer动画

每个构图中可以有数百个图层,每个图层都会附加动画

let animationLayer = CALayer()
animationLayer.frame = CGRectMake(0, 0, size.width, size.height)
animationLayer.geometryFlipped = true

// Add a ton of CAShapeLayers with CABasicAnimation's to animation Layer

let parentLayer = CALayer()
let videoLayer = CALayer()
parentLayer.frame = CGRectMake(0, 0, size.width, size.height)
videoLayer.frame = CGRectMake(0, 0, size.width, size.height)
parentLayer.addSublayer(videoLayer)
parentLayer.addSublayer(animationLayer)

mainCompositionInst.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, inLayer: parentLayer)

let exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)
exportSession.outputURL = finalUrl
exportSession.outputFileType = AVFileTypeQuickTimeMovie
exportSession.shouldOptimizeForNetworkUse = true
exportSession.videoComposition = mainCompositionInst
exportSession.exportAsynchronouslyWithCompletionHandler(...)
现在,这完全起作用了。但是,当动画数量众多时(导出15-25秒),合成输出可能非常慢。我对加快出口业绩的任何想法都感兴趣

到目前为止,我的一个想法是进行多个合成/导出过程,并在每个过程中添加“合理”数量的动画层。但我有一种感觉,那只会让它变慢

或者,导出大量较小的视频,每个视频包含“合理”数量的动画层,然后在最终导出中将它们组合在一起


还有其他想法吗?缓慢只是生活中的一个事实吗?我很感激你的洞察力!我是AVFoundation的新手

我选择了视频合成路径,不喜欢
AVAssetExportSession
强制执行的恒定帧速率,因此我手动将我的内容呈现到
AVAssetReader
的输出上,并使用
AVAssetWriter
将其编码为mov

如果你有很多内容,你可以把它翻译成OpenGL/Metal,然后使用GPU将它直接渲染到你的视频帧上

我打赌GPU不会让你汗流浃背,所以你会受到视频编码器速度的限制。我不知道那是什么-4s过去实时性是3倍,这只能得到改进


按照我的建议去做,需要做很多事情。通过使用,您可以在OpenGL路径上快速入门,尽管金属版本会非常酷。

您发现了什么?找到任何增强功能吗?不幸的是没有。我似乎是最棒的。。至少对于我的应用来说,恒定帧速率有什么缺点?对于某些片段来说,它是否太低,并且视频质量受损,或者?基本上,恒定帧速率增加了文件的大小和导出时间,但质量没有提高。我正在转换一个视频文件(这是vj视频scratch应用程序的一个导出功能,所以是视频时间线的连续转换),所以1。输入帧速率已经可变(由于照明/曝光)和2。对于慢于实时的情况,许多帧将以恒定的帧速率重复。p、 让速率降得太低会导致播放兼容性问题。很酷,谢谢!我们将用户视频与UIImageView层合并,AVVideoCompositionCoreAnimationTool非常慢。对于提高AVVideoCompositionCoreAnimationTool的性能,您是否有具体的建议?另一个解决方法是只录制UIView的视频,并仅使用AVMutableComposition将该视频与用户视频合并,这应该快得多。您是否知道如果只制作UIView的视频是可能的,这里的问题是:@Crashalot您是否找到了提高AVVideoCompositionCoreAnimationTool性能的解决方案?