首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS中创建视频缩略图

在iOS中创建视频缩略图
EN

Stack Overflow用户
提问于 2011-05-11 19:37:32
回答 3查看 18.5K关注 0票数 19

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

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

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

另外,你能告诉我,如果我可以创建一个现有的视频文件缩略图使用iOS软件开发工具包。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-22 05:14:13

试试这个(它实际上不会显示电影播放器):

代码语言:javascript
复制
+ (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);
}

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

我从你的问题中看到,你想在电影保存之前这样做,我猜如果没有文件url,它可能无法工作。但是,如果您正在使用UIImagePickerController进行相机捕获,则可以将imagePickerController:didFinishPickingMediaWithInfo:的信息字典中返回的UIImagePickerController与键UIImagePickerControllerMediaURL一起传递给此函数。

票数 19
EN

Stack Overflow用户

发布于 2012-05-21 04:38:26

实际上,更好的解决方案是使用AVFoundation框架来实现这一点。它绕过了构建MPMoviePlayerController的需要,这会导致相机的光圈在与UIImagePickerController结合使用时保持关闭的问题(至少这是我所经历的)。

我使用的代码是:

代码语言:javascript
复制
+ (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;
}
票数 33
EN

Stack Overflow用户

发布于 2015-04-20 13:49:27

试试这个:

代码语言:javascript
复制
generate.requestedTimeToleranceBefore = kCMTimeZero;
generate.requestedTimeToleranceAfter = kCMTimeZero;

需要添加以获得正确的帧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5963577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档