iOS – 如何从video中获取缩略图而不玩游戏?

我试图从video中获取缩略图,并在我的桌面视图中显示它。 这是我的代码:

- (UIImage *)imageFromVideoURL:(NSURL *)contentURL { AVAsset *asset = [AVAsset assetWithURL:contentURL]; // Get thumbnail at the very start of the video CMTime thumbnailTime = [asset duration]; thumbnailTime.value = 25; // Get image from the video at the given time AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; CGImageRef imageRef = [imageGenerator copyCGImageAtTime:thumbnailTime actualTime:NULL error:NULL]; UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return thumbnail; } 

但图像总是返回黑色。 怎么了?

 NSURL *videoURL = [NSURL fileURLWithPath:filepath];// filepath is your video file path AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; AVAssetImageGenerator *generateImg = [[AVAssetImageGenerator alloc] initWithAsset:asset]; NSError *error = NULL; CMTime time = CMTimeMake(1, 1); CGImageRef refImg = [generateImg copyCGImageAtTime:time actualTime:NULL error:&error]; NSLog(@"error==%@, Refimage==%@", error, refImg); UIImage *FrameImage= [[UIImage alloc] initWithCGImage:refImg]; return FrameImage; 

使用这个:Swift 3 –

 func createThumbnailOfVideoFromFileURL(videoURL: String) -> UIImage? { let asset = AVAsset(url: URL(string: videoURL)!) let assetImgGenerate = AVAssetImageGenerator(asset: asset) assetImgGenerate.appliesPreferredTrackTransform = true let time = CMTimeMakeWithSeconds(Float64(1), 100) do { let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil) let thumbnail = UIImage(cgImage: img) return thumbnail } catch { return UIImage(named: "ico_placeholder") } } 

重要的提示 :

因为它是资源广泛的,你将需要使用它。 您将不得不将图像存储在数组或模型中,并检查是否一旦创build了缩略图,它将引用caching/数组,以便cellForRowAtIndexPath不会导致滚动UITableView

只需使用此代码..传递您的videourl,并获得一个图像。

 +(UIImage *)getPlaceholderImageFromVideo:(NSString *)videoURL { NSURL *url = [NSURL URLWithString:videoURL]; AVAsset *asset = [AVAsset assetWithURL:url]; AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; CMTime time = [asset duration]; time.value = 0; CGImageRef imageRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL]; UIImage *thumbnail = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); return thumbnail; } 

希望,这是你要找的。 任何关心回到我身边。 🙂

请检查“从video生成缩略图”链接

https://littlebitesofcocoa.com/115-generating-thumbnails-from-videos

应用程序需要显示video内容的一个或多个缩略图(小静态图像预览)是很常见的。 不过,根据video的来源,我们可能无法轻松访问预先制作的缩略图。 我们来看看如何使用AVAssetImageGenerator获取我们自己的。 我们从一个简单的NSURL开始,video可以是本地的,也可以是远程的。 我们将使用它创build一个AVAsset,并创build一个新的AVAssetImageGenerator对象。 我们将configuration生成器以应用首选转换,以便我们的缩略图处于正确的方向。

 import AVFoundation if let asset = AVAsset(URL: videoURL) { let durationSeconds = CMTimeGetSeconds(asset.duration) let generator = AVAssetImageGenerator(asset: asset) generator.appliesPreferredTrackTransform = true let time = CMTimeMakeWithSeconds(durationSeconds/3.0, 600) var thumbnailImage: CGImageRef generator.generateCGImagesAsynchronouslyForTimes([NSValue(CMTime: time)]) { (requestedTime: CMTime, thumbnail: CGImage?, actualTime: CMTime, result: AVAssetImageGeneratorResult, error: NSError?) in self.videoThumbnailImageView.image = UIImage(CGImage: thumbnail) } }