0
我跟隨this code獲取視頻中的所有幀。在這個環節中,他正試圖在特定的時間得到一個框架。但我需要獲得所有框架。這裏是我的代碼...Swift - 從視頻中獲取所有幀
var mutableVideoURL = NSURL()
var videoFrames = [UIImage]()
let asset : AVAsset = AVAsset(url: self.mutableVideoURL as URL)
let mutableVideoDuration = CMTimeGetSeconds(asset.duration)
print("-----Mutable video duration = \(mutableVideoDuration)")
let mutableVideoDurationIntValue = Int(mutableVideoDuration)
print("-----Int value of mutable video duration = \(mutableVideoDurationIntValue)")
for index in 0..<mutableVideoDurationIntValue {
self.generateFrames(url: self.mutableVideoURL, fromTime: Float64(index))
}
func generateFrames(url : NSURL, fromTime:Float64) {
let asset: AVAsset = AVAsset(url: url as URL)
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
let time : CMTime = CMTimeMakeWithSeconds(fromTime, 600)
var img: CGImage?
do {
img = try assetImgGenerate.copyCGImage(at:time, actualTime: nil)
} catch {
}
if img != nil {
let frameImg: UIImage = UIImage(cgImage: img!)
UIImageWriteToSavedPhotosAlbum(frameImg, nil, nil, nil)//I saved here to check
videoFrames.append(frameImg)
print("-----Array of video frames *** \(videoFrames)")
} else {
print("error !!!")
}
}
我測試此代碼與2個視頻(的影片長度約5秒和3.45分鐘)。此代碼完美適用於持續時間較短(視頻長度:5秒)和持續時間較長(視頻長度:3.45分鐘)的情況,NSLog顯示來自調試器的消息:由於內存問題而終止 任何幫助將不勝感激。
有什麼錯誤?你可以把'print(error.localizedDescription)'趕進 – WeiJay
來自調試器的消息:由於內存問題而終止:( –
那麼這意味着內存中有太多的幀,所以它會崩潰。本質上,你需要處理和循環以較少內存密集的方式通過圖像。 – Harish