音视频添 加水印

一、文字水印

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

来看一下drawtext的滤镜参数

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

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

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

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

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

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

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

修改透明度

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

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

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

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

(3)有些时候文字水印希望以本地时间作为水印内容,可以在drawtext滤镜中配合一些特殊用法来完成,在

text中显示本地当前时间,格式为年月日时分秒的方式,

cpp 复制代码
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,否则时间不对。

cpp 复制代码
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秒钟显示一次文字水印:

cpp 复制代码
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)跑马灯效果

cpp 复制代码
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"

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

cpp 复制代码
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 时间差值 支持跳动的时间戳差值
cpp 复制代码
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

相关推荐
cnnews11 分钟前
Ubuntu 编译 postmarketOS
linux·运维·arm开发·ubuntu·github·音视频
小五兄弟4 小时前
AI仿真人剧出海创收指南
经验分享·音视频·媒体
音视频牛哥5 小时前
从AV2到H.266/VVC:下一代视频编码的技术分野与SmartMediaKit的演进价值
音视频·smartmediakit·av2视频编码·h.266 vvc·av2与vvc区别·av1视频编码·lcevc增强编码
嘟哩DuliDuli5 小时前
AI 视频局部重做,怎么避免破坏成片
人工智能·安全·ai·音视频·软件工程
m0_614523556 小时前
工程工作流:一句需求做视频封面,先拆主题再做小图验收
人工智能·音视频
沐禾安信6 小时前
抖音的bgm 想保存? 3个音频提取工具,一键分离
音视频·音频·音频转换·视频转换
Peter-Code7 小时前
视频人脸马赛克逐帧处理技术方案解析
音视频
TechVoyager_82468 小时前
从TMDS输入到音视频分离:IT66021FN接收芯片技术详解
音视频·色彩空间转换·it66021·hdmi1.4b·tmds·音视频分离·hdcp1.4
不cong明的亚子18 小时前
web live多屏互动平台
javascript·经验分享·音视频
ACP广源盛1392462567319 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频