专栏首页用户1692782的专栏学会添加水印,只要这一篇就足够

学会添加水印,只要这一篇就足够

打算写这样一篇文章很久了,算是对过往的一种总结,也希望能获得更多的反馈继续迭代。在这个人类的主要信息载体已经变为视频的年代,水印的添加也成为了一个许多人不可或缺的技能,对于技术人来讲,那就更不用提。本文详细的介绍了通过FFmpeg为视频添加各种各样的水印的方法,包括文字,时间,图片,多个图片,透明,动图等,实在有些干燥,实在太有用了,真心希望能帮到大家。如果你也觉得有用,就给个反馈,点赞,再看,收藏,转发,关注,打赏,都可以(不要再说下一次一定了),本号作者已饥不择食。

导语

众所周知,FFmpeg可以为视频添加水印,主要用来标记视频所属标记,有时也可以兼顾美观,你可能没想到,用FFmpeg可以添加文字水印,可以添加图片水印,可以添加视频水印,还可以添加动态图片水印,可以实现水印的透明,还可以添加多个水印,而这一切都可以通过FFmpeg的诸多filter(可以理解为滤镜)来实现。行了,不吹他了,我们来看看史上最全的加水印的文章吧。

文章结构

正文

文字水印

在视频中增加文字水印需要准备的条件比较多,需要有文字字库处理的相关文件,在编译FFmpeg时需要支持FreeType, FontConfig, iconv, 系统中需要有相关的字库(官网下载的最新版本可运行版本基本不用再考虑这些问题了)。

在FFmpeg中增加纯字母水印主要使用drawtext滤镜进行操作,drawtext滤镜相关的参数如下:

FFmpeg文字滤镜参数

参数

类型

说明

fontfile

字符串

字体文件

text

字符串

文字

textfile

字符串

文字文件

fontcolor

色彩

字体颜色

box

布尔

文字区域背景框

boxcolor

色彩

展示字体的区域块的颜色

fontsize

整数

显示字体大小

font

字符串

字体名称(默认为Sans字体)

x

整数

文字显示的x坐标

y

整数

文字显示的y坐标

我们来看一个使用drawtext滤镜实现文字水印的例子:

ffmpeg -i test.mp4 -vf "drawtext=fontsize=100:fontfile=lazy.ttf:text='hello world':x=20:y=20:fontcolor=green:box=1:boxcolor=yellow" out.mp4

其中,fontsize表示字体大小,fontfile表示字体格式,text中是文字水印显示的具体文字内容,x和y表示的是水印在视频中开始的位置,fontcolor表示水印中字体的颜色,box=1表示有边框,boxcolor表示边框的背景色。

效果如下:

时间水印

FFmpeg不仅可以通过drawtext滤镜使用文字作为水印,文字部分也可以使用当前时间作为显示,只需修改text部分即可。修改后的命令如下:

ffmpeg -re -i test.mp4 -vf "drawtext=fontsize=60:fontfile=lazy.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" out_time.mp4

使用时间作为水印的显示效果:

定时水印

有时候,我们并不希望视频中的水印一直显示,而是定期显示,FFmpeg也支持这样定期的显示水印,我们直接看一条中每3秒显示一次水印的命令如下:

ffmpeg -re -i test.mp4 -vf "drawtext=fontsize=60:fontfile=lazy.ttf:text='{localtime\:%Y\-%m-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow:enable=lt(mod(t\, 3)\, 1)" out.mp4

我们依然使用drawtext滤镜,只是增加了enable=lt滤镜,实现3秒显示一次水印的效果。

具体效果如下:

图片水印

当然了,FFmpeg除了可以向视频添加文字水印之外,我们最常见也是最常用的就是向视频添加图片水印了,为视频添加图片水印可以使用movie滤镜,movie滤镜的主要参数如下:

参数

类型

说明

filename

字符串

输入的文件名,可以是文件、协议,设备

format_name,f

字符串

输入的封装格式

stream_index,si

整数

输入的流索引编号

seek_point,sp

浮点数

Seek输入流的时间位置

stream,s

字符串

输入的多个流的流信息

loop

整数

循环次数

discontinuity

时间差值

支持跳动的时间戳差值

我们添加水印一般需要首先生成一个水印,这里推荐一个在线制作水印的网站,供测试用:

http://www.asoft.cn/wm/

生成水印图片之后,我们就可以通过movie滤镜为视频添加水印,命令如下:

ffmpeg -i test.mp4 -vf "movie=logo.jpg[wm];[in][wm]overlay=30:10[out]" image_out.mp4

命令中-vf指定了使用滤镜,movie为这里使用的滤镜,overlay滤镜用来描述水印在视频的位置信息。图片水印实现后的效果如下:

当图片的背景色为纯色时(如纯白色),可以使用movie与colorkey滤镜做配合做成半透明效果:

如:

ffmpeg -i test.mp4 -vf "movie=logo.jpg,colorkey=white:0.01:1.0 [wm]; [in] [wm] overlay=30:10 [out]" image1_out.mp4

这里实现半透明的效果主要通过colorkey滤镜,来指定前景和背景之间的比例从而实现半透明的效果。

效果:

水印缩放

我们的水印图片的大小有的时候可能相对较大,在视频中显示水印的区域有时候却很小,这个时候我们就需要对水印的大小进行缩放,水印的缩放主要通过scale滤镜来实现,其参数就是缩放后的width和height,看一条添缩放后水印的命令:

ffmpeg -i in.mp4 -vf "movie=logo.jpg,scale=50:10,colorkey=white:0.01:1.0 [wm]; [in] [wm] overlay=30:10 [out]" in_out_watermask_scale.mp4

scale=50:10表示把原始水印缩放到100x50大小,效果如下:

视频水印

在一般的认知中,大家可能想不到,也不会使用另外的视频作为视频本身的水印,而实际上从技术的角度来讲,是可以做的到的,同样使用movie滤镜,只需把之前水印图片的文件名,替换成要作为水印的视频的文件名即可,是不是很神奇,哈哈。我们来看一个以视频作为水印的命令:

ffmpeg -i in.mp4 -vf "movie=video_watermark.mp4,scale=100:100,colorkey=white:0.01:1.0 [wm]; [in] [wm] overlay=30:10 [out]" in_out_watermark_scale_video.mp4

效果:

多个水印

其实把视频作为视频的水印不算什么,我们还可以为同一个视频添加多个水印,具体添加多少,按照FFmpeg强大的处理能力来讲,理论上没有上限,但是添加太多了,一是命令行看起来会天晕地旋,二是在视频本身添加太多的水印会有一种喧宾夺主的感觉,就很没必要了。我们来看看如何添加多个水印。

命令如下:

ffmpeg -i in.mp4 -i logo.png -i logo.png -filter_complex "overlay=5:5, overlay=x=W-w:y=5" in_out_mul_watermark.mp4

添加多个水印,我们使用了filter_complex滤镜,由于是多个,需要多次输入-i,并将视频本身和水印作为输入,同样使用overlay滤镜来表示水印和视频之间的布局关系,上面一条命令是添加两个水印的命令,为简单起见吗,我们添加的是相同的水印,当然你也可以添加不同的水印来试试,具体的效果如下:

我们再试着加4个水印看看效果:

命令:

ffmpeg -i in.mp4 -i logo.png -i logo.png -i logo.png -i logo.png -filter_complex "overlay=5:5, overlay=x=400:y=5, overlay=x=5:y=200, overlay=x=400:y=200" in_out_mul_watermark.mp4

效果:

扩展一下,我们还可以把每一个水印实现透明的效果,命令如下:

ffmpeg -i in.mp4 -i logo.png -i logo.png -i logo.png -i logo.png -filter_complex "[1:v]scale=160:90,format=yuva444p,colorchannelmixer=aa=0.4[img1];[2:v]scale=160:90,format=yuva444p,colorchannelmixer=aa=0.4[img2];[3:v]scale=160:90,format=yuva444p,colorchannelmixer=aa=0.4[img3];[4:v]scale=160:90,format=yuva444p,colorchannelmixer=aa=0.4[img4];[0:v][img1]overlay=x=5:y=5[01];[01][img2]overlay=x=400:y=5[012];[012][img3]overlay=x=5:y=200[0123];[0123][img4]overlay=x=400:y=200" in_out_mul_watermark.mp4

效果:

动图水印

读到这里,你可能也想到了,除了图片文字,视频,动图(常见gif)作为水印也是很广泛的需求。FFmpeg既然可以将视频作为水印添加,那么将动图作为水印当然也不在话下。先看一个添加gif图循环作为水印的命令:

ffmpeg -i in.mp4 -ignore_loop 0 -i dongtu.gif -filter_complex "[1:v]scale=192:108[wm];[0:v][wm]overlay=0:H-h:shortest=1" in_out_dynamic_watermark.mp4

命令中-ignore_loop用来标识是否循环显示动图,动图同样使用-filter_complex滤镜来实现,使用scale缩放,使用overlay标明布局。下面是gif作为动图的效果:

透明水印

对于水印而言,我们想把它加到视频里,但很多时候我们又不希望它影响到原始的视频,这样,水印的透明功能就显得比较不可或缺了。在添加多个水印的部分,我们试着将多个水印实现了透明的效果。一般而言水印图片是自带alpha通道的图片或者说是底色是纯色,如纯白,这些水印要实现透明效果通过colorkey的滤镜一般可以实现。但是往往很多水印图片并不具备这样的条件,对于这种情况,我们也不是束手无策,我们同样可以通过format,colorchannelmixer等滤镜来实现水印的透明效果。先给出一个实现水印透明的命令如下:

ffmpeg -i in.mp4 -vf "movie=logo.jpg,format=yuva444p,colorchannelmixer=aa=0.9[wm];[in][wm]overlay=10:30[out]" alpha_out.mp4

滤镜format指定了像素的格式,例子中为yuva444p,a代表的是alpha通道,通过滤镜,首先将原始图片转换为带有透明通道的图片,然后使用colorchannelmixer滤镜将水印与原始视频混合,aa表示水印的透明程度,值为1表示不透明,0表示全透明,下面分别是透明度aa=0.9,aa=0.5,aa=0.1的效果:

图中从左到右依次为aa=0.9,aa=0.5,aa=0.1的效果。

结语

关于使用FFmpeg添加格式各样的水印的方法,这一篇应该已经很全面了,希望能帮到更多的人。点个赞,收个藏,应对将来的不时之需。点在看,分个享,触达更多有需要的人。

往期相关推荐

06——FFmpeg为视频添加水印

07——FFmpeg去除水印

本文分享自微信公众号 - 视界音你而不同(WorldOfVideoAndAudio),作者:马龙飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SFFAI分享 | 张杰:针对图像处理网络的模型水印【附PPT与视频资料】

    深度学习已经在各个领域取得了巨大的成功,诸如图像分类、语音识别、自然语言处理等。训练一个性能好的深度学习模型往往需要大量的高质量数据和昂贵的计算资源。然而,这些...

    马上科普尚尚
  • 基于GAN的图像水印去除器,效果堪比PS高手

    简介:李翔,国内某互联网大厂AI民工,前携程酒店图像技术负责人,计算机视觉和深度学习重度爱好者,在ICCV和CVPR等会议上发表论文十余篇。

    AI科技大本营
  • 从这个玩转图片水印的“神应用”,看懂生成对抗网络的前世今生

    导读:当前互联网飞速发展,越来越多的公司、组织和个人都选择在网上展示和分享图像。为了保护图像版权,大家都会选择在图像上打上透明或者半透明的水印。随着水印被广泛地...

    华章科技
  • 业界 | 谷歌提出多图像抠图算法,并弥补水印技术的一致性漏洞

    机器之心
  • 给图片加水印--手把手教新码农如何把技术变成产品

    加水印是为图片声明版权出处的一种常用方法。 平常都是写技术文章,文章的重点在技术本身,照片往往不需要加水印,或者需要加也不多,祭出神器PhotoShop很快就...

    俺踏月色而来
  • 8款免费无水印视频剪辑软件!2020年最新版

    无论是出于分享、娱乐或是教育的目的,视频都被广泛应用在社交平台、短视频APP甚至是新闻平台。与此同时,个人和自媒体对于视频剪辑软件的需求也随之增加。比如,你可能...

    MediaTech
  • 探究 canvas 绘图中撤销(undo)功能的实现方式

    最近在做网页版图片处理相关的项目,也算是初入了 canvas 的坑。项目需求中有一个给图片添加水印的功能。我们知道,在浏览器端实现图片添加水印功能,通常的做法就...

    逆葵
  • 浅谈屏幕拍摄泄密跟踪的检测技术

    前言关注屏幕拍照安全检测技术介绍数字盲水印屏幕矢量水印摄像头检测屏摄检测缓解办法参考资料

    Ramos
  • AI模型被「骗」怎么破?《燃烧吧!天才程序员》冠军团队解决方案出炉

    近日,由蚂蚁集团、清华大学等组织共同协办的首届「Inclusion|A-tech 科技精英赛」(以下简称 A-tech 大赛)圆满落幕。奥比中光科技集团股份有限...

    机器之心

扫码关注云+社区

领取腾讯云代金券