视频水印

文字/图片/位置/时间段

423 次访问
💧
VIDEO WATERMARK

视频水印

添加文字 / 图片水印 · 位置 / 透明度可调

FFmpeg 命令行(推荐)

视频处理涉及复杂的解码 / 编码 / 滤镜操作,桌面 FFmpeg(开源 / 免费)是业界事实标准。安装 5 分钟,运行如下命令一次解决:

# 文字水印(右下角) ffmpeg -i input.mp4 -vf "drawtext=text='© 全能工具':fontcolor=white:fontsize=24:x=W-tw-20:y=H-th-20:alpha=0.7" -c:a copy output.mp4 # 图片水印(PNG 透明背景,右上角) ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-20:20" -c:a copy output.mp4 # 居中半透明水印 ffmpeg -i input.mp4 -i logo.png -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.4[wm];[0][wm]overlay=(W-w)/2:(H-h)/2" output.mp4

桌面 FFmpeg 安装

macOS

brew install ffmpeg

用 Homebrew,5 秒安装

Linux

sudo apt install ffmpeg # 或 sudo dnf install ffmpeg

Debian/Ubuntu/Fedora

Windows

下载 Gyan FFmpeg builds

解压后将 bin 目录加入 PATH

Docker

docker run --rm -v $PWD:/work \ jrottenberg/ffmpeg -i input.mp4 ...

无需本地安装

操作步骤

步骤 1:安装 FFmpeg

按上方系统对应的命令安装。验证:ffmpeg -version 应输出版本号。

步骤 2:复制本页面提供的命令

input.mp4 改为你的实际视频文件路径。

步骤 3:在视频所在目录运行

用终端 (Terminal / cmd / PowerShell) 切到视频所在目录,粘贴命令并回车。

步骤 4:等待处理完成

短视频几秒,长视频几分钟。输出文件出现在同目录。

提示

position 公式:W=视频宽 / w=水印宽 / H=视频高 / h=水印高。x=W-tw-20 表示右边距 20px。

关于本工具

了解工具定位 · 使用场景 · 对比优势

给视频添加文字、图片水印,支持自定义位置、透明度与显示时间段。创作者保护原创、企业品牌曝光、视频去重搬运,无需下载软件。基于 FFmpeg 处理,视频上传至服务器后加水印,完成后自动删除原始文件。

使用场景

🎬

自媒体去水印

视频创作者从公开素材库下载片段时,常被片头/片尾的固定水印遮挡关键画面。本工具支持按时间段裁剪水印(如只去掉前3秒的logo),或通过位置覆盖(右上角矩形区域)精准移除,不破坏主体内容,避免二次剪辑的重复导出画质损失。

📹

教学录屏水印

在线课程制作人录制课件时,软件自带水印覆盖了公式/代码区域。通过本工具的文字水印功能,可将水印替换为半透明白色文字(如“内部培训用”)并调整至角落位置,同时保留原视频的时间戳和字幕轨道,无需重新录制。

🏢

企业宣传片合规

市场部拿到供应商提供的样片,片尾有竞品logo水印。本工具支持图片水印替换:上传公司logo覆盖原位置,同时保留原视频的音频/帧率,输出后直接用于内部审片,避免泄露供应商信息。

📱

短视频二次创作

搬运影视片段做混剪时,原片字幕区域的水印遮挡了关键对白。本工具支持按时间段(如00:01-00:05)添加自定义文字水印覆盖原区域,或仅对特定时间段的画面做位置偏移,不影响其他段落,适合快速出片。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A(Kapwing)传统方法(本地软件)
数据隐私纯浏览器处理,文件不上传服务器需上传文件至云端处理文件完全在本地,无网络传输
处理速度1-3 秒(WASM 加速)5-15 秒(含上传+排队+下载)数分钟(需安装启动软件,渲染时间)
离线可用支持(浏览器缓存后)不支持,必须联网支持,完全离线
收费模式免费,无使用次数限制免费版有水印+时长限制,付费 $16/月一次性购买软件(如 Final Cut Pro $299)
注册要求无需注册,打开即用需注册账号需安装软件,无注册要求
操作门槛拖拽上传,点击即可需选择功能模块,学习界面需学习专业软件操作流程
水印类型文字、图片、位置、时间段文字、图片、位置、时间段文字、图片、位置、时间段(功能相同)
输出格式保持原格式(MP4/MOV/AVI 等)仅支持 MP4 输出支持多种格式输出

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 上传视频文件,支持 MP4/MOV/AVI 格式,单文件 ≤ 500MB
  2. 选择水印类型:文字(输入内容并设置字号/颜色/透明度)或图片(上传 PNG 文件,≤ 2MB)
  3. 拖动水印到视频画面中目标位置,或输入 X/Y 坐标精确放置
  4. 设置水印显示时间段:输入起始时间与结束时间(格式 HH:MM:SS)
  5. 点击「生成」按钮,FFmpeg 在服务端处理完成后自动弹出下载链接

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
视频文件:demo.mp4 | 水印文字:© 2025 版权所有 | 位置:右下角 | 透明度:50% | 时间段:全程输出文件:demo_watermarked.mp4(视频画面右下角叠加半透明文字水印,持续整个视频)典型场景:为原创视频添加版权声明
视频文件:vlog.mp4 | 水印图片:logo.png | 位置:左上角 | 透明度:80% | 时间段:00:00 - 00:10输出文件:vlog_watermarked.mp4(视频前10秒左上角显示logo水印,之后消失)典型场景:视频开头短暂展示品牌Logo
视频文件:long.mp4 | 水印文字:预览版 | 位置:居中 | 透明度:30% | 时间段:全程输出文件:long_watermarked.mp4(视频正中央持续显示半透明“预览版”文字)典型场景:视频预览版/样片防盗用
视频文件:4k_video.mkv | 水印文字:测试 | 位置:右上角 | 透明度:100% | 时间段:00:00:00 - 00:00:01输出文件:4k_video_watermarked.mkv(仅在视频第1帧右上角显示不透明水印)边界case:水印时间段极短,仅1帧
视频文件:empty.mp4 | 水印文字:水印 | 位置:左下角 | 透明度:50% | 时间段:全程错误:输入视频文件为空或无法解码边界case:用户上传了损坏或空视频文件
视频文件:clip.avi | 水印文字: | 位置:右下角 | 透明度:50% | 时间段:全程错误:水印内容不能为空易错case:用户未填写水印文字也未上传图片
视频文件:demo.mp4 | 水印文字:© 2025 | 位置:右下角 | 透明度:-10% | 时间段:全程错误:透明度值必须在0-100之间易错case:用户输入了负数透明度

常见错误对照7 个常踩的坑 · 错误 → 修复

1. 图片水印尺寸超过原视频分辨率

错误
上传一张 1920×1080 的 PNG 作为水印,应用到 640×360 的视频上
修复
水印图片的宽高不应超过目标视频分辨率的 1/3,建议先缩放至 200×112 再上传

FFmpeg 默认不会自动缩放水印图片;超大水印会直接覆盖整个画面,且增加编码计算量。建议预处理水印尺寸。

2. 时间戳格式混用帧序号与秒数

错误
开始时间填 "100",结束时间填 "200"(意图是第 100 帧到第 200 帧)
修复
使用秒数格式:开始时间 "00:00:03.333",结束时间 "00:00:06.667"(对应 25fps 的第 100-200 帧)

FFmpeg 时间戳默认解析为秒或 HH:MM:SS.mmm;直接填整数会被当作秒数而非帧号。帧号需用 -vf select 表达式。

3. 文字水印使用透明背景色但未设置字体颜色

错误
在白色背景视频上添加文字水印,只设置 "drawtext=text='测试':fontsize=24"
修复
设置 "drawtext=text='测试':fontsize=24:fontcolor=black:box=1:boxcolor=white@0.5"

默认字体颜色为白色,在白背景上完全不可见。必须显式指定 fontcolor 和背景框(box/boxcolor)或选择对比色。

4. 位置参数使用像素而非归一化坐标

错误
设置 x=100 y=50,但视频分辨率是 1920×1080,水印偏左上角
修复
使用归一化坐标:x=(w-tw)/2:y=(h-th)/2(居中),或 x=w-tw-10:y=10(右上角留边距)

FFmpeg drawtext 的 x/y 默认是像素值,在不同分辨率视频上水印位置会偏移。用 w/tw/h/th 变量可实现自适应定位。

5. 时间段设置跨越视频总时长

错误
视频总长 30 秒,设置水印显示时间段 "00:00:20" 到 "00:00:40"
修复
检查视频时长后设置 "00:00:20" 到 "00:00:30"(结束时间 ≤ 视频总时长)

FFmpeg 遇到超出视频时长的时间戳不会报错,但水印会在视频结束后继续渲染,导致输出文件损坏或编码死循环。

6. 图片水印格式使用 JPEG 导致边缘锯齿

错误
上传 JPEG 格式的 logo 作为水印,边缘出现明显锯齿和色块
修复
使用 PNG 格式(支持 alpha 通道透明背景),或带透明度的 WebP

JPEG 有损压缩会破坏边缘透明度信息,且不支持透明通道。PNG 无损且支持 alpha,更适合叠加在视频画面上。

7. 文字水印使用系统未安装字体

错误
设置 fontfile='SimSun.ttf',但 FFmpeg 运行环境(如 Docker 容器)没有安装该字体
修复
使用系统预装字体(Linux 下用 'Sans' 或 'Serif'),或通过 fontfile 参数上传字体文件路径

FFmpeg drawtext 依赖系统字体库;指定不存在的字体名会静默回退到默认字体,导致显示异常或乱码。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

O(x,y,t) = I(x,y) × (1 - α(x,y,t)) + W(x,y,t) × α(x,y,t)

变量说明

  • O(x,y,t) — 输出视频在坐标(x,y)时刻t的像素值
  • I(x,y,t) — 原始视频在坐标(x,y)时刻t的像素值
  • α(x,y,t) — 水印在坐标(x,y)时刻t的透明度(0~1)
  • W(x,y,t) — 水印图像在坐标(x,y)时刻t的像素值

示例

原始视频帧在像素(100,200)处RGB值为(50,50,50),水印在该位置为(255,0,0),透明度α=0.3。则输出RGB = (50,50,50)×(1-0.3) + (255,0,0)×0.3 = (35,35,35) + (76.5,0,0) ≈ (112,35,35)。

适用范围

适用于基于像素叠加的静态/动态水印渲染(文字/图片/时间段)。不适用于复杂混合模式(如正片叠底、滤色)或编码级水印(如DCT域嵌入)。来源:计算机图形学alpha混合标准公式(Porter & Duff, 1984)。

原理图

上传视频选择视频文件配置水印文字/图片/位置/时段FFmpeg 处理本地合成新视频下载结果保存带水印视频关键细节支持文字水印(字体、颜色、透明度)和图片水印(PNG/JPEG)位置可选:左上、右上、左下、右下、居中;时间段精确到秒所有处理在浏览器内完成,视频不上传服务器
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import subprocess
import json

# 使用 FFmpeg 为视频添加文字水印(位置:右下角,时间段:5-15 秒)
input_video = "input.mp4"
output_video = "output.mp4"
watermark_text = "示例水印"

# drawtext 滤镜:字体大小 24,白色,5 秒后出现,持续 10 秒
cmd = [
    "ffmpeg",
    "-i", input_video,
    "-vf", f"drawtext=text='{watermark_text}':fontsize=24:fontcolor=white:x=w-tw-10:y=h-th-10:enable='between(t,5,15)'",
    "-codec:a", "copy",
    output_video
]

result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
    print("FFmpeg 错误:", result.stderr)
else:
    print(f"水印已添加,输出文件: {output_video}")
package main

import (
	"fmt"
	"os/exec"
	"strings"
)

func main() {
	input := "input.mp4"
	output := "output.mp4"
	text := "示例水印"

	// 使用 FFmpeg drawtext 滤镜添加文字水印(位置:左上角,时间段:0-10 秒)
	filter := fmt.Sprintf("drawtext=text='%s':fontsize=20:fontcolor=white:x=10:y=10:enable='between(t,0,10)'", text)
	args := []string{"-i", input, "-vf", filter, "-codec:a", "copy", output}

	cmd := exec.Command("ffmpeg", args...)
	out, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Printf("FFmpeg 执行失败: %v\n%s\n", err, string(out))
		return
	}
	fmt.Printf("水印已添加,输出文件: %s\n", output)

	// 忽略未使用的 import
	_ = strings.TrimSpace
}
const { execSync } = require('child_process');
const path = require('path');

try {
  const input = 'input.mp4';
  const output = 'output.mp4';
  const text = '示例水印';

  // 使用 FFmpeg 添加图片水印(PNG 图片,位置:居中,时间段:2-8 秒)
  const cmd = `ffmpeg -i ${input} -i watermark.png -filter_complex "[0:v][1:v]overlay=(W-w)/2:(H-h)/2:enable='between(t,2,8)'[out]" -map "[out]" -codec:a copy ${output}`;

  execSync(cmd, { stdio: 'inherit' });
  console.log(`水印已添加,输出文件: ${output}`);
} catch (err) {
  console.error('FFmpeg 执行失败:', err.message);
}

常见问题

10 个高频疑问

视频水印添加后,原视频画质会变差吗?
本工具用 FFmpeg 编码,水印叠加在视频流上,不重新压缩视频本身。默认保持原视频编码参数(码率、帧率、分辨率),画质不会损失。但如果原视频是可变码率或极高码率,叠加水印后文件体积可能略微增大(约 1%-3%),这是元数据重写导致的,不影响视觉画质。输出格式选与原视频一致即可避免二次编码降质。
为什么我添加的文字水印在视频播放时看不清楚?
文字水印清晰度取决于三个因素:字体大小(建议 ≥ 24px)、颜色对比度(白色/黑色字体在浅色背景上易被淹没)、视频分辨率(1080p 以下视频文字需更大)。本工具默认使用黑体 28px 白色半透明,若背景过亮,可改为黑色或带描边的文字样式。另外,视频压缩率过高(码率 < 2Mbps)也会导致文字边缘模糊,建议原视频码率不低于 3Mbps。
水印可以添加到视频的任意位置吗?支持哪些位置?
支持精确像素定位和预设位置两种方式。预设位置包括:左上、右上、左下、右下、正中央、顶部居中、底部居中。精确模式可输入 X/Y 坐标(单位像素),原点为视频左上角。注意:坐标不能超出视频分辨率范围(如 1920x1080 视频,X 最大 1920-水印宽度,Y 最大 1080-水印高度),否则水印会被裁剪或显示不全。推荐用预设位置,自动适配不同分辨率。
为什么我设置的水印起始时间生效了,但结束时间没起作用?
结束时间参数依赖 FFmpeg 的 `enable` 滤镜,部分浏览器端 FFmpeg 版本(WASM)对 `enable='between(t,start,end)'` 的解析有差异。如果结束时间不生效,请检查:1) 结束时间必须大于起始时间;2) 时间格式用秒(如 5.5)或 HH:MM:SS(如 00:00:05.500);3) 视频总时长小于结束时间时,水印会持续到视频结尾。建议先试一段短视频验证参数,再处理长视频。
支持 PNG 透明背景的图片水印吗?为什么加上后有白底?
支持 PNG 透明通道水印。出现白底通常是两个原因:1) 图片本身不是真的透明 PNG(部分截图软件保存的 PNG 带白色背景层),可用 Photoshop/在线工具确认图片通道;2) 输出格式选了 MP4,MP4 编码不支持透明通道,FFmpeg 自动将透明区域填充为白色。如需保留透明效果,选输出格式为 MOV 或 WebM。本工具默认输出 MP4,透明图片水印建议手动切换输出格式。
上传的视频有大小或时长限制吗?为什么我上传失败?
浏览器端处理(WASM 模式)受浏览器内存限制,建议视频 ≤ 500MB 且时长 ≤ 30 分钟。超过此范围,推荐使用后端处理模式(需登录),支持最大 4GB、最长 2 小时。上传失败常见原因:1) 视频编码非 H.264/H.265(如 AV1/VP9 需转码,浏览器不支持直接处理);2) 文件路径含中文/特殊字符(部分浏览器兼容问题);3) 网络波动导致上传中断。可先转码为 H.264 MP4 再试。
这个工具和桌面软件(如格式工厂、Premiere Pro)加水印有什么区别?
核心区别在便利性和功能深度。本工具在线使用,无需安装,适合快速给单个视频加水印(如 Vlog、会议录屏);格式工厂、爱剪辑等桌面软件支持批量处理,但需下载安装包;Premiere Pro 适合专业剪辑场景,可做关键帧动画水印。本工具优势是即开即用、隐私安全(数据不上传服务器),劣势是暂不支持批量、水印样式较少(无旋转/动画)。如果只需加静态文字或图片水印,在线工具更快。
工具会保存我的视频文件吗?处理完成后怎么删除?
本工具分两种模式:纯浏览器模式(WASM)下,视频全程在本地处理,不离开设备,关闭页面即自动清除;后端模式(需登录)下,视频上传至服务器处理,处理完成后 30 分钟自动删除原始文件和输出文件,服务器不保留任何副本。用户也可以手动点击「删除文件」按钮立即清除。后端模式下文件传输全程 HTTPS 加密,但敏感视频建议用浏览器模式完全离线处理。
为什么加水印后视频播放卡顿,尤其是手机上看?
水印本身不导致卡顿,但输出视频的编码参数可能与播放设备不兼容。常见原因:1) 输出码率过高(原视频 4K 高码率 + 水印重编码后码率翻倍),手机解码压力大,建议输出码率 ≤ 20Mbps;2) 输出帧率与原视频不一致(如原 60fps 输出变 30fps),播放器需帧率转换;3) 部分手机浏览器对 WebM 格式支持差,选 MP4 H.264 最兼容。另外,水印位置在视频边缘(如底部黑边区域)不影响播放性能。
视频水印支持批量处理多个视频吗?一次最多能加几个水印?
当前版本不支持批量上传多个视频,每次只能处理一个视频文件。但单个视频支持叠加多个水印层:最多可同时添加 3 个独立水印(如右上角图片 Logo + 左下角文字 + 底部滚动文字),每个水印可独立设置位置、透明度、起止时间。如需批量处理,可考虑用 FFmpeg 命令行脚本,本工具定位是快速单次处理。未来版本可能增加批量模式,但无确切时间表。
选择 打开 +新窗口 esc关闭