转载自今日头条号,作者:antonio
前边列出来亲测可用的使用ffmpeg对视频进行文字水印和图片水印的命令代码,进行图片水印的时候,最好先准备一个透明背景的png图片。
D:\ffmpeg\bin\ffmpeg.exe -i D:\zhoujingyubianji.mp4 -i D:\logo.png -filter_complex "[1:v] scale=167:187[logo];[1400:950][logo]overlay=x=0:y=0" D:\3output.mp4 D:\ffmpeg\bin\ffmpeg.exe -i D:\zhoujingyubianji.mp4 -i D:\logo.png -filter_complex "[1:v] scale=167:187[logo];[0:v][logo]overlay=main_w-overlay_w-10:10" D:\2output.mp4 视频图片水印代码 overlay = main_w-overlay_w-10:10 =右上角 overlay = 10:10 =左上角 overlay = 10: main_h-overlay_h-10 = 左下角 overlay = main_w-overlay_w-10:main_h-overlay_h-10 = 右下角 D:\ffmpeg\bin\ffmpeg.exe -i D:\zhoujingyubianji.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':x=20:y=20" D:\drawtext.mp4 文字水印 x=宽度位置 y=高度位置 D:\ffmpeg\bin\ffmpeg.exe -i D:\zhoujingyubianji.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':x=20:y=20:fontcolor=green" D;\textgreen.mp4 文字水印并调整文字颜色 fontcolor=后边填上颜色 D:\ffmpeg\bin\ffmpeg.exe -i D:\zhoujingyubianji.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='%{localtime\:%Y-\%m\-%d %H-%M-%s}]':x=0:y=20:fontcolor=green" D:\time.mp4 用时间当水印 D:\ffmpeg\bin\ffmpeg.exe -i D:\zhoujingyubianji.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':x=20:y=20:enable=lt(mod(t\, 3)\, 1)" D:\enable.mp4 定时显示水印,例如这里是3秒
1.添加文字水印
1.1 字段说明
在视频中增加文字水印需要有文字字库处理的相关文件,在编译 FFmpeg 时需要支持 FreeType、FontConfig、iconv,系统中需要有相关的字库,在 FFmpeg 中增加纯字母水印可以使用drawtext滤镜进行支持,下面就来看一下 drawtext 的滤镜参数。如下所示:
(1)text:字符串 ,表示文字。
(2)textfile:字符串,表示文字文件。
(3)box:布尔,表示文字区域背景框(缺省 false)。
(4)boxcolor:色彩,表示可以展示展示字体区域块的颜色。
(5)font:字符串,表示字体名称(默认为 Sans 字体)。
(6)fontsize:整数,表示显示字体的大小。
(7)x:字符串,表示可以缺省为 0。
(8)y:字符串,表示可以缺省为 0。
(9)alpha:浮点数,表示透明度(默认为 1),值从 0~1。
1.2 文字水印实例
(1)将文字的水印加在视频的左上角,命令如下:
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':x=20:y=20"
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':fontcolor=green"
(3)调整文字水印的位置,命令如下:
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':fontcolor=green:x=1500:y=950"
(4)修改文字水印透明度,命令如下:修改透明度,值越小,越透明。
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='海南仙岛':fontcolor=green:x=400:y=200:alpha=0.5"
(5)文字水印还可以增加一个框,然后给框加上背景颜色,命令如下:给文字水印加上一个框。这个框的颜色,默认是白色。
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:box=1:boxcolor=yellow"
(6)以本地时间作为水印内容,在 drawtext 滤镜中添加一些特殊用法,在 text 中显示本地当前时间,格式为年月日时分秒的方式。注意:使用 ffmpeg 转码存储到文件时需要加上-re,否则时间不对。
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=green:box=1:boxcolor=yellow" out.mp4
注意:转码的时候,最好是加上re,否则就有可能不对。跑马灯、字体颜色及定时显示组合实现,就可以实现一个简单防止视频侵权的效果。
(7)定时显示水印,定时不显示水印,使用 drawtext 与enable配合即可,如下以每3s钟显示一次文字水印。
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:boxcolor=yellow:enable=lt(mod(t\,3)\,1)"
注意:在使用 ffmpeg 转码存储到文件时需要加上-re,否则时间不对。
(8)跑马灯效果
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=abs(sin(t))*h*0.7"
(9)修改字体透明度和颜色
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='antonio':x=mod(50*t\,w):y=abs(sin(t))*h*0.7:alpha=0.5:fontcolor=white:enable=lt(mod(t\,3)\,1)"
2.图片水印
2.1重要参数说明
为视频添加图片水印可以使用movie滤镜,movie滤镜的参数如下所示:
(1)filename:字符串,表示输入的文件名,可以是文件,协议,设备。
(2)format_name, f:字符串,表示输入的封装格式。
(3)stream_index, si:整数,表示输入的流索引编号。
(4)seek_point, sp:浮点数,表示Seek 输入流的时间位置。
(5)streams, s:字符串,表示输入的多个流的流信息。
(6)loop:整数,表示循环次数。
(7)discontinuity:时间差值,表示支持跳动的时间戳差值。
2.2 命令解释
D:\ffmpeg\bin\ffmpeg.exe -i D:\2yunban.mp4 -i D:\logo.png -filter_complex "[1:v] scale=167:187[logo];[v:0][logo]overlay=x=0:y=0" D:\1output.mp4
v:0=右上角
0:v=左上角
上边这一行亲测可用
D:\ffmpeg\bin\ffmpeg.exe -i D:\2yunban.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=1500:y=10[out]" output.mp4
如上命令,字段解释如下:
(1)原始视频文件路径:input.mp4。
(2)水印图片路径:logo.png。
(3)水印位置:(x,y)=(10,10)<=(left,top)距离左侧、顶部各 10 像素。
(4)输出文件路径:output.mp4。
(5)main_w:视频单帧图像宽度。
(6)main_h:视频单帧图像高度。
(7)overlay_w:水印图片的宽度。
(8)overlay_h:水印图片的高度。
这两个watermark需要保持一致。
对应地可以将 overlay 参数设置成如下值来改变水印图片的位置,参数说明如下:
(9)左上角:10:10。
(10)右上角:main_w-overlay_w-10:10。
(11)左下角:10:main_h-overlay_h-10。
(12)main_w-overlay_w-10:main_h-overlay_h-10。
水印图片与主视频
在 FFmpeg 中加入图片水印有两种方式,一种是通过 movie 指定水印文件路径,另外一种方式是通过filter 读取输入文件的流并指定为水印,以下通过movie图片文件去作为水印。
(13)图片 logo.png 将会打入到 input.mp4 视频中,显示在 x 坐标 50、y 坐标 20 的位置。
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=logo.png[logo];[in][logo]overlay=50:10[out]"
注意:由于 logo.png 图片的背景色是白色,所以显示起来比较生硬,如果水印图片是透明背景的,效果会更好。
(14)调整水印图片显示位置
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=10:10[out]" D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:10[out]" D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=10:main_h-overlay_h-10[out]" D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:main_h overlay_h-10[out]"
(15)添加水印图片,实现跑马灯效果
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*h*0.7[out]"
3.实现画中画
在使用 FFmpeg 处理流媒体文件时,有时需要使用画中画的效果。在 FFmpeg 中,可以通过 overlay 将多个视频流、多个多媒体采集设备、多个视频文件合并到一个界面中,生成画中画的效果。overlay 的参数如下所示:
(1)x:字符串,表示X 坐标。
(2)y:字符串,表示y 坐标。
(3)eof_action:整数,表示遇到 eof 表示时的处理方式,默认为重复。
repeat(值为 0):重复前一帧
endcall(值为 1):停止所有的流
pass(值为 2):保留主图层
(4)shortest:布尔,终止最短的视频时全部终止(默认 false)
(5)format:整数,设置 output 的像素格式,默认为 yuv420。
yuv420, 值为 0
yuv422 ,值为 1
yuv444 ,值为 2
rgb,值为 3
每个参数要用冒号隔开。
从参数列表中可以看到,主要参数并不多,但实际上在 overlay 滤镜使用中,还有很多组合的参数可以使用,可以使用一些内部变量,例如 overlay 图层的宽、高、坐标等。
(6)显示画中画效果
D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20[out]" D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:eof_action=1[out]" D:\ffmpeg\bin\ffplay.exe -i D:\2yunban.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:shortest =1[out]"
画中画,就是一个视频里面套另外的视频实现效果,如下图:
使用的滤镜是movie和overlay去做。
(7)显示画中画,并缩放子画面尺寸
D:\ffmpeg\bin\ffmpeg.exe -i D:\2yunban.mp4 -vf "movie=sub_320x240.mp4,scale=640x480[sub];[in][sub]overlay=x=20:y=20[out]"
(8)实现跑马灯效果
D:\ffmpeg\bin\ffmpeg.exe -i D:\2yunban.mp4 -vf "movie=sub_320x240.mp4[test];[in][test]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]"
4.FFmpeg 实现多宫格处理
还有一种场景为以多宫格的方式呈现出来,除了可以输入视频文件,还可以输入视频流、采集设备等。从前文中可以看出进行视频图像处理时,overlay 滤镜为关键画布,可以通过 FFmpeg建立一个画布,也可以使用默认的画布。如果想以多宫格的方式展现,则可以自己建立一个足够大的画布,下面就来看一下多宫格展示的例子:
D:\ffmpeg\bin\ffmpeg.exe -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v] setpts=PTSSTARTPTS,scale=320x240[upperleft];[1:v]setpts=PTS-STARTPTS,scale=320x240[upperright];[2:v]setpts=PTSSTARTPTS, scale=320x240[lowerleft];[3:v]setpts=PTSSTARTPTS,scale=320x240[lowerright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320[tmp2];[tmp2][lowerleft]overlay=shortest=1:y=240[tmp3];[tmp3][lowerright]overlay=shortest=1:x=320:y=240" out.mp4
1.2.3.4.mp4 为文件路径,out.MP4为输出文件路径,通过 nullsrc 创建 overlay 画布,画布大小 640:480,使用[0:v][1:v][2:v][3:v]将输入的 4 个视频流去除,分别进行缩放处理,然后基于 nullsrc 生成的画布进行视频平铺,命令中自定义 upperleft,upperright,lowerleft,lowerright 进行不同位置平铺。
使用多个复杂的过滤器,upperleft表示左上角,upperright表示右上角,lowerleft表示左下角,lowerright表示右下角。把这4个流与base都叠加在一起。效果如下图所示:
首先是base加上upperleft叠加。形成一个tmp1。
然后tmp1加上upperright叠加,形成一个tmp2。
tmp2再跟lowerleft叠加,形成一个tmp3。
tmp3最后跟lowerright叠加,形成一个输出文件。
有些需求,如果只叠加左上和右上的命令,如下所示:
D:\ffmpeg\bin\ffmpeg.exe -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v]setpts=PTSSTARTPTS,scale=320x240[upperleft];[1:v]setpts=PTSSTARTPTS,scale=320x240[upperright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320" out2.mp4
sicnature ---------------------------------------------------------------------
I P 地 址: 3.145.40.121
区 域 位 置: 美国
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
2条评论
添加环绕的水印(飞鸟、走马灯)
ffmpeg.exe -i input.mp4 -vf drawtext=”fontsize=10:fontfile=/Windows/Fonts/arial.ttf:text=’Text Here’:x=if(eq(mod(n\,1200)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(n\,1200)\,0)\,rand(0\,(h-text_h))\,y):enable=lt(mod(n\,1200)\,200)” -c:v libx264 -crf 17 -c:a copy output.mp4
ffmpeg -i input.mp4 -loop 1 -i logo.png -filter_complex “[1]trim=0:30,fade=in:st=0:d=1:alpha=1,fade=out:st=9:d=1:alpha=1,loop=999:750:0,setpts=N/25/TB[w];[0][w]overlay=shortest=1:x=if(eq(mod(n\,200)\,0)\,sin(random(1))*W\,x):y=if(eq(mod(n\,200)\,0)\,sin(random(1))*H\,y)” output.mpg
多平台视频免费去水印,图片增加水印,获取4k高清图片。一步解决微信搜索小程序:宇宇工具箱