Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以普通FPS保存Slo Mo视频_Ios_Swift_Frame Rate_Photosframework_Slowmotion - Fatal编程技术网

Ios 以普通FPS保存Slo Mo视频

Ios 以普通FPS保存Slo Mo视频,ios,swift,frame-rate,photosframework,slowmotion,Ios,Swift,Frame Rate,Photosframework,Slowmotion,我有一个由Slo Mo视频制作的AVMutableComposition。在AVPlayer中,它以正确的速度播放,因为我使用PHVideoRequestOptions.Original从照片中请求它,它不包括视频的Slo Mo部分。但是,导出可变合成将以完整FPS导出它,如果FPS太高,这将导致Slo Mo返回 如何导出帧速率为30的视频?是否有一种特定的文件类型不包括慢动作或其他方式 我发现了两个(糟糕的)解决方案: 将AVAssetExportSession设置为AVAssetExport

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

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

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

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

  • 根据苹果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
            })
    

    使用视频合成导出似乎比不使用视频合成要花费更多的时间,但我已经按照苹果DTS的建议提交了一份关于改善这种情况的魔法请求。

    这对我来说很有效。代码中只有一个小错误:
    videoComposition=CMTimeMake(1,30)//将FPS更改为30
    应该是
    videoComposition.frameDuration=CMTimeMake(1,30)
    @RuudVisser感谢您指出这一点!也许可以让某人免于沮丧。:)