首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现场照片中提取视频部分

从现场照片中提取视频部分
EN

Stack Overflow用户
提问于 2015-10-06 00:37:06
回答 3查看 6.3K关注 0票数 8

有人知道如何从现场照片中提取视频部分吗?我正在开发一个将Live转换成GIF的应用程序,第一步是从Live获取视频文件。这似乎是可能的,因为如果你把手机插到Mac电脑上,你可以看到单独的图像和视频文件。我在开采过程中碰到了砖墙,我尝试过很多方法,但都失败了。

我做的第一件事是通过以下操作为我认为是Live的视频部分获得一个PHAsset:

代码语言:javascript
复制
    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,我已经尝试过:

代码语言:javascript
复制
    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“,但它仍然不起作用。

我也试过:

代码语言:javascript
复制
    PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: { (avAsset, audioMix, info) -> Void in
        debugPrint(avAsset)
    })

debugPrint(avAsset)打印为零,这样就不能工作了。

我有点担心他们可能会让我做不到,似乎我在绕圈,因为我得到的PHAsset似乎仍然是一张直播照片,而不是一段视频。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-07 06:39:41

使用PHAssetResourceManagerPHAssetResource获取视频文件。

代码语言:javascript
复制
PHAssetResourceManager.defaultManager().writeDataForAssetResource(assetRes, 
    toFile: fileURL, options: nil, completionHandler: 
  {
     // Video file has been written to path specified via fileURL
  }

注意:在iOS 9.1中引入了Live专用API

票数 16
EN

Stack Overflow用户

发布于 2017-02-06 13:08:29

代码语言:javascript
复制
// 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
}
票数 0
EN

Stack Overflow用户

发布于 2016-10-13 23:55:21

我不小心做了。我有一个名为Goodreader的ios应用程序(可在appstore中使用),它具有类似windows的文件管理器。当导入实时照片时,它会将其保存为一个以.pvt结尾的文件夹,其中包含jpg和mov文件。只有一个警告:当你将照片发送给自己或其他人后,你需要打开即时照片,看看“导入到古德阅读器”选项,而不是照片应用程序。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32959973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档