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實現視頻濾鏡

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章