在iOS中为视频创建缩略图

Abi*_*hek 19 objective-c thumbnails ios video-thumbnails

我有一个我正在为iPhone开发的应用程序.它的作用是,它从摄像机捕获视频并将视频文件存储到文件系统中.

在将图像保存到文件系统之前,我需要创建此视频文件的缩略图图像.我的动机是显示所创建视频的缩略图列表,以便用户可以选择特定缩略图来播放所需文件.

有人可以建议我如何创建一个由相机捕获的视频文件的缩略图图像.

另外,您能告诉我是否可以使用iOS SDK创建现有视频文件的缩略图.

Wer*_*her 32

实际上更好的解决方案是使用AVFoundation框架来执行此操作.它绕过了构造MPMoviePlayerController的需要,如果与UIImagePickerController结合使用(至少就是我所经历过的),会导致相机的光圈保持关闭的问题.

我使用的代码:

+ (UIImage *)thumbnailFromVideoAtURL:(NSURL *)contentURL {
    UIImage *theImage = nil;
    AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:contentURL options:nil];
    AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    generator.appliesPreferredTrackTransform = YES;
    NSError *err = NULL;
    CMTime time = CMTimeMake(1, 60);
    CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:NULL error:&err];

    theImage = [[[UIImage alloc] initWithCGImage:imgRef] autorelease];

    CGImageRelease(imgRef);
    [asset release];
    [generator release];

    return theImage;
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*sen 18

试试这个(它实际上并没有显示电影播放器​​):

+ (UIImage *)imageFromMovie:(NSURL *)movieURL atTime:(NSTimeInterval)time {
  // set up the movie player
  MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] 
    initWithContentURL:movieURL];
  mp.shouldAutoplay = NO;
  mp.initialPlaybackTime = time;
  mp.currentPlaybackTime = time;
  // get the thumbnail
  UIImage *thumbnail = [mp thumbnailImageAtTime:time 
                           timeOption:MPMovieTimeOptionNearestKeyFrame];
  // clean up the movie player
  [mp stop];
  [mp release];
  return(thumbnail);
}
Run Code Online (Sandbox Code Playgroud)

它应该是一个同步调用,所以它可能会阻塞主线程,但是当我在电影开头使用时间时,似乎对我来说很快就会运行.如果你这么做很多,你可以把它作为一个类别添加到UIImage上,这就是我所做的.

我从你的问题中看到你想在保存电影之前这样做,我想如果没有文件网址可能无法正常工作.但是,如果您使用UIImagePickerController进行摄像头捕获,则可以使用密钥UIImagePickerControllerMediaURL将此函数传递给imagePickerController:didFinishPickingMediaWithInfo:的信息字典中返回的URL.

  • thumbnailImageAtTime:timeOption:在iOS 7中处于DEPRECATED状态 (3认同)