Skip to content

Instantly share code, notes, and snippets.

@samuelowino
Last active January 17, 2024 07:24
Show Gist options
  • Select an option

  • Save samuelowino/924aa288379c1ad25e1055331045c5f2 to your computer and use it in GitHub Desktop.

Select an option

Save samuelowino/924aa288379c1ad25e1055331045c5f2 to your computer and use it in GitHub Desktop.
AVAssetGenerator | AVFoundation
/// Generator single thumbnail from video asset
func generateImageThumbnail(videoAsset: AVAsset) async throws -> UIImage {
let generator = AVAssetImageGenerator(asset: videoAsset)
generator.requestTimeToleranceBefore = .zero
generator.requestTimeToleranceAfter = CMTime(seconds: 3, preferedTimeScale: 600)
let thumbnail = try await generator.image(at: time).image
return UIImage(cgImage: thumbnail)
}
/// Generator multiple thumbnails from particular timestamps
func generateImageThumbnails(for times: [CMTime], videoAsset: AVAsset){
let generator = AVAssetImageGenerator(asset: videoAsset)
for await result in generator.images(for: times) {
switch result {
case .success(requestedTime: let requestedTime, image: let image, actualTime: _):
updateThumbnails(for: requestedTime, with: image)
case .failed(requestedTime: let requestedTime: error: _):
updateThumbnails(for: requestedTime, with: placeholder)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment