Ответ 1
Я думаю, что ответ в этом вопросе - это то, что вы ищете.
iPhone Читать UIimage (кадры) с видео с AVFoundation.
В принятом ответе есть два метода. Вы можете использовать один из них в соответствии с вашими требованиями.
Я использую UIImagePicker, чтобы разрешить пользователю создавать видео, а затем обрезать его. Мне нужно разделить это видео на несколько кадров и позволить пользователю выбрать один из них.
Чтобы показать кадры, я, вероятно, должен их преобразовать в UIImage. Как я могу это сделать? Я должен использовать AVFoundation, но я не смог найти учебник о том, как получить и преобразовать фреймы.
Должен ли я делать захват изображения с помощью AVFoundation? Если это так, я должен сам выполнить обрезку?
Я думаю, что ответ в этом вопросе - это то, что вы ищете.
iPhone Читать UIimage (кадры) с видео с AVFoundation.
В принятом ответе есть два метода. Вы можете использовать один из них в соответствии с вашими требованиями.
Вот код для получения изображений FPS с видео
1) Импорт
#import <Photos/Photos.h>
2) in viewDidLoad
videoUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"VfE_html5" ofType:@"mp4"]];
[self createImage:5]; // 5 is frame per second (FPS) you can change FPS as per your requirement.
3) Функции
-(void)createImage:(int)withFPS {
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoUrl options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.requestedTimeToleranceAfter = kCMTimeZero;
generator.requestedTimeToleranceBefore = kCMTimeZero;
for (Float64 i = 0; i < CMTimeGetSeconds(asset.duration) * withFPS ; i++){
@autoreleasepool {
CMTime time = CMTimeMake(i, withFPS);
NSError *err;
CMTime actualTime;
CGImageRef image = [generator copyCGImageAtTime:time actualTime:&actualTime error:&err];
UIImage *generatedImage = [[UIImage alloc] initWithCGImage:image];
[self savePhotoToAlbum: generatedImage]; // Saves the image on document directory and not memory
CGImageRelease(image);
}
}
}
-(void)savePhotoToAlbum:(UIImage*)imageToSave {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:imageToSave];
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"sucess.");
}
else {
NSLog(@"fail.");
}
}];
}
Вы также можете использовать lib VideoBufferReader (см. в GitHub) на основе AVFoundation.