ios – 从Live Photo中提取视频部分

有没有人想出如何从Live Photo中提取视频部分?我正在开发一个应用程序,将Live Photos转换为GIF,第一步是从Live Photo获取视频文件.它似乎应该是可能的,因为如果你将手机插入Mac,你可以看到单独的图像和视频文件.我在提取过程中碰到了一堵砖墙,我尝试了许多方法,但都失败了.

我做的第一件事就是通过以下方式获取PHAsset,我认为它是Live Photo的视频部分:

if let livePhoto = info["UIImagePickerControllerLivePhoto"] as? PHLivePhoto {
        let assetResources = PHAssetResource.assetResourcesForLivePhoto(livePhoto)
        for assetRes in assetResources {
            if (assetRes.type == .PairedVideo) {
                let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetRes.assetLocalIdentifier],options: nil)
                if let asset = assets.firstObject as? PHAsset {

要将PHAsset转换为AVAsset,我尝试过:

asset.requestContentEditingInputWithOptions(nil,completionHandler: { (contentEditingInput,info) -> Void in

        if let url = contentEditingInput?.fullSizeImageURL {
            let movieUrl = url.absoluteString + ".mov"
            let avAsset = AVURLAsset(URL: NSURL(fileURLWithPath: movieUrl),options: nil)
            debugPrint(avAsset)
            debugPrint(avAsset.duration.value)
        }
    })

我不认为这个有效,因为带有duration.value的调试打印给出0.
我也试过没有添加“.mov”,它仍然无法正常工作.

我也尝试过:

PHImageManager.defaultManager().requestAVAssetForVideo(asset,options: nil,resultHandler: { (avAsset,audioMix,info) -> Void in
        debugPrint(avAsset)
    })

并且debugPrint(avAsset)打印nil,因此它不起作用.

我有点害怕他们可能无法做到,似乎我已经进入了圈子,因为看起来我得到的PHAsset仍然是Live Photo而不是视频.

解决方法

使用PHAssetResourceManager从PHAssetResource获取视频文件.
PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes,toFile: fileURL,completionHandler: 
  {
     // Video file has been written to path specified via fileURL
  }

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...