ffmpeg加水印 我不是女神ヾ 2021-06-26 16:06 782阅读 0赞 ## 一、`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`水印参数说明 ## <table> <thead> <tr> <th align="left">参数</th> <th align="left">参数</th> <th align="left">说明</th> </tr> </thead> <tbody> <tr> <td align="left"></td> <td align="left">main_w</td> <td align="left">视频单帧图像宽度</td> </tr> <tr> <td align="left"></td> <td align="left">main_h</td> <td align="left">视频单帧图像高度</td> </tr> <tr> <td align="left"></td> <td align="left">overlay_w</td> <td align="left">水印图片的宽度</td> </tr> <tr> <td align="left">overlay</td> <td align="left">overlay_h</td> <td align="left">水印图片的高度</td> </tr> <tr> <td align="left">-vf</td> <td align="left">设置video过滤器,视频旋转,缩放,水印等处理</td> <td align="left"></td> </tr> <tr> <td align="left">af</td> <td align="left">设置audio过滤器</td> <td align="left"></td> </tr> </tbody> </table> 关于更多的参数可以参考ffmpeg官网filter的描述:https://ffmpeg.org/ffmpeg-filters.html ## 三、加水印可能遇到的问题 ## 1)水印位置 <table> <thead> <tr> <th align="left">水印图片位置</th> <th align="left">overlay值</th> </tr> </thead> <tbody> <tr> <td align="left">左上角</td> <td align="left">1899/12/31 10:10:00</td> </tr> <tr> <td align="left">右上角</td> <td align="left">main_w-overlay_w-10:10</td> </tr> <tr> <td align="left">左下角</td> <td align="left">10:main_h-overlay_h-10</td> </tr> <tr> <td align="left">右下角</td> <td align="left">main_w-overlay_w-10 : main_h-overlay_h-10</td> </tr> </tbody> </table> 2)视频码率降低 ![在这里插入图片描述][20191030180525810.png] 上面加水印后发现视频画面变差,后来对比发现是因为编码方式变了 原来的编码格式 ![在这里插入图片描述][20191030180639370.png] 加水印后的编码格式音频编码格式`adpcm_swf`,视频编码`flv1`。水印前编码格式是`aac`和`h264` ![在这里插入图片描述][20191030180733494.png] 原来的水印指令没有带“`-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` 参数后,对比图 ![在这里插入图片描述][2019103109225783.png] 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`水印高度 ![在这里插入图片描述][20191031094017752.png] 左上角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 [20191030180525810.png]: /images/20210626/a161be0fe51e49899306b79cdfed1eb1.png [20191030180639370.png]: /images/20210626/4ba798956b5f4a58b583d242e5be5e9f.png [20191030180733494.png]: /images/20210626/6a4865f1a5694a9a9a0ffcc88b72a075.png [2019103109225783.png]: /images/20210626/73072280df9e45dbb21cefd75c071472.png [20191031094017752.png]: /images/20210626/f39c3216951b4be1b4060044ca0d21da.png
还没有评论,来说两句吧...