我有一个由慢动作视频制作的 AVMutableComposition
。在 AVPlayer 中,它以正确的速度播放,因为我已使用 PHVideoRequestOptions.Original
从照片中请求它,其中不包括视频的 Slo-Mo 部分。但是,导出可变合成将以完整 FPS 导出它,如果 FPS 太高,这会导致 Slo-Mo 返回。
如何导出帧率为 30 的视频?是否有特定文件类型不包含慢动作或其他一些方式来执行此操作?
我发现了两个(不好的)解决方案:
- 将
AVAssetExportSession
设置为AVAssetExportPresetMediumQuality
或更低会导致帧速率下降,但质量也会变差。不好。 - 将
AVAssetExportSession.videoComposition
设置为 frameDuration 为CMTimeMake(1, 30)
的视频合成,但用它导出视频需要很长时间,这不是也好。我不知道是什么原因导致它花了这么长时间。
最佳答案
根据 Apple DTS,目前最好的解决方案是我提到的第 2 种解决方案。这里有更多详细信息:
let videoComposition = AVMutableVideoComposition(propertiesOfAsset: mutableComposition)
videoComposition.frameDuration = CMTimeMake(1, 30) // Changes FPS to 30
let exportSession = AVAssetExportSession(asset: mutableComposition, presetName: AVAssetExportPresetHighestQuality)
exportSession?.videoComposition = videoComposition
exportSession?.outputURL = temporaryURL
exportSession?.outputFileType = AVFileTypeMPEG4
exportSession?.exportAsynchronouslyWithCompletionHandler({
// Handling the export
})
使用视频合成导出似乎比没有它时花费更多的时间,但我已经按照 Apple DTS 的建议提交了关于改善这种情况的附魔请求。
关于ios - 以正常 FPS 保存慢动作视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986803/