動画からサムネイルを生成する際に以下のようにAVAssetImageGenerator:copyCGImageAtTimeを使用しているのですが、1枚の画像を切り出すのに0.2秒ほどかかってしまいます。これを高速化する方法はないでしょうか?iMovieなどは一瞬でサムネイルが表示されのですが、これと同等のことがしたいです。
他にはAVAssetReaderのcopyNextSampleBufferでバッファの読み出しからUIImageに変換する処理も試してみましたが、こちらはcopyNextSampleBufferのバッファ読み出しに時間がかかってしまう状況でした。
AVAssetImageGenerator *imageGen = [[AVAssetImageGenerator alloc] initWithAsset:_mutablComposition];
imageGen.maximumSize = CGSizeMake(210, 210);
NSError* error = nil;
CMTime actualTime;
CMTime midpoint;
Float64 step = 0;
midpoint = kCMTimeZero;
for(UIImageView *imageView in _scrollView.subviews ){
if( imageView.tag ){
midpoint = CMTimeMake(step, 600);
CGImageRef halfWayImageRef = [imageGen copyCGImageAtTime:midpoint actualTime:&actualTime error:&error];
if ( halfWayImageRef != nil ){
}
step += 1200;
CGImageRelease(halfWayImageRef);
}
}
generateCGImagesAsynchronouslyForTimes:completionHandler: はどうでしょうか。
avfoundation - AV Foundationを使った動画編集(動画ファイルのサムネイルの取得) - Qiita
Creating video thumbnails using the iOS SDK
有り難うございます。
2014/11/29 16:23:02generateCGImagesAsynchronouslyForTimesを試したところ、サムネイル生成の高速化が出来るようになりました。