接着昨天继续往下写,既然能批量添加元数据,那自然也少不了批量添加图片与视频显式水印这档子事情

但如果你使用搜索引擎,你就会发现基本都是广告,可能会有少数好心人会告诉你用Python解决

对于这种现状,那自然忍不了啦😛下面说说我的解决方案

FFmpeg给图片和视频添加水印

这不难,问大模型就能得到答案,这里贴上我试过可行的代码

先提前准备好一种中文字体,命名为Q.ttf

给JPG图片右下角添加水印

1
ffmpeg -i 1.jpg -vf "drawtext=text='此图片为AI生成':fontfile=Q.ttf:fontsize=24:x=W-tw:y=H-th-10:fontcolor=white:shadowcolor=black@0.5:shadowx=2:shadowy=2" -codec:a copy output.jpg

给MP4图片右下角添加水印

1
ffmpeg -i 1.mp4 -vf "drawtext=text='此视频为AI生成':fontfile=Q.ttf:fontsize=24:x=W-tw:y=H-th-10:fontcolor=white:shadowcolor=black@0.5:shadowx=2:shadowy=2" -codec:a copy output.mp4

这里肯定有人会问了:我用Windows去哪里下FFmpeg?

首选自然是官网,官网给了两个可供下载的编译成品(但这两个版本都不支持CUDA)

想要支持CUDA的FFpmeg,自行编译,丰衣足食(doge🧐

其实还有另外的法子,自行搜索格式工厂,找到格式编译的FFmpeg,用格式工厂编译的FFmpeg,实测他们编译的FFmeg支持CUDA操作

通过Nvidia显卡加水印的方案如下:

Note:需要提前准备好想要打的水印图片

1
ffmpeg -i 1.mp4 -i watermark.png -filter_complex "[1:v][0:v]scale2ref=iw*0.1:ih*0.1[wm][main];[main][wm]overlay=W-w-10:H-h-10"-c:v h264_nvenc -c:a copy output1.mp4

使用NVENC加速编码,实测确实能快许多

使用CUDA API给图片添加水印

为什么会有这条?问就是有时候就是得到些奇怪的需求,要求使用显卡给图片加水印(不是视频)

搜资料的时候发现老黄的CUDA API样例里就有加水印的样例,其中的nvJPEG就可以实现加水印的操作

Note:这里默认大家已经配置好了CUDA编译环境,如果没有请自行忽略本章节😄

nvJPEG/Image-Resize-WaterMark

如果你不想Resize图片,那你修改下CPP文件中有关长高的变量即可。关于用法,Readme写的很清楚,这里不再赘述

实测效果还是挺不错的,RTX4090平均8ms一张(分辨率686×1024,354KB大小),5000张直接把24GB显存干满

结语

关于水印的事情可以暂时告一段落了🥱

实习的日子也进入倒计时了,该准备回学校毕设答辩了