0

我有一个AVMutableComposition由 Slo-Mo 视频制作的视频。在 AVPlayer 中,它以正确的速度播放,因为我已经从照片中请求它使用PHVideoRequestOptions.Original不包括视频的 Slo-Mo 部分。但是,导出可变合成会以完整的 FPS 导出它,如果 FPS 太高,这会导致 Slo-Mo 回来。

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

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

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

1 回答 1

2

根据 Apple DTS,目前最好的解决方案是我提到的第二个解决方案。这里有更详细的信息:

        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 所建议的那样。

于 2015-10-19T08:13:12.677 回答