iOS GPUImage之GPUImageMovie视频滤镜(2)


示例:使用 GPUImageMovie 为视频添加滤镜,并保存文件(简单使用)


//
//  ViewController.m
//  GPUImageTest2
//
//  Created by 黄健 on 16/7/2.
//  Copyright © 2016年 黄健. All rights reserved.
//

#import "ViewController.h"

#import "GPUImage.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet GPUImageView *gpuImageView;
@property (nonatomic,strong) GPUImageMovie *movie;
@property (nonatomic,strong) GPUImageMovieWriter *writer;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 视频路径(同上一篇 GPUImageMovieWriter 文章)
    NSURL *sampleURL = [[NSBundle mainBundle]URLForResource:@"demo" withExtension:@"mp4" subdirectory:nil];

    // 初始化 movie
    _movie = [[GPUImageMovie alloc] initWithURL:sampleURL];
    _movie.shouldRepeat = NO;
    _movie.playAtActualSpeed = YES;

    // 设置加滤镜视频保存路径
    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.mp4"];
    unlink([pathToMovie UTF8String]);
    NSURL *movieURL       = [NSURL fileURLWithPath:pathToMovie];

    // 初始化
    _writer = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480, 640)];
    _writer.encodingLiveVideo = NO;
    _writer.shouldPassthroughAudio = NO;

    /**
     如果你设置了 _movie.audioEncodingTarget = _writer;
     会报如下错误:
     *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVAssetWriterInput appendSampleBuffer:] Cannot append sample buffer: Input buffer must be in an uncompressed format when outputSettings is not nil'
     暂时没去深究,以后再解决!
     */

    // 添加滤镜
    GPUImageToonFilter *filter = [[GPUImageToonFilter alloc] init];
    [_movie addTarget:filter];
    [filter addTarget:_writer];

    [_movie enableSynchronizedEncodingUsingMovieWriter:_writer];
    [_writer startRecording];
    [_movie startProcessing];

    __weak typeof(self) weakSelf = self;

    [_writer setCompletionBlock:^{
        NSLog(@"OK");

        [filter removeTarget:weakSelf.writer];
        [weakSelf.writer finishRecording];
    }];

}

@end

》》测试

运行结果就是:加滤镜处理后的新视频大小3M(原视频674KB)。

》》问题

处理中CPU->140%,处理完CPU->0%
处理中内存->122MB,处理完内存->73MB

参考文章
使用GPUImage实现视频滤镜

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值