我有一个由Slo-Mo视频制作的AVMutableComposition
。在AVPlayer中,它以正确的速度播放,因为我已经使用PHVideoRequestOptions.Original
从照片中请求了它,其中不包括视频的Slo-Mo部分。然而,导出可变合成将以完整的FPS导出,如果FPS过高,则会导致Slo-Mo返回。
如何导出帧速率为30的视频?有没有一种特定的文件类型不包括慢动作或其他方式
我发现了两个(糟糕的(解决方案:
- 将
AVAssetExportSession
设置为AVAssetExportPresetMediumQuality
或更低将导致帧速率下降,但质量也将更差。不好 - 将
AVAssetExportSession.videoComposition
设置为帧持续时间为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的建议提交了一份关于改善这种情况的附魔请求。