我正在尝试从GPUImage捕获的视频帧生成UIImage。我做过很多AVFoundation视频工作,但我还是个新手,不熟悉GPUImage。我添加了subclassed GPUImageVideoCamera并添加了这个方法,但是UIImage总是为空。如果有人能告诉我我做错了什么,我将不胜感激!
- (void)processVideoSampleBuffer:( CMSampleBufferRef )sampleBuffer{sampleBuffer:sampleBuffer;//让GPUImage先处理
if (!self.thumbnailGenerated)
{
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
NSLog(@"%f", (float)timestamp.value / timestamp.timescale);
self.thumbnailGenerated = YES;
dispatch_sync(dispatch_get_main_queue(), ^
{
// generate a preview frame from the last filter in the camera filter chain
UIImage *thumbnailImage = [UIImage imageWithCGImage:[[self.targets lastObject] newCGImageFromCurrentlyProcessedOutput]];
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Thumbnail.png"];
[UIImagePNGRepresentation(thumbnailImage) writeToFile:pathToMovie atomically:YES];
});
}
}发布于 2014-06-15 01:45:49
我已经使用此代码生成了第一帧的CGImageRef,用于缩略图
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURl options:nil];
AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
[imageGenerator setAppliesPreferredTrackTransform:YES];
NSData *videoData = [NSData dataWithContentsOfURL:asset.URL];
CGImageRef image = [imageGenerator copyCGImageAtTime:kCMTimeZero actualTime:nil error:&error];你可以用一些实际的值替换kCMTimeZero来得到你想要的帧。
在此之后,您必须将您的CGImageRef转换为UIImage。
发布于 2017-12-23 07:25:07
我不确定这是否有帮助,但我在处理视频时得到了缩略图。出于这个目的,我使用
videoInput --> someMyOperations --> fileOutput
someMyOperations --> imageOutput //imageOutput is PictureOutput()
videoInput.start() //that needs to be called!
imageOutput.saveNextFrameToUrl(coverUrl, format: .jpg) { file in
//here goes the code what to do with thumbnail
videoInput.cancel() //quite probably here you want this
}这只是猜测--我看不到你的代码,但对我来说这是可行的。
https://stackoverflow.com/questions/24222476
复制相似问题