iOS上用GPUImage给视频加滤镜
2016-08-01 19:47
573 查看
http://www.voidcn.com/blog/u1031/article/p-3264924.html
最近在做一个需要给已有视频加滤镜的app,不是实时滤镜,而是给已经存在的视频加滤镜。
虽然网上有很多关于GPUImage的博客,但大多都是给图片加上滤镜或者是直接在摄像头上加上的实时滤镜,找了很久之后.....
发现在github上本来就有.....
但是在网上找,却没有说很多人给出这样的滤镜教程,这里简单给分享一下下。
1. 首先,什么是GPUImage?详细请度娘之,简单点来说,就是一个用GPU来处理图片和视频的第三方库。
2. 给图像加滤镜,如果是只加滤镜,那么网上有很多的教程,这里就不细说了,这里主要说一下怎么找要用的滤镜和这个滤镜需要设定什么参数。
2.1 寻找要用的滤镜, 其实在无论是很多人推荐的GPUImage还是苹果官方的CoreImage,滤镜的名字本身就已经很能说明这个滤镜的作用了:
另外,在GPUImage里面,每个滤镜类Filter,都会有详细的注释来说明这个Filter的作用
当然,全是英文就是了。。。。。
2.2 配置参数。
在GPUImage中,其实没有CoreImage可以直接用方法来获取当前滤镜需要用的参数那么方便,而是要通过点击进入对应filter的.h文件里面查询。
如图,里面的red、green和blue就是要设定的配置参数。
3. 给已有视频加上滤镜,这个在GPUImage的github上就有官方的实例。。。。大家可以去看看。
往后我会再写几篇博客,关于怎么用GPUImage写水印,混合滤镜,敬请期待。。。。。
最近在做一个需要给已有视频加滤镜的app,不是实时滤镜,而是给已经存在的视频加滤镜。
虽然网上有很多关于GPUImage的博客,但大多都是给图片加上滤镜或者是直接在摄像头上加上的实时滤镜,找了很久之后.....
发现在github上本来就有.....
但是在网上找,却没有说很多人给出这样的滤镜教程,这里简单给分享一下下。
1. 首先,什么是GPUImage?详细请度娘之,简单点来说,就是一个用GPU来处理图片和视频的第三方库。
2. 给图像加滤镜,如果是只加滤镜,那么网上有很多的教程,这里就不细说了,这里主要说一下怎么找要用的滤镜和这个滤镜需要设定什么参数。
2.1 寻找要用的滤镜, 其实在无论是很多人推荐的GPUImage还是苹果官方的CoreImage,滤镜的名字本身就已经很能说明这个滤镜的作用了:
另外,在GPUImage里面,每个滤镜类Filter,都会有详细的注释来说明这个Filter的作用
当然,全是英文就是了。。。。。
2.2 配置参数。
在GPUImage中,其实没有CoreImage可以直接用方法来获取当前滤镜需要用的参数那么方便,而是要通过点击进入对应filter的.h文件里面查询。
如图,里面的red、green和blue就是要设定的配置参数。
3. 给已有视频加上滤镜,这个在GPUImage的github上就有官方的实例。。。。大家可以去看看。
<span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">/* 下面尝试使用GPUImage来给视频加上滤镜。 */</span> GPUImageContrastFilter *secondFilter = [[GPUImageContrastFilter alloc] init]; [secondFilter setContrast:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">1.80</span>]; GPUImageBrightnessFilter *firstFilter = [[GPUImageBrightnessFilter alloc] init]; [firstFilter setBrightness:<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">0.1</span>]; <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//GPUImageColorBurnBlendFilter</span> GPUImageRGBFilter *filter = [[GPUImageRGBFilter alloc] init]; filter<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.red</span> = <span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">0.8</span>; filter<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.green</span> = <span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">1</span>; filter<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.blue</span> = <span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">1.2</span>; <span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">NSURL</span> *vedioURL = [<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">NSURL</span> fileURLWithPath:[[<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">NSBundle</span> mainBundle] pathForResource:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"s2"</span> ofType:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"mp4"</span>]]; GPUImageMovie *movie = [[GPUImageMovie alloc] initWithURL:vedioURL]; movie<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.runBenchmark</span> = <span class="hljs-literal" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;">YES</span>; <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[movie addTarget:filter];</span> [movie addTarget:secondFilter]; GPUImageMovieWriter *vedioWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:[<span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">NSURL</span> fileURLWithPath:<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"/Users/huazai/Desktop/t/t16.mov"</span>] size:CGSizeMake(<span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">1280</span>, <span class="hljs-number" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(64, 160, 112); background: transparent;">800</span>)]; movie<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.audioEncodingTarget</span> = <span class="hljs-literal" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;">nil</span>; vedioWriter<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.shouldPassthroughAudio</span> = <span class="hljs-literal" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;">YES</span>; movie<span class="hljs-variable" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 128, 128); background: transparent;">.playAtActualSpeed</span> = <span class="hljs-literal" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(149, 65, 33); background: transparent;">NO</span>; [movie startProcessing]; [filter addTarget:vedioWriter]; <span class="hljs-comment" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: italic; font-family: inherit; vertical-align: baseline; color: rgb(64, 128, 128); background: transparent;">//[secondFilter addTarget:vedioWriter];</span> [vedioWriter startRecording]; [vedioWriter setCompletionBlock:^{ <span class="hljs-built_in" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(0, 134, 179); background: transparent;">NSLog</span>(<span class="hljs-string" style="border: 0px; margin: 0px; padding: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(33, 145, 97); background: transparent;">@"已完成!!!"</span>); }];
往后我会再写几篇博客,关于怎么用GPUImage写水印,混合滤镜,敬请期待。。。。。
相关文章推荐
- iOS GPUImage之GPUImageMovie视频滤镜(1)
- iOS上用GPUImage给视频加滤镜
- ios GPUImage简单滤镜 -- 录制视频(保存+聚焦)
- iOS GPUImage研究五:短视频拍摄(滤镜、文件写入)
- iOS 使用GPUImage为本地视频添加滤镜
- iOS GPUImage之GPUImageMovie视频滤镜(2)
- iOS GPUImage研究四:为视频文件添加滤镜
- iOS实时滤镜实现--基于GPUImage。
- iOS—使用GPUImage对照片和相机添加滤镜
- iOS GPUImage之GPUImageFilterPipeline组合滤镜(4)
- iOS --- 使用GPUImage实现的简单滤镜效果
- iOS AR之视频特效挂件(GPUImage)
- ios中的GpuImage及相关滤镜介绍
- 用GPUImage给视频添加多个滤镜
- iOS GPUImage之自定义滤镜
- iOS 使用GPUImage录制实时视频第一帧黑屏的解决办法
- iOS GPUImage研究序一:内置滤镜
- 使用GPUImage实现视频滤镜
- iOS 中的 GpuImage 及相关滤镜介绍
- 使用GPUImage实现视频滤镜