如何在iOS上从视频中获取帧

时间:2017-01-18 15:14:29

标签: ios video avasset

在我的应用中,我想从视频中截取帧以过滤它们。我尝试通过时间偏移拍摄帧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等)。

如何以任何非整数间隔获取帧?

3 个答案:

答案 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的准确度只会达到第二个,这就解释了为什么帧只占整数秒。您将不得不使用不同类型的输入来获取非整数秒的帧。