这篇博客原计划是在去年10月末写完的。。。但是因为之后开始人生第一次工作。。就一直拖到了现在。。。跳票了真是十分抱歉(鞠躬ing)

那么如题,主要说一下怎么用GPUImage这个库来给视频添加水印。

  1. 先要了解, 水印其实就是一张图片,给视频加上水印,其实就是给这个视频的每一帧叠加上一张图片,而且图片的位置和大小都是固定的,这样思路就很清晰了。

  2. 因为是叠加,所以需要用到blendFilter(blendFilter有很多种,我这里就直接用了GPUImageAlphaBlendFilter,主要用来做半透明的混合的,简直是水印专用!)

  3. 因为某些水印是带有动画效果的,也就是随着视频的播放,水印的位置和大小虽然不变,但是水印的图片(image)可能会改变,这是做动画效果的一种方法;另外的方法当然就是改变位置和大小了。这样的效果可以通过使用GPUImageTransformFilter来制作,通过setAffineTransform:可以改变从GPUImageTransformFilter中流出的图像数据,具体请参考coreAnimation。

下面给出代码:
1.准备工作,导入要编辑的视频

    NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"demo1"    withExtension:@"mp4"];_movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];_movieFile.runBenchmark = YES;_movieFile.playAtActualSpeed = NO;//获取视频的大小(画面大小),来确定水印的位置和大小;AVAsset *fileas = [AVAsset assetWithURL:sampleURL];CGSize movieSize = fileas.naturalSize;

2.准备滤镜,因为如果直接使用blendFilter的话会把水印图像直接放大来做叠加,所以这里我用了GPUImageUIElement,设置一个跟视频画面大小一样的View,在这个View里面加入水印的ImageView,调整位置,之后把这个View给添加到视频里面去。

    UIImage *image = [UIImage imageNamed:@"sample01"];UIImageView *imv = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 800, 560)];[imv setImage:image];UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(0, 0, movieSize.width, movieSize.height)];vi.backgroundColor = [UIColor clearColor];imv.center = CGPointMake(vi.bounds.size.width, vi.bounds.size.height + 80);[vi addSubview:imv];_landInput = [[GPUImageUIElement alloc] initWithView:vi];_landBlendFilter = [[GPUImageAlphaBlendFilter alloc] init];//mix即为叠加后的透明度,这里就直接写1.0了_landBlendFilter.mix = 1.0f;

给上输出路径,就是编辑好的视频的存放地址

    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.mp4"];unlink([pathToMovie UTF8String]); //如果视频存在,删掉!NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

这里不知为何,我用GPUImageMovie直接读取出来的视频数据如果target是blendFilter就是nil…..先给一个普通的filter再给blendFilter就没有问题,所以就直接先add到GPUImageBrightnessFilter里面去,设置了亮度为平常程度,就不会有影响了。

    _movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640.0, 480.0)];_movieWriter.transform = CGAffineTransformMakeScale(0.3, 0.3);_brightnessFilter = [[GPUImageBrightnessFilter alloc] init];_brightnessFilter.brightness = 0.0f;[_movieFile addTarget:_brightnessFilter];[_brightnessFilter addTarget:_landBlendFilter];[_landInput addTarget:_landBlendFilter];[_landBlendFilter addTarget:_movieWriter];

如果需要做动画效果的话

[_blendFilter setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime currentTime) {//在这里改变水印的位置、大小等属性;//直接改imageView的frame就好,修改了记得要update就好[weakSelf.landInput update];}];

导出视频,写入相册;

    __weak ViewController *weakSelf = self;_movieWriter.shouldPassthroughAudio = YES;_movieFile.audioEncodingTarget = _movieWriter;[_movieFile enableSynchronizedEncodingUsingMovieWriter:_movieWriter];[_movieWriter startRecording];[_movieFile startProcessing];[_movieWriter setCompletionBlock:^{[weakSelf.filter removeTarget:weakSelf.movieWriter];[weakSelf.movieWriter finishRecording];dispatch_async(dispatch_get_main_queue(), ^{ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];[library writeVideoAtPathToSavedPhotosAlbum:[NSURL   fileURLWithPath:pathToMovie] completionBlock:^(NSURL *assetURL, NSError *error) {dispatch_async(dispatch_get_main_queue(), ^{NSLog(@"---finished!!!!!");[[[UIAlertView alloc] initWithTitle:@"" message:@"已经成功写入相册!" delegate:nil cancelButtonTitle:@"好的" otherButtonTitles: nil] show];});}];});}];

最后给一个效果预览:

这里给出Demo的链接:http://pan.baidu.com/s/1eRzfP6a demo传到百度云上面去了,打包的时候把demo里面的视频和图片都去掉了,记得先把要编辑的视频URL给改掉。

用GPUImage来给视频加入水印相关推荐

  1. 安装版本swf文件转换其他视频格式工具(例:swf to mp4) ,转换后的视频无水印...

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 1.卸载你当前呆板中的Adobe Flash Player,安装11.2.202.235版本 ...

  2. lodop直接打印怎么去除水印_手机视频有水印怎么办?一招教你轻松去除,不学真是可惜了...

    随着短视频的兴起,现在我们很多地方都需要用到短视频.但是大部分视频都有水印,这是比较烦人的,而且视频上的水印还不像图片那么容易去掉,今天教分享一个非常简单的视频去水印的办法. 由于我们手机是没有自带这 ...

  3. php怎么给视频加水印,视频怎么加水印 添加文字水印和图片水印 给视频加水印的软件...

    昨天由于台风"妮妲"来了深圳,所以在家休息了一天,而且势汹汹的台风"妮妲"于2日03时35分在深圳市大鹏半岛登陆,登陆时风力达到14级,成为近年来正面登陆珠江三 ...

  4. 电脑视频加水印软件 视频消重

              电脑视频加水印软件 视频消重          主页签名里千万不要放手机号微信号等联系方式,到了后期有了粉丝基础就可以啦           关注祥瑞自媒体,了解更多视频操作方面干 ...

  5. 电脑视频加水印怎么加?

    电脑视频加水印怎么加?很多小伙伴在工作中都需要和视频打交道,例如公司的宣传视频,产品的介绍视频等,都需要对外发布或者发送给合伙伙伴.现在大家对视频版权的保护意识越来越强,为了保护公司对外发布的视频被别 ...

  6. 视频加水印怎么加?简单的方法

    视频加水印怎么加?工作中我们经常需要给视频添加水印(例如logo水印和文字水印),尤其是一些重要的视频,给视频添加水印的好处有两个:其一是可以保护视频内容不被别人随意复制盗用:其二是添加自己的专属水印 ...

  7. 视频加水印,怎么给视频加水印?

    视频加水印,怎么给视频加水印?现在是全民自媒体的时代,很多人在各种视频平台都都自己的主页,会将自己拍摄制作的原创视频分享到上面,让大家一起欣赏.这时候如果你发布的视频上没有添加水印,那么视频可能会被别 ...

  8. 视频怎么加水印上去,视频加水印怎么加?

    视频怎么加水印上去,视频加水印怎么加?现在有很多的自媒体创业者,他们会将自己创作的视频作品分享到各种平台,给别人观看的同时给自己带来一定的收益.互联网是一个开放的平台,也存在一个视频搬运工,专门盗取别 ...

  9. 想了解视频加水印软件哪个好?这2个实用的软件分享给你

    我有个朋友她很喜欢录制日常生活的一些小片段,然后制作成短视频分享到社交平台上,但最近她发现有人擅自将她的视频进行搬运,这让她很是苦恼.于是我建议她给自己的视频都加上自己的水印,避免被别人利用了.那你们 ...

最新文章

  1. 人工智能的2020:泡沫破灭?还是最后的狂欢?
  2. 皮一皮:这小伙子怎么能掌握这么多高深技术!!!
  3. automation服务器不能创建对象是什么意思_从运营商角度来考虑为什么NAT不能搭建服务器?...
  4. nginx虚拟目录实现两个后台使用
  5. (OS X) OpenCV架构x86_64的未定义符号:错误(OpenCV Undefined symbols for architecture x86_64: error)...
  6. 计算机视觉实验数学形态学,计算机视觉形态学边缘检测.doc
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的酒店管理系统
  8. crc java_求这个CRC16算法的java版实现!!!
  9. python读取并可视化npy格式的深度图文件以及将其保存为jpg图片的方法
  10. 电脑html怎么连接投影仪,笔记本Win10电脑外接显示器(投影仪)的设置步骤
  11. 图片标注问题image_caption
  12. python数据库进阶
  13. 优质的凉亭 亭子 亭台ps后期素材素材推荐,不容错过
  14. 人工智能的应用无人驾驶技术
  15. 阿里云安全组规则授权对象设置为固定IP段访问
  16. (开源)带有笔顺的字体
  17. 贝叶斯分析-学习笔记(超干的干货)
  18. 与二次元老婆邂逅的游戏的创建过程(一)
  19. 极高水平的电吉他音源 Orange Tree Samples Evolution Stratosphere Kontakt
  20. Launcher3--初识Launcher3

热门文章

  1. ssh中前后台的数据交互
  2. Datenlord | Rust实现RDMA异步编程(二):async Rust 封装 UCX 通信库
  3. 小马哥--高仿红米1S 刷机 主板型号T7215 刷机拆机主板图与开机界面图
  4. 658. 找到 K 个最接近的元素
  5. 随机森林案例:回归森林填补缺失值
  6. android 7 plus,手机别瞎买,iPhone7plus相当于什么档次的安卓机?看完就懂了!
  7. vue cli记录一次因三方依赖插件未进行bable编译造成的ie不兼容问题
  8. vue源码学习第六篇--插槽(slot)
  9. java 周次_java处理年、月、周次以及起至日期大全
  10. 红帽云邮企业邮箱的关注点