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

这篇具有很好参考价值的文章主要介绍了【FFmpeg】学会添加水印,只要这一篇就足够。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

导语

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

文章结构

正文

文字水印

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

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

FFmpeg文字滤镜参数

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

我们来看一个使用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加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 时间水印

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加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 免费资料分享】领取方式见文章末尾

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 定时水印

有时候,我们并不希望视频中的水印一直显示,而是定期显示,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滤镜的主要参数如下:

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

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

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滤镜用来描述水印在视频的位置信息。图片水印实现后的效果如下:

 文章来源地址https://www.toymoban.com/news/detail-790699.html

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

当图片的背景色为纯色时(如纯白色),可以使用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滤镜,来指定前景和背景之间的比例从而实现半透明的效果。

效果:

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

水印缩放

我们的水印图片的大小有的时候可能相对较大,在视频中显示水印的区域有时候却很小,这个时候我们就需要对水印的大小进行缩放,水印的缩放主要通过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大小,效果如下:

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

视频水印

在一般的认知中,大家可能想不到,也不会使用另外的视频作为视频本身的水印,而实际上从技术的角度来讲,是可以做的到的,同样使用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滤镜来表示水印和视频之间的布局关系,上面一条命令是添加两个水印的命令,为简单起见吗,我们添加的是相同的水印,当然你也可以添加不同的水印来试试,具体的效果如下:

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 

我们再试着加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加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

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

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

效果:

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 

动图水印

读到这里,你可能也想到了,除了图片文字,视频,动图(常见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的效果:

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

 

 

ffmpeg加水印,流媒体服务器,Android音视频开发,音视频开发,音视频,实时音视频,视频编解码,计算机视觉,语音识别

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

结语

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

 

到了这里,关于【FFmpeg】学会添加水印,只要这一篇就足够的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 纯前端文档预览,还要支持所有主流格式,有这一篇就足够了

            纯前端的文档预览功能,是非常常见的需求,但就是这么简单的需求,难住了许多可爱的小伙伴们。别急,先访问一下解决方案,给你一个惊喜,再往下看: 文件在线预览DEMO 服务器文件预览DEMO Vue3纯前端文档预览演示 1. Vue2版本代码全面同步Vue3所有特性,支持

    2023年04月08日
    浏览(40)
  • Linux Vim的使用(超详细,只看这一篇就足够了!)

    开篇先上 vim 键盘神图 1)Vim 中的5种编辑模式 在命令行中执行 vim filename ,若 filename 已存在,则 filename 被打开显示其内容;若 firename 不存在,则Vim在第一次存盘时自动在硬盘上新建filename文件。 vim有5种模式:命令模式、输入模式、末行模式、可视化模式、查询模式。 1.命令

    2024年02月06日
    浏览(49)
  • Jenkins持续集成-有这一篇就足够了(基础环境搭建mac版)

    前言: 本人也是小白一枚,之所以写这篇文章主要目的是在实践中学习,既能留着以后给自己观看,还能给一些像我一样的小伙伴提供一些小小的帮助!所以大家加油吧! ···································································

    2023年04月08日
    浏览(40)
  • 报错:Torch not compiled with CUDA enabled看这一篇就足够了

      目录 1.CUDA下载安装步骤 2. Pytorch环境的配置 笔者计算机视觉研0刚入学为研一。近期在学习目标检测算法中的YOLO系列。在运行YOLO V1训练代码时,报出该错误 原因很简单:CUDA和Torch版本不兼容 遇到这类问题先检查电脑的CUDA支持版本:   打开cmd,输入 可以看到红框里的是电

    2024年02月04日
    浏览(35)
  • 数据结构—顺序表(如果想知道顺序表的全部基础知识点,那么只看这一篇就足够了!)

            前言:学习完了C语言的基础知识点之后,我们就需要使用我们所学的知识来进一步对存储在内存中的数据进行操作,这时候我们就需要学习数据结构。而这篇文章为数据结构中顺序表的讲解。 ✨✨✨ 这里是秋刀鱼不做梦的BLOG ✨✨✨ 想要了解更多内容可以访问我的

    2024年04月13日
    浏览(46)
  • CSS基础之伪类选择器(如果想知道CSS的伪类选择器知识点,那么只看这一篇就足够了!)

            前言:学习CSS就必须要学习选择器,在之前我们已经学习了基本选择器和复合选择器,但是还有几个选择器没有学习,这篇文章主要讲解伪类选择器。 ✨✨ ✨ 这里是秋刀鱼不做梦的BLOG ✨✨✨ 想要了解更多内容可以访问我的主页 秋刀鱼不做梦-CSDN博客 那么废话不多

    2024年04月17日
    浏览(47)
  • 大学生Python期末复习冲刺(有这一篇足够)

    还愁要自己总结知识点?有这一篇就足够 👌🏻   干货满满不看后悔 👍👍👍 📝个人主页→数据挖掘博主ZTLJQ的主页 ​ 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 数据类型和变量 👑1、数字类型(int) 1.浮点

    2024年02月03日
    浏览(47)
  • 如何在Spring Boot中使用OpenFeign,这一篇足够了。

    第一章 如何在Spring Boot中使用OpenFeign,这一篇足够了。 第二章 OpenFeign修改默认通讯协议Https 第三章 OpenFeign默认通讯方式修改成OkHttp,包含FeignConfigruation自定义、OkHttp客户端自定义详细配置介绍 OpenFeign是一个声明式、模板化的HTTP客户端,可以帮助我们更加便捷地编写基于H

    2024年02月07日
    浏览(42)
  • 本地项目托管到 Gitee 详细步骤,手把手教学,就这一篇博客足够

    gitee官网: https://gitee.com/ 首先创建自己的账户密码, 记住账户密码 ,后面上传的时候可能会用到 【 + 】 = 【 新建仓库 】 = 【 按下图填信息 】 = 【 点击创建 】 4.1 首先 配置用户名和邮箱 ,用户名可任意,邮箱必须为可用邮箱 下面两条命令可以检查邮箱是否配置成功 注:

    2023年04月08日
    浏览(42)
  • SpringBoot3之配置文件(学习SpringBoot3的配置这一篇足够)

    1.1 SpringBoot3简介 SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(说明:SpringBoot底层是Spring) ,大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术! SpringBoot的主要目标是: 为所有 Spring 开发提供更快速、可广泛访问的入

    2024年01月18日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包