ffmpeg加水印

一、ffmpeg加水印命令,主要从直播和视频文件加水印

1)直播推流加水印示例

ffmpeg -i rtmp://localhost/live/name  -vf "movie=/path/2.png [watermark]; [in][watermark] overlay=10:10 [out]" -c:v libx264 -c:a copy -f flv rtmp://locahost:1936/live/name

2)视频文件夹水印命令

ffmpeg -i input.avi -vf "movie=logo.png [logo]; [in][logo] overlay=10:10 [out]" output.avi

Bottom left corner

ffmpeg -i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h-10 [out]" outputvideo.flv

Bottom right corner

ffmpeg -i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]" outputvideo.flv

二、ffmpeg水印参数说明

参数参数说明
main_w视频单帧图像宽度
main_h视频单帧图像高度
overlay_w水印图片的宽度
overlayoverlay_h水印图片的高度
-vf设置video过滤器,视频旋转,缩放,水印等处理
af设置audio过滤器

关于更多的参数可以参考ffmpeg官网filter的描述:https://ffmpeg.org/ffmpeg-filters.html

三、加水印可能遇到的问题

1)水印位置

水印图片位置overlay值
左上角1899/12/31 10:10:00
右上角main_w-overlay_w-10:10
左下角10:main_h-overlay_h-10
右下角main_w-overlay_w-10 : main_h-overlay_h-10

2)视频码率降低
在这里插入图片描述
上面加水印后发现视频画面变差,后来对比发现是因为编码方式变了

原来的编码格式
在这里插入图片描述

加水印后的编码格式音频编码格式adpcm_swf,视频编码flv1。水印前编码格式是aach264
在这里插入图片描述
原来的水印指令没有带“-c:v libx264 -c:a copy”这两个参数导致的

ffmpeg -i rtmp://localhost/live/name  -vf "movie=/path/2.png [watermark]; [in][watermark] overlay=10:10 [out]"-f flv rtmp://locahost:1936/live/name  

解决办法:转成和之前同样的编码格式,音频流直接copy。或者也可以加上-b码率和原始视频试试看

例如我的这个加上“-c:v libx264 -c:a copy 参数后,对比图
在这里插入图片描述

3)转264的时候编译的ffmpeg必须支持x264

否则 加-c:v libx264参数的时候可能会报错Unknown encoder 'libx264'

解决办法:先安装x264的库,然后在编译的时候加上./configure --enable-libx264

注意:
1)水印视频必须要重新编码"-c:v libx264",音频流直接"-c:a copy"

  1. -vcodec copy -acodec copy好像2.x版本以后可以直接简写成-c copy
    -vcodec -c:v copy表示视频流可以直接copy

3)加-c copy会报Filtering and streamcopy cannot be used together.注意不要加-c copy

4)注意水印图片的尺寸大小不能大于视频尺寸,要不然水印会全部覆盖。以上视频尺寸800x432,水印尺寸196 × 106


ffmpeg —— 添加水印

1.添加水印——movie过滤器:

ffmpeg -i inputfile -vf  "movie=masklogo,scale= 60: 30[watermask]; [in] [watermask] overlay=30:10 [out]" outfile

参数说明:

  • marklogo:添加的水印图片;
  • scale:水印大小,水印长度*水印的高度;
  • overlay:水印的位置,距离屏幕左侧的距离*距离屏幕上侧的距离;mainW主视频宽度, mainH主视频高度,overlayW水印宽度,overlayH水印高度

在这里插入图片描述
左上角overlay参数为 overlay=0:0

右上角为 overlay= main_w-overlay_w:0

右下角为 overlay= main_w-overlay_w:main_h-overlay_h

左下角为 overlay=0: main_h-overlay_h

上面的0可以改为5,或10像素,以便多留出一些空白。

2.添加水印——合流

ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output

input:输入流

logo:水印文件,也可以是一个流。注意:需要编译时把相应的解码器编译。例如PNG图片。需要编译PNG解码器。Ffmpeg才能够识别图片文件,把图片做为一 种流。注意:PNG图片必须含有alpha通道。Overlay过滤器是根据alpha通道来进行复盖的。所以,你想要透明效果时,须先制做一张透明的PNG图片。

output:输出流

也可以用下面命令: ffmpeg -i input -vf 'movie=long.png[logo];[in][logo]overlay=10:10[out]' outputmovie过滤器用来把两个流组合成一个流。它有一个输出PAD


ffmpeg给视频加文字水印

ffmpeg -i dd2800.mp4 -vf "drawtext=fontfile=Arial.ttf: text='Hu':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" -b:v 3000k dd28003.mp4

// -b:v 指定生成视频的码率,不指定的话可能导致新视频是旧视频的2倍大小。

// fontfile=Arial.ttf 指定字体文件。字体文件需要在当前文件夹中。

滚动水印:

ffmpeg -i dd2800.mp4 -vf "drawtext=fontfile=Arial.ttf: text='Hu': y=h-line_h-10:x=(mod(2*n\,w+tw)-tw):fontsize=34:fontcolor=yellow:shadowy=2" -b:v 3000k dd28008.mp4

加水印在底部中间显示:

ffmpeg -i dy2800.mp4 -vf "drawtext=fontfile=Arial.ttf:text='pruduction by http\://baidu.com':y=h-line_h-20:x=(w-text_w)/2:fontsize=34:fontcolor=yellow:shadowy=2" -b:v 3000k dy28008.mp4
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值