短视频从无到有 (七)视频添加滤镜

卢叁IP属地: 北京
字数 161

有了GPUImage,我们可以十分方便的给视频添加滤镜。例如,我们可以在播放时实时的给视频添加滤镜,以观察效果。代码如下:

  //播放视频
    AVPlayerItem *item =[[AVPlayerItem alloc]initWithURL:_videoURL];
    AVPlayer *player =[[AVPlayer alloc]initWithPlayerItem:item];
    AVPlayerLayer *playerLayer =[AVPlayerLayer playerLayerWithPlayer:player];
    playerLayer.frame =self.view.bounds;
    [self.view.layer addSublayer:playerLayer];
    
    movieFile =[[GPUImageMovie alloc]initWithPlayerItem:item];
    movieFile.runBenchmark =YES;
    movieFile.playAtActualSpeed =YES;
    
    filter =[[GPUImageSketchFilter alloc] init];
    [movieFile addTarget:filter];
    
    filterView =[[GPUImageView alloc]initWithFrame:self.view.bounds];
    [self.view addSubview:filterView];
    [filter addTarget:filterView];
    
    [player play];
    [movieFile startProcessing];

而把添加滤镜后的视频保存到本地的话 ,则需要GPUImage框架中的GPUImageMovieWriter这个类写到本地即可,还是贴代码:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
        
//        [movieFile removeAllTargets];
//        //新的滤镜
//        filter =[[GPUImageSepiaFilter alloc]init];
//
//        [movieFile addTarget:filter];
//        [filter addTarget:filterView];
        
        //movieWriter 写到本地
        endMovieFile =[[GPUImageMovie alloc]initWithURL:_videoURL];
        endMovieFile.runBenchmark =YES;
        endMovieFile.playAtActualSpeed =YES;
        
        endFilter =[[GPUImageSepiaFilter alloc]init];
        [endMovieFile addTarget:endFilter];
        
        
        
        NSString *pathToMovie =[self getVideoSaveFilePathString:@".MOV" addPathArray:NO];
        unlink([pathToMovie UTF8String]);
        NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
        
        movieWriter =[[GPUImageMovieWriter alloc]initWithMovieURL:movieURL size:CGSizeMake(720, 1280)];
        [endFilter addTarget:movieWriter];
        
        movieWriter.shouldPassthroughAudio =YES;
        endMovieFile.audioEncodingTarget =movieWriter;
        [endMovieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];
        [movieWriter startRecording];
        [endMovieFile startProcessing];
        
        [movieWriter setCompletionBlock:^{
            
            WeakSelf(self);
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [self.hud hideAnimated:YES];
                [endFilter removeTarget:movieWriter];
                [movieWriter finishRecording];
                //保存相册
                [self savePhotosAlbum:movieURL];
                
            });
            
        }];
        
        
      });

注:3秒后保存到本地相当于按钮事件,示例而已。movieWriter相当于把视频重写一遍,完成回调后要移除target,还要结束录制。

有什么问题欢迎留言讨论。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
4人点赞
卢叁桃李春风一杯酒,江湖夜雨十年灯。
总资产20共写了1.9W字获得246个赞共264个粉丝

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,003评论 3 119
  • 在这个世界,有能力自己赚钱简直就是女人的护身符。以前我也是个幸福的女孩,因为有父母的疼爱和呵护,根本没有事业心。只...
    财惠阅读 113评论 0 0
  • 这一年,我们搬进了新房子。 农历腊月十一,虽说是寒冷的季节,但是,白天这明媚的阳光给人暖暖的感觉。 晚上,我们姐仨...
    惜福_d9e6阅读 506评论 0 0
  • 搭讪一个你一直想拜访的大咖或榜样,翻了一圈通讯录,发现不知道找谁好。后来跟黑黑聊天,说出自己的苦恼,她说她想采访自...
    不一样的Jing阅读 355评论 0 0