iOS上用GPUImage给视频加滤镜

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上就有官方的实例。。。。大家可以去看看。

<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写水印,混合滤镜,敬请期待。。。。。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值