最近在做一个需要给已有视频加滤镜的功能,不是实时滤镜,而是给已经存在的视频加滤镜。
网上有很多关于GPUImage的博客,但大多都是给图片加上滤镜或者是直接在摄像头上加上的实时滤镜。
但是在网上找,却没有说很多人给出这样的滤镜教程,这里简单给分享一下。
1.首先,什么是GPUImage?详细请度娘,简单点来说,就是一个用GPU来处理图片和视频的第三方库。
2.给图像加滤镜,如果是只加滤镜,那么网上有很多的教程,这里就不细说了,这里主要说一下怎么找要用的滤镜和这个滤镜需要设定什么参数。
2.1寻找要用的滤镜,其实在无论是很多人推荐的GPUImage还是苹果官方的CoreImage,滤镜的名字本身就已经很能说明这个滤镜的作用了
另外,在GPUImage里面,每个滤镜类Filter,都会有详细的注释来说明这个Filter的作用
2.2 配置参数。
在GPUImage中,其实没有CoreImage可以直接用方法来获取当前滤镜需要用的参数那么方便,而是要通过点击进入对应filter的.h文件里面查询。
如图,里面的red、green和blue就是要设定的配置参数。
3. 给已有视频加上滤镜,这个在GPUImage的github上就有官方的实例,大家可以去看看。
/* 下面尝试使用GPUImage来给视频加上滤镜。*/
GPUImageContrastFilter *secondFilter = [[GPUImageContrastFilteralloc]init];
[secondFilter setContrast:1.80];
GPUImageBrightnessFilter *firstFilter = [[GPUImageBrightnessFilteralloc]init];
[firstFilter setBrightness:0.1];
//GPUImageColorBurnBlendFilter
GPUImageRGBFilter *filter = [[GPUImageRGBFilter alloc] init];
filter.red = 0.8;
filter.green = 1;
filter.blue = 1.2;
NSURL *vedioURL = [NSURLfileURLWithPath:[[NSBundlemainBundle]pathForResource:@"s2"ofType:@"mp4"]];
GPUImageMovie *movie = [[GPUImageMoviealloc]initWithURL:vedioURL];
movie.runBenchmark = YES;
[movie addTarget:filter];
//[movie addTarget:secondFilter];
GPUImageMovieWriter *vedioWriter = [[GPUImageMovieWriteralloc]initWithMovieURL:[NSURL fileURLWithPath:@"*.mov"]size:CGSizeMake(1280,800)];
movie.audioEncodingTarget = nil;
vedioWriter.shouldPassthroughAudio = YES;
movie.playAtActualSpeed = NO;
[movie startProcessing];
[filter addTarget:vedioWriter];
//[secondFilter addTarget:vedioWriter];
[vedioWriter startRecording];
[vedioWriter setCompletionBlock:^{
[movieWriter finishRecording];
[filter removeTarget:movieWriter];
}