GPUImage 视频录制加滤镜

/// 创建相机和滤镜

- (void)createVideoCamera:(AVCaptureDevicePosition)frontOrBack{

[videoCamera removeAllTargets];

videoCamera = nil;

videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:frontOrBack];

videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

 /// horizontallyMirrorFrontFacingCamera 属性 YES 代表前置的时候不是镜像

videoCamera.horizontallyMirrorFrontFacingCamera = YES;

videoCamera.horizontallyMirrorRearFacingCamera = NO;

  /// 裁剪滤镜

cropFilter = [[GPUImageCropFilter alloc] initWithCropRegion:CGRectMake(0, (1280-720)/2/1280.0, 1,720/1280.0)];

  /// 自定义的美颜滤镜

beautyFilter = [[GPUImageBeautyFilter alloc] init];

  /// 滤镜分组 

filterGroup = [[GPUImageFilterGroup alloc] init];

  /// 没有开美颜

if (!isBeauty) {

[videoCamera addTarget:cropFilter];

  /// 预览层 /*预览层可以省略*/

[cropFilter addTarget:preView];

}

else{/// 美颜和裁剪滤镜都加到滤镜组里

[cropFilter addTarget:beautyFilter];

[filterGroup addTarget:cropFilter];

[filterGroup addTarget:beautyFilter];

[filterGroup setInitialFilters:[NSArray arrayWithObject:cropFilter]];

[filterGroup setTerminalFilter:beautyFilter];

[filterGroup forceProcessingAtSize:preView.frame.size];

[filterGroup useNextFrameForImageCapture];

[videoCamera addTarget:filterGroup];

[filterGroup addTarget:preView];

}

  /// 开始捕捉

[videoCamera startCameraCapture];

}

///开始录制  分段录制每次都要实例化一个movieWriter

- (void)startPhoto {

  /// 根据时间生成路径 录制的视频会存储到该路径下 要唯一

NSString *pathToMovie = [self getVideoMergeFilePathString];

[videoArray addObject:pathToMovie];

NSLog(@"%@",pathToMovie);

unlink([pathToMovie UTF8String]);

NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

//    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(720, 720) fileType:AVFileTypeQuickTimeMovie outputSettings:videoSettings];

movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(720, 720)];

  /// audioSettings 一些音频配置

/*

AudioChannelLayout channelLayout;

memset(&channelLayout, 0, sizeof(AudioChannelLayout));

channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;

audioSettings = [NSDictionary dictionaryWithObjectsAndKeys:

[ NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,//制定编码算法

[ NSNumber numberWithInt: 2 ], AVNumberOfChannelsKey,//声道

[ NSNumber numberWithFloat: 16000.0 ], AVSampleRateKey,//采样率

[ NSData dataWithBytes:&channelLayout length: sizeof( AudioChannelLayout ) ], AVChannelLayoutKey,

[ NSNumber numberWithInt: 32000 ], AVEncoderBitRateKey,//编码率

nil];

*/

[movieWriter setHasAudioTrack:YES audioSettings:audioSettings];

movieWriter.hasAudioTrack = YES;

[videoCamera addAudioInputsAndOutputs];

videoCamera.audioEncodingTarget = movieWriter;

if (!isBeauty) {

[cropFilter addTarget:movieWriter];

}

else {

[filterGroup addTarget:movieWriter];

}

[movieWriter startRecording];

}

///完成录制

- (void)endRecording {

[movieWriter finishRecording];

[cropFilter removeTarget:movieWriter];

[beautyFilter removeTarget:movieWriter];

[filterGroup removeTarget:movieWriter];

videoCamera.audioEncodingTarget = nil;

//    [self savePhotoCmare:videoArray.lastObject];

}

///把录制好的视频写相册

- (void)savePhotoCmare:(NSString *)pathToMovie {

NSURL *url = [[NSURL alloc] initFileURLWithPath:pathToMovie];

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:url]) {

[library writeVideoAtPathToSavedPhotosAlbum:url

completionBlock:^(NSURL *assetURL, NSError *error){

dispatch_async(dispatch_get_main_queue(), ^{

if (error) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Video Saving Failed"  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil, nil];

[alert show];

}else{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Video Saved" message:@"Saved To Photo Album"  delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];

[alert show];

}

});

}];

}

}

时间: 2024-10-13 06:02:34

GPUImage 视频录制加滤镜的相关文章

iOS上用GPUImage给视频加滤镜

最近在做一个需要给已有视频加滤镜的app,不是实时滤镜,而是给已经存在的视频加滤镜. 虽然网上有很多关于GPUImage的博客,但大多都是给图片加上滤镜或者是直接在摄像头上加上的实时滤镜,找了很久之后..... 发现在github上本来就有..... 但是在网上找,却没有说很多人给出这样的滤镜教程,这里简单给分享一下下. 1. 首先,什么是GPUImage?详细请度娘之,简单点来说,就是一个用GPU来处理图片和视频的第三方库. 2. 给图像加滤镜,如果是只加滤镜,那么网上有很多的教程,这里就不细

github视频录制播放相关功能-参考

lookingstars/JZVideoDemo  视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo  iOS video cut ,also can add blackgroundmusic iOS 视频剪辑,视频添加背景音乐 Updated on 13 Jun 2014 Objective-C 139 50 835239104/KrVideoPlayerPlus  根据36Kr开源的KRVideoPlayer

【铜】第124篇 一对一视频录制(三)及网站注册 周四

关键词:一对一视频录制,网站注册 一.一对一视频录制 1.1 参考网址 https://www.webrtc-experiment.com/RecordRTC/ 视频录制下载网址: https://github.com/muaz-khan/RecordRTC 1.2  网页录制 本地: http://localhost:9001/Canvas-Recording/webpage-recording.html 作者: https://www.webrtc-experiment.com/Record

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

iOS开发系列--音频播放.录音.视频播放.拍照.视频录制 转载:http://www.cnblogs.com/kenshincui/p/4186022.html#avFoundationCamera --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音

Android 微信小视频录制功能实现

目录 开发之前 开发环境 相关知识点 开始开发 案例预览 案例分析 搭建布局 视频预览的实现 自定义双向缩减的进度条 录制事件的处理 长按录制 抬起保存 上滑取消 双击放大(变焦) 实现视频的录制 实现视频的停止 完整代码 总结 开发之前 这几天接触了一下和视频相关的控件, 所以, 继之前的微信摇一摇, 我想到了来实现一下微信小视频录制的功能, 它的功能点比较多, 我每天都抽出点时间来写写, 说实话, 有些东西还是比较费劲, 希望大家认真看看, 说得不对的地方还请大家在评论中指正. 废话不多说,

音频播放、录音、视频播放、拍照、视频录制-b

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照

利用FFmpeg玩转Android视频录制与压缩(二)<转>

转载出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个月,身边很多人的女票已经分了又合,合了又分,本屌依旧骄傲单身.上一次啊我们大致说了一些简单的FFmpeg命令以及Java层简单的调用方式,然后有很多朋友在github或者csdn上给我留言,很多时候我都选择避而不答,原因是本库以前用的so包是不开源的,我根本改不了里面东西.但是这一次啊我们玩点大的,我重新编译了FFm

android 视频录制 混淆打包 之native层 异常的解决

原文地址:http://www.cnblogs.com/linguanh/    (滑至文章末,直接看解决方法) 问题起因: 前5天,因为项目里面有个类似 仿微信 视频录制的功能, 先是上网找了个 开源项目:https://github.com/qdrzwd/VideoRecorder,下载下来,在 debug 非混淆的模式下 测试了几次,觉得效果还不错,便在它的基础上进行了 二次开发. 于当天晚上整合好项目,准备第一次的混淆打包(release模式),然后第一次测试,结果,我意料中的事情发生了

Android 中使用MediaRecorder实现视频录制功能

设置视频录制的简易界面<SurfaceView android:id="@+id/surface" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_above="@+id/surface" android:layout_width="mat