这个系列文章我们来介绍一位海外工程师如何探索 GPUImage 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,本篇介绍 GPUImage 快速入门。
——来自公众号“关键帧Keyframe”的分享
GPUImage 是一个专为 iOS / macOS 设计的 GPU 加速图像与视频处理框架。只需少量代码即可实现:
- 静态图片滤镜
- 实时摄像头滤镜
- 视频文件滤镜
在 iPhone 等设备上,GPUImage 可比 CPU 提速 40–100×,轻松实现实时视频特效。
1、安装
| 方式 | 步骤 |
|---|---|
| Framework(Swift 推荐) | 1. 将 GPUImage.xcodeproj拖进工程2. Target → Build Phases - Add GPUImageFramework为 Target Dependency- Link Binary With Libraries → 添加 GPUImage.framework3. 增加 Copy Files Phase,把 GPUImage.framework拷入 App Bundle |
| CocoaPods | ruby # Podfile pod 'GPUImage' 然后 pod install |
必需系统框架
- CoreMedia
- CoreVideo
- OpenGLES
- AVFoundation
- QuartzCore
2、基础用法
2.1、静态图片加滤镜
2.1.1、写法 A:显式链式(可扩展)
#import "GPUImage.h"
UIImage *inputImage = [UIImage imageNamed:@"sample.jpg"];
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
[stillImageSource addTarget:sepiaFilter];
[sepiaFilter useNextFrameForImageCapture];
[stillImageSource processImage];
UIImage *filteredImage = [sepiaFilter imageFromCurrentFramebuffer];
2.1.2、写法 B:一行搞定
GPUImageSepiaFilter *filter = [[GPUImageSepiaFilter alloc] init];
UIImage *filteredImage = [filter imageByFilteringImage:inputImage];
2.2、实时摄像头滤镜
GPUImageVideoCamera *videoCamera =
[[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480
cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
GPUImageFilter *filter = [[GPUImageSepiaFilter alloc] init];
GPUImageView *filterView = [[GPUImageView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:filterView];
[videoCamera addTarget:filter];
[filter addTarget:filterView];
[videoCamera startCameraCapture]; // Camera → Filter → Display
2.3、视频文件加滤镜并导出
NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"mp4"];
GPUImageMovie *movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
GPUImagePixellateFilter *pixellateFilter = [[GPUImagePixellateFilter alloc] init];
[movieFile addTarget:pixellateFilter];
NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/FilteredMovie.mp4"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
GPUImageMovieWriter *movieWriter =
[[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640, 480)];
[pixellateFilter addTarget:movieWriter];
// 如需保留音频
movieWriter.shouldPassthroughAudio = YES;
movieFile.audioEncodingTarget = movieWriter;
[movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];
[movieWriter startRecording];
[movieFile startProcessing];
// 完成后回调
[pixellateFilter removeTarget:movieWriter];
[movieWriter finishRecording];
2.4、拍照并实时加滤镜
GPUImageStillCamera *stillCamera = [[GPUImageStillCamera alloc] init];
stillCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
GPUImageFilter *filter = [[GPUImageGammaFilter alloc] init];
[stillCamera addTarget:filter];
GPUImageView *filterView = (GPUImageView *)self.view;
[filter addTarget:filterView];
[stillCamera startCameraCapture];
// 拍照
[stillCamera capturePhotoProcessedUpToFilter:filter
withCompletionHandler:^(UIImage *processedImage, NSError *error) {
if (!error) {
UIImageWriteToSavedPhotosAlbum(processedImage, nil, nil, nil);
}
}];
3、滤镜链(Filter Chaining)
将多个滤镜串成流水线:
GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480
cameraPosition:AVCaptureDevicePositionBack];
GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
GPUImageVignetteFilter *vignetteFilter = [[GPUImageVignetteFilter alloc] init];
GPUImageView *filterView = [[GPUImageView alloc] initWithFrame:self.view.bounds];
[videoCamera addTarget:sepiaFilter];
[sepiaFilter addTarget:vignetteFilter];
[vignetteFilter addTarget:filterView];
[videoCamera startCameraCapture]; // Camera → Sepia → Vignette → Display
4、继续探索
- 体验 125+ 内置滤镜
- 色彩:亮度 / 对比度 / 饱和度
- 混合模式
- 视觉:像素化、暗角、移轴
- 计算机视觉:边缘检测、人脸识别
- 跑官方示例
FilterShowcase:全部滤镜演示SimpleVideoFilter:实时视频滤镜BenchmarkSuite:与 CPU 性能对比
- 自定义滤镜:编写 GLSL Shader 扩展 GPUImage 功能。
学习和提升音视频开发技术,推荐你加入我们的知识星球:【关键帧的音视频开发圈】,加入后你就能:
- 下载 30+ 个开箱即用的「音视频及渲染 Demo 源代码」
- 下载包含 500+ 知识条目的完整版「音视频知识图谱」
- 下载包含 200+ 题目的完整版「音视频面试题集锦」
- 技术和职业发展咨询 100% 得到回答
- 获得简历优化建议和大厂内推

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。