【问题标题】:Saving Slo-Mo videos in normal FPS以正常 FPS 保存慢动作视频
【发布时间】:2015-10-07 07:59:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios swift frame-rate photosframework slowmotion


    【解决方案1】:

    根据 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 的建议改善这种情况。

    【讨论】:

    • 这对我有用。代码中只有一个小错误:videoComposition = CMTimeMake(1, 30) // Changes FPS to 30应该是videoComposition.frameDuration = CMTimeMake(1, 30)
    • @RuudVisser 感谢您指出!也许可以使某人免于沮丧。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多