You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升AVAssetExportSession的视频导出保存性能?

优化AVAssetExportSession导出速度的几个关键方向

我来帮你梳理下导出速度慢的核心问题,结合你的代码给出可落地的优化建议——之前做视频编辑类App时也踩过类似的坑,这些调整能大幅提升导出效率:

1. 替换过度消耗性能的导出预设

你当前用的AVAssetExportPresetHighestQuality是性能消耗最大的预设之一,它会强制对视频进行全量重新编码,哪怕原视频的编码格式、分辨率已经符合输出要求。

优化方案:

  • 如果你的叠加层不需要改变原视频的编码/分辨率,直接用AVAssetExportPresetPassthrough——这个预设会直接复用原视频的编码数据,只渲染叠加层部分,速度能提升好几倍
  • 如果必须调整分辨率,选择对应分辨率的具体预设(比如AVAssetExportPreset1920x1080),而不是模糊的“最高质量”

修改代码里的导出Session部分:

if let exportSession = AVAssetExportSession(asset: mutableComposition, presetName: AVAssetExportPresetPassthrough) { // 替换成Passthrough或具体分辨率预设
    self.exportSession = exportSession
    exportSession.outputURL = outputURL
    exportSession.outputFileType = AVFileType.mp4 // 换成mp4兼容性更好,部分场景编码优化更优
    exportSession.shouldOptimizeForNetworkUse = false // 如果不需要立即上传网络,关闭这个优化减少耗时
    exportSession.videoComposition = layerComposition
    exportSession.exportAsynchronously(completionHandler: {
        // 处理导出结果
    })
}

2. 简化视频合成的帧率设置

你代码里强制设置了layerComposition.frameDuration = CMTimeMake(value: 1, timescale: Int32(videoTrack.nominalFrameRate)),如果原视频是可变帧率(VFR),或者这个帧率和原视频的实际帧率不匹配,会导致导出时重新计算每一帧的时间戳,增加额外耗时。

优化方案:
直接复用原视频轨道的最小帧率,避免强制覆盖:

layerComposition.frameDuration = videoTrack.minFrameDuration

3. 优化Core Animation叠加层的渲染性能

AVVideoCompositionCoreAnimationTool的图层渲染是导出耗时的大头,尤其是图层复杂时。检查你的setupLayers()函数,做以下优化:

  • 静态内容预合成:如果是固定的文字/图片叠加层,提前把它们合成一张UIImage,再作为单个CALayer添加,减少图层数量
  • 减少透明图层:尽量给图层设置不透明的背景,避免Alpha通道带来的额外渲染计算
  • 合理使用光栅化:对于静态图层,开启layer.shouldRasterize = true并设置layer.rasterizationScale = UIScreen.main.scale,缓存渲染结果,避免重复计算

4. 简化视频变换计算

你代码里对视频transform的处理有些冗余,多次调整size和transform会让导出时的几何变换计算更复杂。建议:

  • 尽量保持原视频的renderSize,不要随意修改分辨率——缩放视频是非常消耗性能的操作
  • 简化transform的逻辑,只保留必要的旋转/位移,避免多余的缩放计算

5. 检查合成轨道的冗余内容

确认getVideoComposition(asset: vidAsset)函数里没有添加多余的轨道(比如不需要的音频轨道、重复的视频片段),只保留需要编辑的主视频轨道,减少合成的复杂度。


内容的提问来源于stack exchange,提问作者Діма Комар

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:04:44