我有一段来自Slo-Mo视频的AVMutableComposition
。在AVPlayer中,它以正确的速度播放,因为我使用PHVideoRequestOptions.Original
从照片中请求了它,并且不包含视频的Slo-Mo部分。然而,输出可变组合物将以完整的FPS输出它,如果FPS过高,会导致Slo-Mo回来。
如何导出帧率为30的视频?是否有特定的文件类型不包含慢动作或其他一些方法?
我发现了两个(坏)解决方案:
AVAssetExportSession
设置为AVAssetExportPresetMediumQuality
或更低会导致帧速率下降,但质量也会更差。不好。AVAssetExportSession.videoComposition
设置为frameDuration为CMTimeMake(1, 30)
的视频合成,但导出视频需要很长时间,这也不好。我不知道是什么导致它花了这么长时间。答案 0 :(得分:2)
据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建议的情况的结界请求。