ios - 以正常 FPS 保存慢动作视频

标签 ios swift frame-rate photosframework slowmotion

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

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

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

  1. AVAssetExportSession 设置为 AVAssetExportPresetMediumQuality 或更低会导致帧速率下降,但质量也会变差。不好。
  2. 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/

相关文章:

c# - C# 中的 Gif 动画文件的帧率低于应有的帧率

java - 系统时间的 Fps 算法错误

c++ - 为什么 printf 函数族关心语言环境?

android - 用户正确登录后在应用程序中使用 JWT

ios - 让一个按钮减去我按下的下一个按钮的值。 swift

json - 单元测试 JSON Swift

ios - 如何跳转到详细 View 的下一行?

ios - 如何更改 Google Maps iOS sdk 1.7 中的用户位置点颜色?

swift - 为什么在 Swift 中只使用类协议(protocol)?

three.js - 为什么在三个js中增加对象的比例时fps会下降