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

导语

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

文章结构

正文

文字水印

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

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

FFmpeg文字滤镜参数

我们来看一个使用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滤镜的主要参数如下:

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

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

【FFmpeg】学会添加水印,只要这一篇就足够相关推荐

  1. 幼儿园体育游戏电子计算机教案,幼儿园体育游戏《学会跳绳》教案三篇

    [导语]让幼儿体验创造性玩绳的乐趣,引导幼儿能变换多种花样玩绳,发展幼儿动作的协调能力.增强身体机能,教幼儿抡长绳,跳大绳,锻炼孩子的跳跃能力以及孩子的节奏感.无忧考网准备了以下教案,希望对你有帮助! ...

  2. 移动端——less(学会less,这一篇就够了)

    学会less,这一篇就够了. 前面我们学习和接触的都是PC端,今天我们来了解一个不同的界面--移动端,它和PC端的编译有什么不同呢,我们一起来看看吧! 文章目录 前言 文章目录 前言 一.预处理语言的 ...

  3. ffmpeg 视频添加水印 logo

    1.使用ffmpeg 视频添加水印(logo).在视频行业已经工作了两年多了,最近抽时间把一些处理视频的方法和经验写下来,一来做个记录,二来分享一下一起学习进步. ffmpeg -i D:\input ...

  4. 中学生应该学会使用计算机作文,初中生学会选择的作文三篇

    [导语]我们一生中会遇到无数选择,我们更要从一件件事情中学会选择.<初中生学会选择的作文三篇>是无忧考网为大家准备的,希望对大家有帮助. 篇一 小时候,在诚实和高分之间,有人选择了高分:手 ...

  5. 图解 Kafka,看本篇就足够啦

    Kafka 是主流的消息流系统,其中的概念还是比较多的,下面通过图示的方式来梳理一下 Kafka 的核心概念,以便在我们的头脑中有一个清晰的认识. 基础 Kafka 是一套流处理系统,可以让后端服务轻 ...

  6. android自定义视频列表,Android仿京东天猫列表页播视频看这一篇就足够了

    阅读本文解决什么问题? 解决android 滑动列表页自动播视频中的一些技术难点.助力更好的实现类似需求.不涉及到播放器的具体编解码技术,因为各家用的播放器可能都不一样(其实是我不会~) 何时播视频最 ...

  7. FFmpeg 视频添加水印图片

    最近学习FFmpeg编程开发,想写个视频添加水印图片的demo(未对音频或字幕进行处理),代码编写中遇见很多问题,在这里进行做一个笔记来,易于自己记忆和理解.期间在网上找demo,发现很多都是ffmp ...

  8. 容我喝一杯 java_花一杯茶的时间,学会Java反射(实用篇)

    前言 之前,我写了一篇关于java反射的使用--花一杯茶的时间,学会Java反射(基础篇),今天就拿一些实例和应用给大家看看如何在项目中用反射. 实例 反射可以提高代码的扩展性,低耦合,高内聚.就拿工 ...

  9. FFmpeg的Android平台移植—编译篇(验证可用)

    摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程. 环境准备: Ubuntu12.04 TLS android-ndk-r9d-linux-x86_64.t ...

最新文章

  1. Opera在本博客的发文方法,fedora8下
  2. htmlunit 发http请求
  3. 设计模式:讲在设计模式之前
  4. 【计蒜客 - 2019南昌邀请赛网络赛 - H】Coloring Game(找规律,思维dp)
  5. pytorch 训练过程acc_Pytorch之Softmax多分类任务
  6. [转载] python中的数组类型及特点
  7. Android自定义柱状图表效果
  8. Windows 下 PHP 开发环境配置系列二(使用 MODx CMS)
  9. android create命令,phonegap运行android – create命令失败,退出代码8 – linux
  10. Win7安装IE10或IE11 离线安装注意问题
  11. 《缠中说禅108课》56:530 印花税当日行情图解
  12. 个人小项目原型图设计(主页)
  13. Windows10超级管理员账号权限受限的问题
  14. ros自己写避障算法_基于ROS的机器人室内环境探索、避障和目标跟踪方法与流程...
  15. 计算圆周率可以根据公式如下:请利用Python提供的itertools模块,我们来计算这个序列的前N项和——python
  16. AutoCAD2024最新版介绍及安装下载
  17. 循环左移和循环右移指令_11种孔加工固定循环指令+1个案例=完美解决孔加工问题...
  18. 【Linux】软件安装(三分钟教会你如何在linux下安装软件)
  19. JetBrains学生账号的申请
  20. k-近邻算法实现手写数字识别系统

热门文章

  1. 2006世界杯32强人体彩绘队服样式(法国)
  2. 同时安装 ensp HCL
  3. 关于Win7系统“U盘拒绝访问”解决问题
  4. 基于Android的“智慧校园”的设计与实现
  5. 16,verilog之锁存器和触发器
  6. 地面控制点的定义与作用_使用土弹簧模拟桩土共同作用
  7. BUUCTF-MISC:二维码
  8. OA软件从多方面体现企业人性化管理
  9. 第五章 数据的清洗与检验——操作题
  10. ImageJ二次开发-Java