bounty将在17小时后到期。回答此问题可获得+200声望奖励。SwiftiSwift正在寻找典型答案:
答案应包括应用CIFilter的视频与快速出口和良好的质量
即使我不应用任何过滤器,AVAssetExportSession exportAsynchronously的性能也非常非常差。导出一个26秒的视频需要10多秒左右的时间。我该怎么弥补?
let avPlayerItem = AVPlayerItem(asset: video)
avVideoComposition = AVVideoComposition(asset: avPlayerItem.asset, applyingCIFiltersWithHandler: { request in
request.finish(with: request.sourceImage, context: nil)
})
avPlayerItem.videoComposition = avVideoComposition
// -----------
func exportFilterVideo(videoComposition:AVVideoComposition , completion: @escaping
(_ outputURL : NSURL?) -> ()) {
let exportSession = AVAssetExportSession(asset: self, presetName: AVAssetExportPresetHighestQuality)!
let croppedOutputFileUrl = URL( fileURLWithPath: NSTemporaryDirectory() + NSUUID().uuidString + ".mov")
exportSession.outputURL = croppedOutputFileUrl
exportSession.outputFileType = AVFileType.mov
exportSession.videoComposition = videoComposition
exportSession.exportAsynchronously(completionHandler: {
guard exportSession.status != .failed else {
completion(nil)
return
}
if exportSession.status == .completed {
DispatchQueue.main.async(execute: {
completion(croppedOutputFileUrl as NSURL)
})
}
else {
completion(nil)
}
})
}
即使我使用AVAssetExportPresetLowQuality
也没有帮助!
1条答案
按热度按时间8fsztsew1#
第一种解决方案:
如果您使用AVAssetExportPresetMediumQuality和AVAssetExportPresetLowQuality尝试了exportSession,但没有帮助!则考虑AVAssetExportPresetHighestQuality
A preset to export a high-quality movie file.
然后尝试将videoComposition设置为nil,如果您不需要应用任何滤镜,则会导致videoComposition中所述的
视频合成:
一个可选对象,提供有关如何合成视频帧的说明。
默认值为nil。
尝试使用**.mp4视频编码格式,因为它可能比.mov**性能更好
如果你需要你的视频优化网络使用然后尝试这个
但请注意,导出会话可能需要更长的时间!
第二种解决方案:
我经历了同样的问题,而前一段时间,我最终解决了这个问题,首先压缩视频,然后应用更改,以提高整个程序的速度。
我使用了以下库
LightCompressor_iOS
LightCompressor_example
这是一个示例代码
视频编辑器iOS应用(仅供参考)
您可以从以下项目中获取并运行该应用程序,因为它是一个iOS应用程序,用于将过滤器,贴纸和图像应用于视频,以便您可以识别它在设备上的表现。OptiVideoEditor-for-iOS
我想你会有兴趣阅读的代码在下面的链接中
OptiVideoEditor