PHAssetChangeRequest 以低分辨率保存

Posted

技术标签:

【中文标题】PHAssetChangeRequest 以低分辨率保存【英文标题】:PHAssetChangeRequest Saving at Low Resolution 【发布时间】:2018-06-09 17:26:00 【问题描述】:

我正在应用程序中捕获实时视频并使用PHAssetChangeRequest 保存它但是,视频以非常低的分辨率保存到相机胶卷。如果我从相机应用程序中拍摄完全相同的视频(同一部手机),它会以更高的分辨率保存到相机胶卷中。

在应用程序中,肖像以 360X480 的分辨率保存,而从相机应用程序拍摄的同一视频以 720X1200 的分辨率保存。

以下是如何从我的应用程序中保存视频的代码。为什么分辨率下降?

phphotoLibrary.shared().performChanges(
        PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: self.sharedManager.videoFileLocalURL)
    , completionHandler:  (saved, error) in
        if error != nil
        
            print ("Asset Saving Error: \(error.debugDescription)")
        

        if saved == true
        
            print ("Asset saved to library")
            let fetchOptions = PHFetchOptions()
            fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
            if let fetchedAsset = PHAsset.fetchAssets(with: .video, options: fetchOptions).lastObject
            
                self.sharedManager.newzInfoInDraft.videoCreateDate = Date()
                self.processVideo(asset: fetchedAsset)
            
            else
            
                print ("Cannot fetch asset from library")
            
        
        else
        
            print ("Asset not saved to library")
        
    )

更新:调用捕捉视频

let recordActionButton = UIAlertAction(title: "Record a video", style: .destructive)
         _ in
            self.imagePickerController.sourceType = .camera
            self.imagePickerController.mediaTypes = [kUTTypeMovie as String]
            self.imagePickerController.delegate = self

            self.present(self.imagePickerController, animated: true, completion: nil)

        

【问题讨论】:

请发布您的 AVCaptureSession sessionPreset 配置 @LeoDabus - 一个没有被使用。我在上面添加了允许视频捕获的相关代码。 @LeoDabus - 你的问题把我引向了一个不同的方向,这已经解决了这个问题。我添加了:self.imagePickerController.videoQuality = .typeHigh 【参考方案1】:

感谢 Leo Dabus 就问题的性质向我提出了方向。解决问题的一行代码如下。不依赖感知的默认值是一个很好的教训......

self.imagePickerController.videoQuality = .typeHigh

【讨论】:

以上是关于PHAssetChangeRequest 以低分辨率保存的主要内容,如果未能解决你的问题,请参考以下文章

PHAssetChangeRequest 以低分辨率保存

图像超分辨-DBPN

PHAssetChangeRequest 失败,除非原始图像方向为横向

Swift:HEIC 图像的 PHAssetChangeRequest 失败

PHAssetChangeRequest 完成后 PHAsset 不反映更改

创建视频资产时,PHAssetChangeRequest 始终返回 nil