音视频添 加水印

一、文字水印

在视频中增加文字水印需要准备的条件比较多,需要有文字字库处理的相关文件,在编译FFmpeg时需要支持FreeType、FontConfig、iconv,系统中需要有相关的字库,在FFmpeg中增加纯字母水印可以使用drawtext滤镜进行支持,下面就
来看一下drawtext的滤镜参数

参数类型说明
text字符串文字
textfile字符串文字文件
box布尔文字区域背景框(缺省false)
boxcolor色彩展示字体区域块的颜色
font字符串字体名称(默认为Sans字体)
fontsize整数显示字体的大小
x字符串缺省为0
y字符串缺省为0
alpha浮点数透明度(默认为1),值从0~1

(1)将文字的水印加在视频的左上角:

ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20"

将字体的颜色设置为绿色:

ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green"

如果想调整文字水印显示的位置,调整x与y参数的数值即可。

ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200"

修改透明度

ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200:alpha=0.5"

(2)文字水印还可以增加一个框,然后给框加上背景颜色:

ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':
fontcolor=green:box=1:boxcolor=yellow"

至此,文字水印的基础功能已经添加完成。

(3)有些时候文字水印希望以本地时间作为水印内容,可以在drawtext滤镜中配合一些特殊用法来完成,在
text中显示本地当前时间,格式为年月日时分秒的方式,

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

在使用ffmpeg转码存储到文件时需要加上-re,否则时间不对。

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

(4)在个别场景中,需要定时显示水印,定时不显示水印,这种方式同样可以配合drawtext滤镜进行处理,使
用drawtext与enable配合即可,例如每3秒钟显示一次文字水印:

ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:
boxcolor=yellow:enable=lt(mod(t\,3)\,1)"

在使用ffmpeg转码存储到文件时需要加上-re,否则时间不对。

(5)跑马灯效果

ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=
abs(sin(t))*h*0.7"

修改字体透明度,修改字体颜色

ffplay -i input.mp4 -vf "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='liaoqingfu':x=mod(50*t\,w):y=
abs(sin(t))*h*0.7:alpha=0.5:fontcolor=white:enable=lt(mod(t\,3)\,1)"

二、图片水印

FFmpeg除了可以向视频添加文字水印之外,还可以向视频添加图片水印、视频跑马灯等,本节将重点介绍如何为视频添加图片水印;为视频添加图片水印可以使用movie滤镜,下面就来熟悉一下movie滤镜的参数

参数类型说明
filename字符串输入的文件名,可以是文件,协议,设备
format_name, f字符串输入的封装格式
stream_index, si整数输入的流索引编号
seek_point, sp浮点数Seek输入流的时间位置
streams, s字符串输入的多个流的流信息
loop整数循环次数
discontinuity时间差值支持跳动的时间戳差值
ffmpeg -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]" output.mp4
Ø 原始视频文件路径:input.mp4
Ø 水印图片路径:logo.png
Ø 水印位置:(x,y)=(10,10)<=(left,top)距离左侧、顶部各10像素;
Ø 输出文件路径:output.mp4

overlay过滤器
描述:前景窗口(第二输入)覆盖在背景窗口(第一输入)的指定位置。
语法:overlay[=x:y[[:rgb={0, 1}]]
参数 x 和 y 是可选的,默认为 0。
参数 rgb 参数也是可选的,其值为 0 或 1,默认为 0。
参数说明:
x 从左上角的水平坐标,默认值为 0
y 从左上角的垂直坐标,默认值为 0
rgb 值为 0 表示输入颜色空间不改变,默认为 0;值为 1 表示将输入的颜色空间设置为 RGB

参数说明
main_w 或 W视频单帧图像宽度
main_h 或 H视频单帧图像高度
overlay_w水印图片的宽度
overlay_h水印图片的高度

对应地可以将overlay参数设置成如下值来改变水印图片的位置:

水印图片位置overlay值
左上角10:10
右上角main_w-overlay_w-10:10
左下角10:main_h-overlay_h-10
右下角main_w-overlay_w-10:main_h-overlay_h-10

在FFmpeg中加入图片水印有两种方式,一种是通过movie指定水印文件路径,另外一种方式是通过filter读取输入文件的流并指定为水印,这里重点介绍如何读取movie图片文件作为水印


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以GitFlow分支模型为基准的Git版本分支管理流程

以GitFlow分支模型为基准的Git版本分支管理流程 文章目录 以GitFlow分支模型为基准的Git版本分支管理流程GitFlow分支模型中的主要概念GitFlow的分支管理流程图版本号说明借助插件Git Flow Integration Plus实现分支模型管理其他模型TBD模型阿里AoneFlow模型 GitFlow分支模型中…

R语言数据管理

1.将变量加入列表中 > mydata<-data.frame(x1c(2,3,4,5),x2c(2,5,7,9)) > mydatax1 x2 1 2 2 2 3 5 3 4 7 4 5 9 > sumx<-x1x2 Error: object x1 not found > sumx<-mydata$x1mydata$x2 > sumx [1] 4 8 11 14 > ls() [1] "mydata&…

小小一个设置程序高级感拉满

手动设置 结果如下 代码设置&#xff1a; procedure TForm1.Button1Click(Sender: TObject); begin TStyleManager.TrySetStyle(cbxVclStyles.Text); end;procedure TForm1.FormCreate(Sender: TObject); var StyleName:string; begin for StyleName in TStyleManager.StyleNa…

java线程状态

图形说明: Thread.State源码注释: public enum State {/*** 新生状态&#xff1a;线程对象创建&#xff0c;但是还未start()*/NEW,/*** 线程处于可运行状态&#xff0c;但是这个可运行状态并不代表线程一定在虚拟机中执行。* 需要等待从操作系统获取到资源(比如处理器时间片…

【Npm】的安装和使用教程

前端工具及插件库 专栏收录该内容 24 篇文章1 订阅 订阅专栏 npm 一、安装配置 二、初始化配置文件 package.json package.lock.json 二、下载模块 2.1、下载指令 2.2、清理缓存 2.3、模块信息 2.4、npm i 与 npm ci 区别 三、其他指令 第三方模块是别人写好的一些文件&#xf…

Spark-Core核心算子

文章目录 一、数据源获取1、从集合中获取2、从外部存储系统创建3、从其它RDD中创建4、分区规则—load数据时 二、转换算子(Transformation)1、Value类型1.1 map()_1.2 mapPartitions()1.3 mapPartitionsWithIndex(不常用)1.4 filterMap()_扁平化&#xff08;合并流&#xff09;…

Java面试之斐波那契数列(Fibonacci)及其应用:青蛙跳台阶问题

文章目录 一、斐波那契数列问题1.1 题目1.2 什么是斐波那契数列1.3 效率很低的解法&#xff1a;递归1.4 递归缺点分析 二、比较好的解决办法2.1 保存数列中间项2.2 从下往上计算 三、公式法四、青蛙跳台阶问题4.1 题目及分析4.2 代码实现 一、斐波那契数列问题 1.1 题目 写一…

Paddle训练COCO-stuff数据集学习记录

COCO-stuff数据集 COCO-Stuff数据集对COCO数据集中全部164K图片做了像素级的标注。 80 thing classes, 91 stuff classes and 1 class ‘unlabeled’ 数据集下载 wget --directory-prefixdownloads http://images.cocodataset.org/zips/train2017.zip wget --directory-prefi…

如何精确掌握函数防抖和函数节流的使用?

前序 函数防抖&#xff08;Debouncing&#xff09;和函数节流&#xff08;Throttling&#xff09;都是用于控制函数执行频率的技术&#xff0c;通常在处理高频率触发的事件&#xff08;如窗口滚动、鼠标移动、输入框输入等&#xff09;时非常有用 一、核心概念 函数防抖 函…

C++系列--成员变量和成员函数的存储

空对象所占的内存为1&#xff0c;是为了区分空对象所占的内存位置。非空对象所占的内存按照实际的来。非静态成员变量属于类的对象上面。非静态成员函数和静态成员函数&#xff0c;静态成员变量都不属于类的成员上。 空对象所占的内存为1&#xff0c;是为了区分空对象所占的内…

XXL-JOB 分布式任务调度平台

目录 背景 项目架构 核心流程1——执行器自动注册 核心流程2——调度任务 特性——分片广播 背景 为什么需要任务调度平台? 单机定时任务 Java中传统的定时任务实现方案&#xff0c;比如JDK 1.3 提供的 Timer、JDK 1.5 提供的 ScheduledExecutorService、Spring 3.0 提…

聊聊jasypt的IVGenerator

序 本文主要研究一下jasypt的IVGenerator IVGenerator org/jasypt/salt/IVGenerator.java /*** <p>* Common interface for all IV generators which can be applied in digest* or encryption operations.* </p>* <p>* <b>Every implementation o…

huggingface下载模型文件(基础入门版)

huggingface是一个网站&#xff0c;类似于github&#xff0c;上面拥有众多开源的模型、数据集等资料&#xff0c;人工智能爱好者可以很方便的上面获取需要的数据&#xff0c;也可以上传训练好的模型&#xff0c;制作的数据集等。本文只介绍下载模型的方法&#xff0c;适合新手入…

nodejs设置镜像

1、npm镜像地址配置 -- 查看 npm 安装目录 npm root -g-- 查看 npm 配置信息 npm config list-- 查询当前镜像配置 npm get registry-- 或者仅修改 npm 命令镜像 -- 设置为淘宝镜像 npm config set registry https://registry.npmmirror.com -- 修改为官方镜像 npm config set…

win | wireshark | 在win上跑lua脚本 解析数据包

前提说明&#xff1a;之前是在linux 系统上配置的&#xff0c;然后现在 在配置lua 脚本 &#xff0c;然后 分析指定协议 的 数据包 其实流程也比较简单&#xff0c;但 逻辑需要缕清来 首先要把你 预先准备的 xxx.lua 文件放到wireshark 的安装文件中&#xff0c;&#xff08;我…

deque容器

1 deque容器基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低deque相对而言&#xff0c;对头部的插入删除速度回比vector快vector访问…

js中如何使用可选函数参数

js是网络的核心技术之一。大多数网站都使用它&#xff0c;并且所有现代网络浏览器都支持它&#xff0c;而不需要插件。在本文中&#xff0c;我们将讨论不同的提示和技巧&#xff0c;它们将帮助您进行日常 JavaScript 开发。 在 JavaScript 编码中&#xff0c;您经常需要将函数…

python实现MQTT协议(发布者,订阅者,topic)

python实现MQTT协议 一、简介 1.1 概述 本文章针对物联网MQTT协议完成python实现 1.2 环境 Apache-apollo创建brokerPython实现发布者和订阅者 1.3 内容 MQTT协议架构说明 &#xff1a; 利用仿真服务体会 MQTT协议 针对MQTT协议进行测试 任务1&#xff1a;MQTT协议应…

理解React页面渲染原理,如何优化React性能?

React JSX转换成真实DOM过程 当使用React编写应用程序时&#xff0c;可以使用JSX语法来描述用户界面的结构。JSX是一种类似于HTML的语法&#xff0c;但实际上它是一种JavaScript的扩展&#xff0c;用于定义React元素。React元素描述了我们想要在界面上看到的内容和结构。 在运…

maven搭建spring项目

前提 安装jdk 安装maven 安装eclipse 创建maven项目 搭建spring项目 pom.xml <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.4.RELEASE</version> </dependency&…