处理AVAsset中的所有帧

我正在尝试通过AVAsset中的每个帧,并将每个帧处理为一个图像。 我无法从我的search中find任何东西。

我试图完成的任务看起来像伪代码

 for each frame in asset take the frame as an image and convert to a cvMat Process and store data of center points Store center points in array 

我不知道该怎么写这个伪代码的唯一部分是通过每个帧,并捕获它在一个图像。

谁能帮忙?

一个答案是使用AVAssetImageGenerator 。

1)将电影文件加载到AVAsset对象中。
2)创build一个AVAssetImageGenerator对象。
3)传入您想要从电影中获取图像的帧的估计时间。

AVAssetImageGenerator对象的requestedTimeToleranceBeforerequestedTimeToleranceAfter设置为AVAssetImageGenerator的2个属性将增加获取单个帧的能力,但会增加处理时间。

然而这个方法很慢,我还没find更快的方法。

 //Load the Movie from a URL self.movieAsset = [AVAsset assetWithURL:self.movieURL]; NSArray *movieTracks = [self.movieAsset tracksWithMediaType:AVMediaTypeVideo]; AVAssetTrack *movieTrack = [movieTracks objectAtIndex:0]; //Make the image Generator AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:self.movieAsset]; //Create a variables for the time estimation Float64 durationSeconds = CMTimeGetSeconds(self.movieAsset.duration); Float64 timePerFrame = 1.0 / (Float64)movieTrack.nominalFrameRate; Float64 totalFrames = durationSeconds * movieTrack.nominalFrameRate; //Step through the frames for (int counter = 0; counter <= totalFrames; counter++){ CMTime actualTime; Float64 secondsIn = ((float)counter/totalFrames)*durationSeconds; CMTime imageTimeEstimate = CMTimeMakeWithSeconds(secondsIn, 600); NSError *error; CGImageRef image = [imageGenerator copyCGImageAtTime:imageTimeEstimate actualTime:&actualTime error:&error]; ...Do some processing on the image CGImageRelease(image); }