在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,                                                                                      CGImageRefcgImage,

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];

});

}

}];

分解之后的帧效果如下:                               图片合成视频效果如下:

(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 视频分解图片、图片合成视频的更多相关文章

  1. opencv 将视频分解成图片和使用本地图片合成视频

    代码如下: // cvTest.cpp : Defines the entry point for the console application. #include "stdafx.h&q ...

  2. opencv学习之路(3)、批量读取图片、视频分解、视频合成

    一.批量有序读取图片 #include<opencv2/opencv.hpp> using namespace cv; void main() { //批量读取图片(有序) ]; ]; M ...

  3. 在Ubuntu14.04下安装 ffmpeg-2.4.13(处理视频用,将视频保存为图片序列)

    首先在 http://www.ffmpeg.org/olddownload.html 下载 ffmpeg-2.4.13.tar.bz2 : 然后安装 yasm 和 libx264: apt-get i ...

  4. python视频与帧图片的相互转化,以及查看视频分辨率

    1.拆分视频为帧图片 import cv2 def video2frame(videos_path,frames_save_path,time_interval): vidcap = cv2.Vide ...

  5. iOS 解决LaunchScreen中图片加载黑屏问题

    iOS 解决LaunchScreen中图片加载黑屏问题 原文: http://blog.csdn.net/chengkaizone/article/details/50478045 iOS 解决Lau ...

  6. iOS根据Url 获取图片尺寸

    iOS根据Url 获取图片尺寸 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([i ...

  7. IOS第六天(3:scrollView 图片轮播器)

    IOS第六天(3:scrollView 图片轮播器) #import "HMViewController.h" #define kImageCount 5 @interface H ...

  8. iOS网络加载图片缓存策略之ASIDownloadCache缓存优化

    iOS网络加载图片缓存策略之ASIDownloadCache缓存优化   在我们实际工程中,很多情况需要从网络上加载图片,然后将图片在imageview中显示出来,但每次都要从网络上请求,会严重影响用 ...

  9. ios里面如何压缩图片

    在iOS里面,压缩图片跟在其他环境里面差不多,都和累死, 就是对当前图片从新画图,制定一个尺寸的问题 UIImage* image = [UIImage imageNamed:@"cat.j ...

随机推荐

  1. java数据结构和算法------堆排序

    package iYou.neugle.sort; public class Heap_sort { public static void HeapSort(double[] array) { for ...

  2. Python实现CART(基尼指数)

    Python实现CART(基尼指数) 运行环境 Pyhton3 treePlotter模块(画图所需,不画图可不必) matplotlib(如果使用上面的模块必须) 计算过程 st=>start ...

  3. 网页设计师必备的10个CSS技巧

    CSS是网页设计师的基础,对CSS的了解能使他们能够设计出更加美观别致的网页.使用CSS技巧来巧妙地处理CSS是非常令设计师着迷的事情.在CSS的深海世界里有很多有意思的东西,你只需要找到最适合你的就 ...

  4. javascript权威指南第六版学习

    第二章 语法结构 2.1 字符集 什么是字符集?各种字符集什么关系?unicode,utf-8是什么关系? 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...

  5. C#制作高仿360安全卫士窗体(三)

    距上篇C#制作高仿360安全卫士窗体(二)也将近一个多月了,这个月事情还是像往常一样的多.不多我也乐在其中,毕竟我做的是我喜欢做的东西.今天特地抽空把怎么制作文本框写一下.同时也希望有爱好这些玩意的同 ...

  6. HDU 5564 Clarke and digits 状压dp+矩阵加速

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5564 题意: 求长度在[L,R]范围,并且能整除7的整数的总数. 题解: 考虑最原始的想法: dp[ ...

  7. 【BZOJ】【2756】【SCOI2012】奇怪的游戏

    网络流-最大流 这题……建模部分先略过 这道题是会卡时限的T_T俺的Dinic被卡了,在此放几篇很棒的讲网络流算法的文章,至于大家耳熟能详的论文就不放了…… http://www.cppblog.co ...

  8. Matlab设置网格线密度(坐标精度)

    1.不精确 set(gca,'XMinorTick','on') 这样的话知识x轴显示了细的密度,网格线并没有变. 2.精确 set(gca,'xtick',-1:0.1:1); set(gca,'y ...

  9. 连接ACCESS 数据库不能使用 '';文件已在使用中。

    错误类型:  Microsoft JET Database Engine (0x80004005)  不能使用 '':文件已在使用中. 对数据库的操作完之后,要 conn.close() 错误原因:解 ...

  10. Kali-linux安装之后的简单设置

    1.更新软件源:修改sources.list文件:leafpad /etc/apt/sources.list然后选择添加以下适合自己较快的源(可自由选择,不一定要全部): #官方源deb http:/ ...