PHAsset 视频 EXIF 元数据检索

3

目前,我正在提取PHAsset的EXIF元数据,适用于图像,但无法处理视频。

对于图像,以下方法适用:

let imageOptions = PHImageRequestOptions()
imageOptions.isNetworkAccessAllowed = true
imageOptions.isSynchronous = true
imageOptions.version = .current

PHImageManager.default().requestImageDataAndOrientation(for: self.asset!, options: imageOptions) { (data, responseString, orientation, info) in

  if let imageData: Data = data {
   if let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil) {
                        
    let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)! as NSDictionary

   }
 }

})

我需要做哪些修改才能检索视频资产的元数据?

self.asset!.mediaType == .video

更新

在第一个答案后,我尝试学习: https://developer.apple.com/documentation/avfoundation/media_assets_and_metadata/retrieving_media_metadata

到目前为止,我仍然有理解这个概念的问题。我已经尝试过:

let formatsKey = "availableMetadataFormats"

asset.loadValuesAsynchronously(forKeys: [formatsKey]) {
    var error: NSError? = nil
    let status = asset.statusOfValue(forKey: formatsKey, error: &error)
    if status == .loaded {
        for format in asset.availableMetadataFormats {
            let metadata = asset.metadata(forFormat: format)
            print (metadata)
        }
    }
}

我无法从 PHImageManager.default().requestAVAsset 中提取任何内容,结果为空。
我需要的是视频帧率 / 编解码器 / 音频(立体声或单声道)/ 色彩空间。这就是全部。我已经通过以下方式得到了一些进展:
if let videoTrack = asset.tracks(withMediaType: .video).first {
   let videoFormatDescription = videoTrack.formatDescriptions.first as! CMVideoFormatDescription
                            
   print (videoFormatDescription)             

}

CMVideoFormatDescription 中,大多数所需的属性似乎都已经存在,但是目前我无法提取它们。


1
目前,我正在提取PHAsset的EXIF元数据,其是图像,但无法在图像上做到这一点。不太清楚。也许其中一个单词应该是“视频”? - matt
确实。已经更正。 - Gizmodo
1个回答

2

调用 requestAVAsset(forVideo:options:resultHandler:) 方法,现在你有了一个 AVAsset。它有 metadatacommonMetadata 属性,接下来你可以开始操作。


1
文档中有很好的讨论:https://developer.apple.com/documentation/avfoundation/media_assets_and_metadata/retrieving_media_metadata - matt
我尝试利用“元数据”的主要原因是为了获取EXIF小贴士,例如fps、色彩空间、比特率等。从阅读这些链接中,所有这些似乎都分散在各个地方。 - Gizmodo
1
标准的exif并不存在于视频中,就像它存在于照片中一样。因此,API会提供其所拥有的元数据。有各种不同的格式,这就是为什么你需要先学习哪些格式实际上存在,可以通过https://developer.apple.com/documentation/avfoundation/avmetadataformat来了解。正如我所说,文档对此非常详细。 - matt
仍然在尝试完成这个任务时遇到问题。楼主已更新。 - Gizmodo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接