使用 ffmpeg,为图片或视频添加自定义的水印,具有动态水印等多种高级功能。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jifengg
V2EX    分享创造

使用 ffmpeg,为图片或视频添加自定义的水印,具有动态水印等多种高级功能。

  •  
  •   jifengg 2024-06-06 14:42:51 +08:00 2100 次点击
    这是一个创建于 491 天前的主题,其中的信息可能已经有所发展或是发生改变。

    hello ,兄弟们,我又来分享我的 ffmpeg 脚本啦。

    这次分享的是一个给图片或视频添加水印的功能。

    先看效果

    模拟 DVD 待机画面( gif ):

    big_buck_bunny_10s_dvd

    高清视频可查看: https://github.com/jifengg/ffmpeg-script/assets/17020523/02c00806-2514-4dc8-9bdf-df53f66f9931

    身份证防盗用水印: idcard_watermark

    定时随机变换水印位置,防止视频盗用: https://github.com/jifengg/ffmpeg-script/assets/17020523/b5ba5de5-ca52-417e-a0b3-dbf43bf6bff4

    开源地址

    GitHub 地址:https://github.com/jifengg/ffmpeg-script

    支持一条命令直接加入多个不同的水印,每个水印的参数均可以单独设置。

    这里列出脚本支持的参数,更多的使用方法可以到 github 中查看。

    node ffmpeg.watermark.js -i <file|folder> [-o <file|folder> ...] -preset <string> 本脚本除了-preset 之外的所有参数,均可以通过传递 preset 文件来设置。 如果使用./preset/abc.preset 来设置,则-preset abc 即可。 preset 文件的编写请参考 github ( https://github.com/jifengg/ffmpeg-script )。 -i <string> [必须]要处理的文件或目录 -y 是否覆盖已经存在的 pbf 文件,默认:false -h 显示这个帮助信息 -debug 是否开启 debug 模式,打印更详细的日志 -[text|file] <string> [必须]水印的文本内容或文件路径,必须至少传一组。 与 ffmpeg 参数传递规则类似,水印有很多可定义的参数,且支持传多个水印。 因此,-text/file 之前的参数是用来设置这一组水印信息的,之后的参数是下一组水印的。 如:-fontsize 30 -text 此水印字号为 30 -fontsize 40 -text 此水印字号为 40 -text <string> 水印的文本内容 -fontsize <number> 文字的字号,默认:20 -fontcolor <string> 文字颜色,值的格式同 ffmpeg 的 color ,默认:white -fontborderwidth <number> 文字边框大小,单位像素,默认:0 -fontbordercolor <string> 文字边框颜色,值的格式同 ffmpeg 的 color ,默认:black -fontfile <string> 文字字体文件路径,非 windows 下使用时必传,默认:c:/Windows/Fonts/msyh.ttc (微软雅黑) -file <string> 水印文件的路径,支持视频或图片 -scale <string> 水印文件的缩放尺寸,值的格式同 ffmpeg 的 scale 过滤器。如“1920:1080” -alpha <number> 水印的透明度,取值范围:0.0 - 1.0 ,默认:1.0[完全不透明] -[left|right|top|bottom] <number> 水印的左、右、上、下边距,单位:像素。默认:right=20 ,top=20 -move <string> 水印的移动方式,可选:dvd 、random ;默认不移动 -xspeed <number> move=dvd 时生效。表示每秒水平移动的像素。默认:400 -yspeed <number> move=dvd 时生效。表示每秒垂直移动的像素。默认:300 -xstart <number> move=dvd 时生效。表示初始水平位置。默认:0 -ystart <number> move=dvd 时生效。表示初始垂直位置。默认:0 -interval <number> move=random 时生效。表示多少秒变换一个位置。默认:10 -seed <number> move=random 时生效。表示随机数种子。不传则随机生成 -repeat 是否用水印重复填充整个画面,默认:false -boxw <number> 启用填充时,每个水印的宽度,如果水印是-file ,则不能小于-scale 的宽度,默认:200 -boxh <number> 启用填充时,每个水印的高度,如果水印是-file ,则不能小于-scale 的高度,默认:100 -rotate <number> 启用填充时,每个水印的旋转角度,注意是角度而不是弧度,默认:0 

    使用 nodejs 是为了支持批量处理,以及将复杂化的命令行用简单的命令来代替。最终是生成一个 ffmpeg 命令行来进行所有处理。 如果你对 ffmpeg 开发也感兴趣,关于这个脚本的技术文章可以查看这里ffmpeg.watermark.md

    9 条回复    2024-09-12 08:32:56 +08:00
    shuxge1223
        1
    shuxge1223  
       2024-06-06 15:46:16 +08:00
    感谢,正需要
    jifengg
        2
    jifengg  
    OP
       2024-06-06 15:59:27 +08:00
    @shuxge1223 使用后欢迎前来反馈
    ixinshang
        3
    ixinshang  
       2024-09-01 15:45:03 +08:00
    op 在什么平台运行的? 在 win 和 linux 下测试了一下,提示各种缺滤镜什么的。
    jifengg
        4
    jifengg  
    OP
       2024-09-02 09:41:13 +08:00
    @ixinshang 我是在 win 下,用静态编译的 ffmpeg.exe 。注意版本号
    ixinshang
        5
    ixinshang  
       2024-09-02 10:29:18 +08:00
    @jifengg 方便分享一下您的 win 的 ffmpeg 吗?
    我尝试在 linux 编译,目前处于缺这个缺那的状态。
    jifengg
        6
    jifengg  
    OP
       2024-09-02 10:40:59 +08:00
    ixinshang
        7
    ixinshang  
       2024-09-02 11:55:24 +08:00
    @jifengg 我测试过,提示还是缺东西。 晚些时候,我去多找几个测试一下。
    MoonWalker
        8
    MoonWalker  
       2024-09-11 10:25:20 +08:00
    windows 环境,指定印重复填后运行不起来,请问 OP 用的什么 ffmpeg 版本
    jifengg
        9
    jifengg  
    OP
       2024-09-12 08:32:56 +08:00
    @MoonWalker 我用的是 6 ,你加-debug 看看报错信息,会打印 ffmpeg 的执行命令,你也可以拿出来单独执行看看 ffmpeg 报什么错。
    关于     帮助文档     自助推广系统     博客     API    FAQ     Solana     1020 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:52 PVG 06:52 LAX 15:52 JFK 18:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86