ビデオからすべてのフレームを取得するには私はthis codeに従っています。このリンクでは、特定の時間にフレームを取得しようとしています。しかし、私はすべてのフレームを取得する必要があります。ここに私のコードです...スウィフト - ビデオからすべてのフレームを取得
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)をcatchに入れることができます – WeiJay
デバッガからのメッセージ:メモリの問題により終了しました:( –
メモリにフレームが多すぎるため、クラッシュすることになります。より少ないメモリ集約的な方法で画像を通す。 – Harish