如何使用ffmpeg在视频中心添加透明水印?

94

我目前正在使用以下命令:

Top left corner
ffmpeg –i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.flv

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

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)/2:(main_h-overlay_h-10)/2 [out]" outputvideo.flv

如何将水印放置于视频的中心位置?


2
右下角实际上是: 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 - Sebastian Patten
@mirza,你能告诉我你把watemarklogo.png文件放在哪里吗?因为我一直收到“没有这样的文件或目录”的错误提示。 - B.shruti
应该在执行命令的同一目录下返回已翻译的文本。@B.shruti - mirza
1个回答

241

使用叠加过滤器在视频上添加水印/标志图像的示例。

居中

输入图像描述

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy output.mp4

或使用简化的叠加选项:

overlay=(W-w)/2:(H-h)/2

左上角

这个比较简单,因为如果您不向覆盖层提供任何选项,则默认情况下是将图像放置在左上角。

此示例添加5像素的填充,以便图像不接触边缘:

overlay=5:5

右上方

带有5像素的填充:

overlay=main_w-overlay_w-5:5

或者使用缩写选项:

overlay=W-w-5:5

右下角

带有5像素的内边距:

overlay=main_w-overlay_w-5:main_h-overlay_h-5

或者使用缩写选项:

overlay=W-w-5:H-h-5

左下角

带有5像素的填充:

overlay=5:main_h-overlay_h

或者使用缩写选项:

overlay=5:H-h-5

透明度 / 不透明度 / alpha

使用 formatcolorchannelmixer 滤镜设置水印的透明度为50%:

ffmpeg -i input.mp4 -i watermark.jpg -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.5[logo];[0][logo]overlay=(W-w)/2:(H-h)/2:format=auto,format=yuv420p" -c:a copy output.mp4

提高质量

叠加滤镜中使用format=auto选项可以使PNG水印的效果更好:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=5:H-h-5:format=auto,format=yuv420p" -c:a copy output.mp4

请注意增加了名为format的过滤器(是的,与选项同名,但是它是一个独立的过滤器),用于将其重置为适用于MP4输出所需的YUV 4:2:0格式。如果您不输出MP4,请删除,format=yuv420p

按比例缩放水印与主视频

使用scale2ref过滤器:

例如,将徽标的大小设置为主视频的10%(1/10):

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1][0]scale2ref=w=oh*mdar:h=ih*0.1[logo][video];[video][logo]overlay=5:H-h-5" -c:a copy output.mp4

5
如何将水印按比例扩大至视频宽度的2/3,并保持水印原有的比例?请问我能帮忙吗? - Diaa Saada
2
我正在尝试在Android上使用FFMPEG版本n2.4.2运行此程序,但是我收到了错误消息:“没有这样的过滤器:'“overlay'”,有什么想法吗? - The Hungry Androider
3
@LordNeckbeard 驴子图片发生了什么事情? :D - mirza
2
@HashimAziz ffmpeg尝试保留颜色数据,因此它将尝试使用所选编码器支持的最“先进”的像素格式进行色度抽样。 MP4的默认编码器通常是libx264。 libx264支持许多像素格式(请参见ffmpeg -h encoder = libx264)。 但是,大多数播放器只能支持最低级别,即YUV 4:2:0。 因此,在答案中添加了格式过滤器,以确保与兼容性的YUV 4:2:0色度抽样。 - llogan
1
@HashimAziz 如果您不需要格式过滤器,那么您的输入必须已经包含字母。使用格式过滤器和要叠加的JPG图像,对我来说,colorchannelmixer与lut的视觉效果相同。lut速度明显更快(而且您不必键入太多)。有很多过滤器,通常有多种方法。您将不得不查看每个过滤器的源代码(例如libavfilter/vf_lut.c),以获取比我的懒惰观察更多的信息。 - llogan
显示剩余21条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接