有人知道如何从实时照片中提取视频部分吗?我正在开发一个将 Live Photo 转换为 GIF 的应用程序,第一步是从 Live Photo 中获取视频文件。看起来应该是可能的,因为如果您将手机插入 Mac,您可以看到单独的图像和视频文件。我在提取过程中遇到了一堵砖墙,我尝试了很多方法来做到这一点,但都失败了。
我做的第一件事是通过执行以下操作为我认为是 Live Photo 的视频部分的内容获取 PHAsset:
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 似乎仍然是一张实时照片,而不是真正的视频。