Skip to content

Instantly share code, notes, and snippets.

@christianselig
Created March 20, 2020 16:51
Show Gist options
  • Save christianselig/3aec6df5bd787cb56b023aad08745366 to your computer and use it in GitHub Desktop.
Save christianselig/3aec6df5bd787cb56b023aad08745366 to your computer and use it in GitHub Desktop.
let asset = AVURLAsset(url: url)
let generator = AVAssetImageGenerator(asset: asset)
generator.requestedTimeToleranceBefore = CMTime(seconds: 0.05, preferredTimescale: 600)
generator.requestedTimeToleranceAfter = CMTime(seconds: 0.05, preferredTimescale: 600)
let sizeModifier: CGFloat = 0.1
generator.maximumSize = CGSize(width: 450.0 * sizeModifier, height: 563.0 * sizeModifier)
let asset2 = AVURLAsset(url: url)
let generator2 = AVAssetImageGenerator(asset: asset2)
generator2.requestedTimeToleranceBefore = CMTime(seconds: 0.05, preferredTimescale: 600)
generator2.requestedTimeToleranceAfter = CMTime(seconds: 0.05, preferredTimescale: 600)
generator2.maximumSize = CGSize(width: 450.0 * sizeModifier, height: 563.0 * sizeModifier)
let asset3 = AVURLAsset(url: url)
let generator3 = AVAssetImageGenerator(asset: asset3)
generator3.requestedTimeToleranceBefore = CMTime(seconds: 0.05, preferredTimescale: 600)
generator3.requestedTimeToleranceAfter = CMTime(seconds: 0.05, preferredTimescale: 600)
generator3.maximumSize = CGSize(width: 450.0 * sizeModifier, height: 563.0 * sizeModifier)
// I know there's around 200 frames, gross code though
let timeValues1 = Array(timeValues[0..<62])
let timeValues2 = Array(timeValues[62..<124])
let timeValues3 = Array(timeValues[124..<186])
let startTime = CFAbsoluteTimeGetCurrent()
var framesProcessed1 = 0
generator.generateCGImagesAsynchronously(forTimes: timeValues1) { (requestedTime, resultingImage, actualTime, result, error) in
framesProcessed1 += 1
if framesProcessed1 == timeValues1.count {
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print("[1] Time elapsed: \(timeElapsed) s.")
}
}
var framesProcessed2 = 0
generator2.generateCGImagesAsynchronously(forTimes: timeValues2) { (requestedTime, resultingImage, actualTime, result, error) in
framesProcessed2 += 1
if framesProcessed2 == timeValues2.count {
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print("[2] Time elapsed: \(timeElapsed) s.")
}
}
var framesProcessed3 = 0
generator2.generateCGImagesAsynchronously(forTimes: timeValues3) { (requestedTime, resultingImage, actualTime, result, error) in
framesProcessed3 += 1
if framesProcessed3 == timeValues3.count {
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print("[3] Time elapsed: \(timeElapsed) s.")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment