gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:34 27 4
gpt4 key购买 nike

我正在开发一个应用程序,它使用 AVMutableVideoCompositionAVVideoCompositionCoreAnimationTool(通过 AVExportSession 导出)在 2-10 秒的视频中导出 CALayer 动画.

每个合成中可以有数百个 CAShapeLayer,每个都有动画。

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 一起移动。

如果您有很多内容,您可以将其转换为 OpenGL/Metal 并使用 GPU 通过 texture caches 将其直接快速渲染到您的视频帧上。 .

我打赌 GPU 不会出汗,所以您会受到视频编码器速度的限制。我不确定那是什么 - 4s 曾经做 3 倍实时,只能改进。

要执行我的建议,需要进行大量操作。您可以使用 GPUImage 快速开始 OpenGL 路径。 ,尽管 Metal 版本会非常酷。

关于ios - 具有大量子层/动画的 AVVideoCompositionCoreAnimationTool 导出性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com