一、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 | 水印图片的宽度 | |
overlay | overlay_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
。水印前编码格式是aac
和h264
原来的水印指令没有带“-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
"
-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]' output
,movie
过滤器用来把两个流组合成一个流。它有一个输出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