在我的应用中,我想从视频中截取帧以过滤它们。我尝试通过时间偏移拍摄帧frim视频。这是我的代码:
- (UIImage*)getVideoFrameForTime:(NSDate*)time {
CGImageRef thumbnailImageRef = NULL;
NSError *igError = nil;
NSTimeInterval timeinterval = [time timeIntervalSinceDate:self.videoFilterStart];
CMTime atTime = CMTimeMakeWithSeconds(timeinterval, 1000);
thumbnailImageRef =
[self.assetImageGenerator copyCGImageAtTime:atTime
actualTime:NULL
error:&igError];
if (!thumbnailImageRef) {
NSLog(@"thumbnailImageGenerationError %@", igError );
}
UIImage *image = thumbnailImageRef ? [[UIImage alloc] initWithCGImage:thumbnailImageRef] : nil;
return image;
}
不幸的是,我只看到位于整数秒内的帧:1,2,3 ..即使时间间隔是非整数(1.5等)。
如何以任何非整数间隔获取帧?
答案 0 :(得分:1)
使用此项目获取更多帧详细信息 github上的相应项目:iFrameExtractor.git
答案 1 :(得分:1)
Thnx to @shallowThought我在这个问题中找到了答案Grab frames from video using Swift
您只需要添加这两行
assetImgGenerate.requestedTimeToleranceAfter = kCMTimeZero;
assetImgGenerate.requestedTimeToleranceBefore = kCMTimeZero;
答案 2 :(得分:0)
如果我没记错的话,NSDate的准确度只会达到第二个,这就解释了为什么帧只占整数秒。您将不得不使用不同类型的输入来获取非整数秒的帧。