截取视频指定时间点的某一帧

截取单帧

AVAsset *myAsset = <#An asset#>];
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:myAsset];
     
Float64 durationSeconds = CMTimeGetSeconds([myAsset duration]);
CMTime midpoint = CMTimeMakeWithSeconds(durationSeconds/2.0, 600);
NSError *error;
CMTime actualTime;
     
CGImageRef halfWayImage = [imageGenerator copyCGImageAtTime:midpoint actualTime:&actualTime error:&error];
     
if (halfWayImage != NULL) {
  NSString *actualTimeString = (NSString *)CMTimeCopyDescription(NULL, actualTime);
  NSString *requestedTimeString = (NSString *)CMTimeCopyDescription(NULL, midpoint);
  NSLog(@"Got halfWayImage: Asked for %@, got %@", requestedTimeString, actualTimeString);
     
  // Do something interesting with the image.
  CGImageRelease(halfWayImage);
}

截取多帧

    AVAsset *myAsset = <#An asset#>];
    // Assume: @property (strong) AVAssetImageGenerator *imageGenerator;
    self.imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:myAsset];
    
    Float64 durationSeconds = CMTimeGetSeconds([myAsset duration]);
    CMTime firstThird = CMTimeMakeWithSeconds(durationSeconds/3.0, 600);
    CMTime secondThird = CMTimeMakeWithSeconds(durationSeconds*2.0/3.0, 600);
    CMTime end = CMTimeMakeWithSeconds(durationSeconds, 600);
    NSArray *times = @[NSValue valueWithCMTime:kCMTimeZero],
    [NSValue valueWithCMTime:firstThird], [NSValue valueWithCMTime:secondThird],
    [NSValue valueWithCMTime:end]];
    
    [imageGenerator generateCGImagesAsynchronouslyForTimes:times
                                         completionHandler:^(CMTime requestedTime, CGImageRef image, CMTime actualTime,
                                                             AVAssetImageGeneratorResult result, NSError *error) {
        
        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");
        }
    }];
引用参考:

Apple文档

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容