簡體   English   中英

從Live Photo中提取視頻部分

[英]Extract video portion from 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而不是視頻。

使用PHAssetResourceManagerPHAssetResource獲取視頻文件。

PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes, 
    toFile: fileURL, options: nil, completionHandler: 
  {
     // Video file has been written to path specified via fileURL
  }

注意:iOS 9.1中引入了Live Photo特定API

// suppose you have PHAsset instance (you can get it via [PHAsset fetchAssetsWithOptions:...])

PHAssetResource *videoResource = nil;
NSArray *resourcesArray = [PHAssetResource assetResourcesForAsset:asset];

const NSInteger livePhotoAssetResourcesCount = 2;
const NSInteger videoPartIndex = 1;

if (resourcesArray.count == livePhotoAssetResourcesCount) {
   videoResource = resourcesArray[videoPartIndex];
}

if (videoResource) {
   NSString * const fileURLKey = @"_fileURL";
   NSURL *videoURL = [videoResource valueForKey:fileURLKey];

   // load video url using AVKit or AVFoundation
}

我不小心做了。 我有一個名為Goodreader的ios應用程序(在appstore中可用),它具有類似Windows的文件管理器。 導入實時照片時,它會將其保存為以.pvt結尾的文件夾,其中包含jpg和mov文件。 只有一點需要注意:您需要在將消息應用程序發送給自己或其他人之后打開消息應用程序中的實時照片,以查看“導入到goodreader”選項,而不是從照片應用程序中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM