正常FPS中保存Slo-Mo视频

时间:2015-10-07 07:59:54

标签: ios swift frame-rate photosframework slowmotion

我有一段来自Slo-Mo视频的AVMutableComposition。在AVPlayer中,它以正确的速度播放,因为我使用PHVideoRequestOptions.Original从照片中请求了它,并且不包含视频的Slo-Mo部分。然而,输出可变组合物将以完整的FPS输出它,如果FPS过高,会导致Slo-Mo回来。

如何导出帧率为30的视频?是否有特定的文件类型不包含慢动作或其他一些方法?

我发现了两个(坏)解决方案:

  1. AVAssetExportSession设置为AVAssetExportPresetMediumQuality或更低会导致帧速率下降,但质量也会更差。不好。
  2. AVAssetExportSession.videoComposition设置为frameDuration为CMTimeMake(1, 30)的视频合成,但导出视频需要很长时间,这也不好。我不知道是什么导致它花了这么长时间。

1 个答案:

答案 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建议的情况的结界请求。