IOS 视频分解图片、图片合成视频
在IOS視頻處理中,視頻分解圖片和圖片合成視頻是IOS視頻處理中常常遇到的問題。這篇博客就這兩個部分對IOS視頻圖像的相互轉換做一下分析。
(1)視頻分解圖片
這里視頻分解圖片使用的是AVAssetImageGenerator。利用這個class能夠非常方便的實現不同一時候間戳下,視頻幀的抓取。注意一般這樣的視頻分解圖片幀的方法都是放在子線程中的,而UI更新操作都是放在主線程中的。
以下來看看核心代碼:
_imageGenerator = [[AVAssetImageGenerator
alloc]
initWithAsset:_asset];
images = [[NSMutableArray
alloc]initWithCapacity:10];
_imageGenerator.maximumSize =
THUMBNAIL_SIZE;
CMTime duration =
_asset.duration;
CMTimeValue intervalSeconds = duration.value /
3;
CMTime time =
kCMTimeZero;
NSMutableArray *times = [NSMutableArray
array];
for (NSUInteger i =
0; i < 3; i++) {
[times
addObject:[NSValue
valueWithCMTime:time]];
time =
CMTimeAdd(time, CMTimeMake(intervalSeconds, duration.timescale));
}
[_imageGenerator
generateCGImagesAsynchronouslyForTimes:times
completionHandler:^(CMTime requestedTime, CGImageRef
cgImage,
CMTime actualTime,
AVAssetImageGeneratorResult result,
NSError *error) {
if (cgImage) {
UIImage *image = [UIImage
imageWithCGImage:cgImage];
[images
addObject:image];
}
if (images.count ==
3) {
dispatch_async(dispatch_get_main_queue(), ^{
self.imageview1.image = [images
objectAtIndex:0];
self.imageview2.image = [images
objectAtIndex:1];
self.imageview3.image = [images
objectAtIndex:2];
});
}
}];
分解之后的幀效果例如以下: 圖片合成視頻效果例如以下:
<img src="http://img.blog.csdn.net/20150727095747931?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="311" height="574" alt="">
(2)圖片合成視頻
圖片合成視頻的方法相對來說更加復雜一點。我們主要用到的class是這個:
AVAssetWriterInputPixelBufferAdaptor。
不同之處在于這里我們還要設置圖片合成視頻的各種參數,比方幀率,編碼方式等等。
2.1 設置文件封裝類型
AVFileTypeQuickTimeMovie
2.2 設置圖片格式
kCVPixelFormatType_32ARGB
2.3 設置編碼方式、圖片尺寸
NSDictionary *videoSettings =
@{AVVideoCodecKey :
AVVideoCodecH264,
AVVideoWidthKey : [NSNumber
numberWithInt:(int)width],
AVVideoHeightKey : [NSNumber
numberWithInt:(int)height]};
2.4 圖片合成開始
CMTime lastTime =
CMTimeMake(i, self.frameTime.timescale);
CMTime presentTime =
CMTimeAdd(lastTime,
self.frameTime);
[self.bufferAdapter
appendPixelBuffer:sampleBuffer
withPresentationTime:presentTime];
總結
以上是生活随笔為你收集整理的IOS 视频分解图片、图片合成视频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fiddler 域名过滤
- 下一篇: BZOJ 3039: 玉蟾宫( 悬线法