PHAsset 视频 EXIF 元数据检索

Posted

技术标签:

【中文标题】PHAsset 视频 EXIF 元数据检索【英文标题】:PHAsset video EXIF metadata retrieval 【发布时间】:2021-02-23 00:09:30 【问题描述】:

目前,我正在为 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 中的任何内容,结果为空。

我需要的是视频 fps/编解码器/声音(立体声或单声道)/色彩空间。这就对了。我能够到达某个地方:

if let videoTrack = asset.tracks(withMediaType: .video).first 
   let videoFormatDescription = videoTrack.formatDescriptions.first as! CMVideoFormatDescription
                            
   print (videoFormatDescription)             


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

【问题讨论】:

“目前,我正在为 PHAsset 提取图像的 EXIF 元数据,但对图像不满意”不清楚。其中一个词应该是“视频”吗? 确实如此。已更正。 【参考方案1】:

致电requestAVAsset(forVideo:options:resultHandler:)。现在你有一个 AVAsset。它具有 metadatacommonMetadata 属性,您可以参加比赛。

【讨论】:

文档中有很好的讨论:developer.apple.com/documentation/avfoundation/… 我试图利用“元数据”的主要原因是获取 EXIF 信息,例如 fps、色彩空间、比特率等。通过阅读这些链接,所有这些似乎都遍布各处. 好吧,标准的 exif 并不像照片那样适用于视频。因此,API 为您提供了它拥有的元数据。有多种格式,这就是为什么您首先要了解甚至存在哪些格式,developer.apple.com/documentation/avfoundation/avmetadataformat。正如我所说,文档在这方面做得很好。 在尝试完成此操作时仍然遇到问题。 OP 已更新。

以上是关于PHAsset 视频 EXIF 元数据检索的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PHAsset creationDate 与 exif 元数据不同?

保存后获取与PHAsset相同的NSData

如何检索 PHAsset 的元数据?

从 PHAsset 中提取元数据返回意外的 nil 值

使用 mediaType Video 从 PHAsset 修改元数据失败

PHAsset:使用元数据保存新图像