0
30 초당 7 초의 MOV 비디오가 있습니다. 그러나 여러 값의 코드를 반복 할 때 작동하지 않습니다. 모든 프레임을 쓸 수있을지라도 항상 7-8 개의 고유 한 프레임을 제공합니다. 요청 된 시간은 항상 다르지만 항상 실제 시간 프레임을받습니다.비디오에서 각 프레임을 추출 할 수 없습니다.
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"MOV"]]];
moviePlayer.shouldAutoplay = NO;
NSMutableArray *timesm=[[NSMutableArray alloc]init];
for (int i=0; i<frames; i++) {
CMTime firstThird = CMTimeMakeWithSeconds(videoDurationSeconds *i/(float)frames, 600);
[timesm addObject:[NSValue valueWithCMTime:firstThird]];
double abc=firstThird.value/600;
UIImage *thumbnail = [moviePlayer thumbnailImageAtTime:abc timeOption:MPMovieTimeOptionExact];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"zshipra %i.jpg",i]];
NSData *imageData = UIImageJPEGRepresentation(thumbnail,0.7);
[imageData writeToFile:savedImagePath atomically:NO];
}
애플 개발자 사이트에서 다른 방법으로 시도했지만, 둘 다 7 초짜리 비디오에서 7 프레임을 제공합니다.
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime videoDuration = asset1.duration;
float videoDurationSeconds = CMTimeGetSeconds(videoDuration);
int frames=(int)videoDurationSeconds*30;
NSMutableArray *timesm=[[NSMutableArray alloc]init];
for (int i=0; i<frames; i++) {
CMTime firstThird = CMTimeMakeWithSeconds(videoDurationSeconds *i/(float)frames, 600);
[timesm addObject:[NSValue valueWithCMTime:firstThird]];
}
[generate1 generateCGImagesAsynchronouslyForTimes:timesm
completionHandler:^(CMTime requestedTime, CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) {
UIImage* myImage = [[UIImage alloc] initWithCGImage:image];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"ankur-%@ %i.jpg",image,(int)[[NSDate date] timeIntervalSince1970]]];
NSData *imageData = UIImageJPEGRepresentation(myImage,0.7);
[imageData writeToFile:savedImagePath atomically:NO];
NSString *requestedTimeString = (NSString *)
CFBridgingRelease(CMTimeCopyDescription(NULL, requestedTime));
NSString *actualTimeString = (NSString *)
CFBridgingRelease(CMTimeCopyDescription(NULL, actualTime));
NSLog(@"Requested: %@; actual %@", requestedTimeString, actualTimeString);
if (result == AVAssetImageGeneratorSucceeded) {
// Do something interesting with the image.
}
if (result == AVAssetImageGeneratorFailed) {
NSLog(@"Failed with error: %@", [error localizedDescription]);
}
if (result == AVAssetImageGeneratorCancelled) {
NSLog(@"Canceled");
}
}];