我有一个正在为iPhone开发的应用程序。它的作用是从摄像机捕获视频,并将视频文件存储到文件系统中。
在将图像保存到文件系统之前,我需要创建此视频文件的缩略图图像。我的动机是显示创建的视频的缩略图列表,以便用户可以选择特定的缩略图来播放所需的文件。
有人可以建议我如何创建一个缩略图图像的视频文件,已捕获的相机。
另外,你能告诉我,如果我可以创建一个现有的视频文件缩略图使用iOS软件开发工具包。
发布于 2011-06-22 05:14:13
试试这个(它实际上不会显示电影播放器):
+ (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一起传递给此函数。
发布于 2012-05-21 04:38:26
实际上,更好的解决方案是使用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;
}
发布于 2015-04-20 13:49:27
试试这个:
generate.requestedTimeToleranceBefore = kCMTimeZero;
generate.requestedTimeToleranceAfter = kCMTimeZero;
需要添加以获得正确的帧。
https://stackoverflow.com/questions/5963577
复制相似问题