问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

FFMPEG视频水印处理完全指南:添加、旋转、控制与去除

创作时间:
作者:
@小白创作中心

FFMPEG视频水印处理完全指南:添加、旋转、控制与去除

引用
CSDN
1.
https://blog.csdn.net/ms44/article/details/145515790

FFMPEG是一个非常强大的多媒体处理工具,可以方便地为视频添加水印。在使用ffmpeg命令时,请确保环境变量已经配置好,可以直接调用ffmpeg.exe。推荐的做法是将FFMPEG的可执行文件放到一个目录下,并将该目录添加到系统环境变量中,这样可以随时随地调用。

1. 最简单的水印添加方法

使用以下命令可以将水印图片添加到视频的左上角:

ffmpeg -hide_banner -i src.mp4 -i watermark.png -filter_complex "overlay=x=0:y=0" target.mp4 -y
  • src.mp4:原视频文件
  • watermark.png:水印图片
  • target.mp4:添加水印后的输出视频
  • x=0:y=0:水印在视频中的位置,左上角

效果如下:

如果需要将水印放在视频的右下角,可以使用以下命令:

ffmpeg -i src.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10:alpha=0.5" target.mp4

其中:

  • WH 表示视频画面的宽度和高度
  • wh 分别表示水印图片的宽度和高度
  • alpha=0.5 表示设置水印透明度为 0.5

2. 旋转水印

要实现水印的旋转效果,可以使用以下命令:

ffmpeg -i src.mp4 -loop 1 -i watermark.png -lavfi "[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10" -shortest target.mp4 -y

关键参数解释:

  • hypot:根据勾股定律计算图片对角长度,确保旋转后不会丢失图片部分
  • format=rgba:将图片显示的像素格式转换为rgba格式
  • c=0x00000000:将图片旋转后的背景变为白色且完全透明
  • -loop 1:循环播放水印
  • overlay=10:10:水印位置

效果如下:

3. 更多水印控制和表现

水印本身变化

方法一:使用循环播放的GIF图片

ffmpeg -hide_banner -i src.mp4 -ignore_loop 0 -i watermark.gif -filter_complex overlay -shortest target.mp4 -y

方法二:使用movie滤镜

ffmpeg -hide_banner -i src.mp4 -vf "movie=watermark.gif:loop=0,setpts=N/FRAME_RATE/TB[out];[0:v][out]overlay=x=main_w-overlay_w:y=0" -shortest target.mp4 -y

关键参数:

  • loop=0,setpts=N/FRAME_RATE/TB:设置水印gif无限循环
  • -shortest:将输出文件的时长设置为第一个视频文件的时长

如果希望水印只播放一次,可以使用:

ffmpeg -hide_banner -i src.mp4 -i watermark.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" target.mp4 -y

如果需要延迟显示水印,可以使用:

ffmpeg -hide_banner -i src.mp4 -itsoffset 3 -i watermark.gif -filter_complex "overlay=x=0:y=0:eof_action=pass" target.mp4 -y

水印显示时间变化

设置水印显示时长

ffmpeg -hide_banner -i src.mp4 -i watermark.png -filter_complex "overlay=enable='lte(t,5)'" target.mp4 -y

设置水印显示时间段

ffmpeg -hide_banner -i src.mp4 -i watermark.png -filter_complex "overlay=enable='between(t,5,10)'" target.mp4 -y

设置两个水印轮番出现

ffmpeg -i src.mp4 -i doggie1.png -i watermark.png -filter_complex "overlay=enable='lte(mod(t,10),4)',overlay=enable='gt(mod(t,10),6)'" target.mp4 -y

水印位置变化

设置水印随时间向右移动

ffmpeg -i src.mp4 -ignore_loop 0 -i watermark.gif -lavfi "overlay=x=t*20" -shortest target.mp4 -y

设置水印每隔10秒钟从左移动右直至消失

ffmpeg -i src.mp4 -ignore_loop 0 -i watermark.gif -lavfi "overlay=enable='mod(t,10)':x='100*mod(t,10)-w'" -shortest target.mp4 -y

4. 添加马赛克

如果需要给视频或图片添加马赛克,可以使用 boxblur 滤镜。该滤镜将指定区域变成模糊效果,从而达到马赛克的效果。

ffmpeg -i src.mp4 -filter_complex "[0:v]boxblur=20[blur];[blur]crop=200:200:300:300,boxblur=20[cropped];[0:v][cropped]overlay=300:300" target.mp4

其中:

  • [0:v]boxblur=20[blur]:对视频画面进行模糊处理,模糊半径为 20 像素
  • [blur]crop=200:200:300:300,boxblur=20[cropped]:对模糊后的视频画面进行裁剪,只保留左上角起始坐标为 (300, 300),宽高为 200 的区域,并再次进行模糊处理
  • 最后使用 overlay 滤镜将原始视频和裁剪后的带马赛克画面叠加在一起

5. 去除水印

如果视频中的水印和马赛克无法通过软件工具进行剔除,可以在视频上添加其他的图层来遮盖住这些区域。

准备好需要添加的图层,可以是一张图片、一段文字或另一个视频等。在命令行中输入以下命令:

ffmpeg -i src.mp4 -i watermark.png -filter_complex "[0:v][1:v] overlay=x=W-w-10:y=10" -c:a copy target.mp4

其中:

  • [0:v][1:v]:表示将输入文件和图层文件作为滤镜链的两个输入
  • overlay=x=W-w-10:y=10:使用 overlay 滤镜将图层添加到视频画面的指定位置上
  • -c:a copy:保留视频文件中的音频流
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号