导读:本期聚焦于辉辉创作的《FFmpeg怎么给视频加图片或文字水印并精确控制位置?》,敬请观看详情。视频发布到公开平台前加上自有标识,能有效防止被随意盗用。FFmpeg通过滤镜图机制,可在不重新编码全部画面的情况下叠加图层。图片水印依赖overlay滤镜读取本地文件,坐标用x与y表达式定位;文字水印则由drawtext调用字体文件渲染,支持动态时间码。位置控制不只是填数字,还能用main_w等变量做百分比布局,避免不同分辨率错位。理解滤镜链顺序与基准画布概念,才能把logo稳定放在右下角或随滚动字幕移动,同时把画质损失压到最低。

给视频批量添加水印是内容创作者和后端转码服务的常见需求。FFmpeg作为命令行转码的事实标准,提供了overlay与drawtext两类滤镜分别处理图片与文字图层。掌握它们的参数含义与坐标系统,就能在不借助专业非编软件的前提下,用一条命令完成带标识的输出。

FFmpeg怎么给视频加图片或文字水印并精确控制位置?

图片水印的叠加原理与坐标系统

FFmpeg处理图片水印的核心是overlay滤镜。它要求输入至少两个流:主画面(通常是视频)与叠加层(图片)。在滤镜图中,用方括号别名标记流,例如[0:v]代表第一个输入的视频流,[1:v]代表第二个输入的图片流。overlay会把第二个流绘制到第一个流之上,其位置由xy两个表达式决定,默认值是0,也就是左上角。

坐标系统的原点在左上角,向右为x正方向,向下为y正方向。如果你希望水印出现在右下角,并且距离边缘二十像素,就不能写死像素值,因为不同视频分辨率不同会导致位置比例失调。此时应使用内置变量:main_w表示主画面宽度,main_h表示主画面高度,overlay_woverlay_h表示水印图片的宽高。通过x=main_w-overlay_w-20y=main_h-overlay_h-20,可以让任何分辨率的视频都把图片贴在右下角内侧。

下面是一条完整的命令示例,将logo.png以右下角方式叠加到input.mp4并输出out.mp4

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[0:v][1:v]overlay=x=main_w-overlay_w-20:y=main_h-overlay_h-20" 
-c:a copy out.mp4

需要注意,如果图片带有透明通道(如PNG),overlay会保留透明度,这是相比烧录字幕更优的地方。若使用JPEG这类无透明格式,图片矩形区域会完全遮挡视频内容。另外,-c:a copy表示音频流直接复制不重编码,能显著提升处理速度并避免音质损失。

文字水印的drawtext滤镜配置

文字水印不使用overlay,而是由drawtext滤镜直接在视频帧上渲染文本。该滤镜依赖系统字体文件,必须通过fontfile参数指定字体路径,例如在Linux上可能是/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf,Windows上可能是C:WindowsFontsarial.ttf。文本内容用text参数传入,也可用textfile读取外部文件。

位置控制同样依靠xy表达式,并且支持时间戳变量t来实现滚动或闪烁效果。比如x=w-tw-10:y=10表示固定在右上角(tw是文字宽度),而x=w-mod(t*100,w+tw)则让文字从右向左滚动。这里的反斜杠用于转义冒号或逗号,避免被滤镜图语法误解析,必须原样保留。

以下示例在视频左上角显示当前时间码,并设定字体大小与颜色:

ffmpeg -i input.mp4 -vf 
"drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:
text='%{pts:hms}':x=10:y=10:fontsize=24:fontcolor=white" 
-c:a copy out.mp4

中文文字水印要确认字体文件支持中文字形,否则会渲染成方块。部分环境还需设置text_shaping=1以正确处理复杂文字排版。drawtext还支持box参数绘制背景框,提升在亮色画面上的可读性,例如box=1:boxcolor=black@0.5添加半透明黑底。

多水印组合与性能优化策略

实际业务中常需同时添加图片logo与文字版权信息。FFmpeg允许在一条filter_complex中串联多个滤镜,前一个的输出作为后一个的输入。典型写法是先overlay图片,再对结果用drawtext加文字,中间用方括号别名衔接,例如[0:v][1:v]overlay=...[v1];[v1]drawtext=...[v2]。这样只需一次解码与一次编码,比分开执行两条命令效率更高。

位置控制的进阶用法包括条件显示与动态布局。例如只在视频前十分之一时间显示水印,可用表达式enable='lt(t,10)'挂在overlay或drawtext上。对于竖屏与横屏混合的素材,可结合if表达式判断main_h>main_w来切换水印坐标,避免手机视频上水印跑到画面外。这些逻辑虽写在命令行里,但本质就是滤镜图的脚本化。

性能方面,若仅添加水印而不改变分辨率或帧率,可尝试-c:v libx264 -crf 18保持高画质,并对音频复制。当处理4K素材时,overlay的像素对齐可能成为瓶颈,此时可先缩放水印图片到目标尺寸再传入,减少每帧的缩放计算。另外,使用-preset veryfast能在几乎无视觉差异下缩短编码耗时。下面示例组合了图片与文字,并将水印限制在右下角与底部居中:

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[0:v][1:v]overlay=x=main_w-overlay_w-30:y=main_h-overlay_h-30[v1];
[v1]drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:
text='Copyright':x=(w-tw)/2:y=main_h-th-20:fontsize=20:fontcolor=yellow[v2]" 
-map "[v2]" -map 0:a -c:a copy -c:v libx264 -crf 20 out.mp4

上述命令中,-map明确选取处理后的视频流与原始音频流,防止滤镜图输出干扰默认流选择。通过灵活运用变量与表达式,FFmpeg的水印功能足以覆盖绝大多数发布与保护场景,而无需引入重量级视频编辑工具。

FFmpegwatermarkvideo_processing修改时间:2026-08-18 17:06:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。