2017-07-07 2 views
0

AVPlayerでビデオを再生している間に、すべての画像をフレームごとに抽出します。AVPlayerでビデオが再生されている間に、ビデオ内のすべての画像をフレーム単位で抽出したい

たとえば、ビデオが30fpsで、ビデオの再生時間が10秒の場合、ビデオから300枚の画像を取得できるはずです。

現在、私はこのコードを使用して画像抽出しています:

[addPeriodicTimeObserverForInterval self.player:CMTimeMake(1、FPS)キュー:dispatch_get_main_queue()usingBlock:私が使用

^(CMTime time) { 
    [weakSelf readNextMovieFrame]; 
}]; 
(void) readNextMovieFrame { 

CMTime outputItemTime = [[self playerItem] currentTime]; 

CMTime t = [[self playerItem] currentTime]; 
CMTime d = [[self playerItem] duration]; 

if ([_output hasNewPixelBufferForItemTime:outputItemTime]) { 
    CVPixelBufferRef buffer = [_output copyPixelBufferForItemTime:outputItemTime itemTimeForDisplay:nil]; 

    CIImage *image = [CIImage imageWithCVPixelBuffer:buffer]; 

    UIImage *imageUI = [self makeUIImageFromCIImage:image]; 

    [self saveImage]; 

    //CFRelease(sampleBuffer); 
    CVBufferRelease(buffer); 

} 

}

答えて

0

をiOSのビデオから画像を抽出するには、次のようにします。

- (UIImage *)getVideoImageAtTime:(CMTime)time player:(AVPlayer *)player { 
    NSError *error = nil; 
    AVAsset *asset = player.currentItem.asset; 
    AVAssetImageGenerator *ig = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
    CGImageRef image = [ig copyCGImageAtTime:time actualTime:nil error:&error]; 
    UIImage *screenShot = [UIImage imageWithCGImage:image]; 
    CGImageRelease(image); 
    return error ? screenShot : nil; 
} 
関連する問題