为视频或图片添加水印——叠加 Logo 与文字的 API。
一次 POST,就能在任意视频或图片上叠加 Logo 图片或文字。位置、不透明度和缩放比例直接写在请求里,返回的是 Fotovid 托管的文件,拿到就能直接对外提供。
curl -X POST https://api.fotovid.co/v1/video/watermark \
-H "Authorization: Bearer p6_YOUR_KEY_ID:YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{
"source_url": "https://cdn.yoursite.com/clip.mp4",
"params": {
"type": "image",
"watermark_image_url": "https://cdn.yoursite.com/logo.png",
"position": "bottom-right",
"opacity": 0.7,
"scale": 0.2
}
}'为什么在 serverless 上加水印这么痛苦
加水印看起来是小事一桩,直到你真的要把它跑在 serverless 函数里。ffmpeg 的 overlay 滤镜需要完整的二进制,还要把你的 Logo 先落到可写磁盘上,然后它会把整个文件解码再重新编码——只要素材比短片段长一点,这个过程就会轻松冲破 Lambda 和 Vercel 的执行时长与内存上限。到头来,只是为了在角落盖一个 Logo,你却得去伺候 Layer 打包、临时存储和冷启动。
- ffmpeg 二进制和依赖库会让你的部署体积远远超出 serverless 常见的大小上限
- 对完整时长的视频重新编码,会撑爆函数的超时时间和内存
- 叠加图片意味着要在临时磁盘上下载、暂存并清理文件
- 要让位置、不透明度和缩放在各种分辨率下都精确到像素,是一堆琐碎的 filter graph 调参活儿
请求参数
POST /v1/video/watermark & /v1/image/watermark
| Field | Type | Default | Description |
|---|---|---|---|
| source_url* | string (URL) | — | 源视频或图片的 HTTPS URL |
| params.type | "image" | "text" | "combo" | "text" | 水印类型 |
| params.watermark_image_url | string (URL) | — | Logo 图片 URL(image/combo 时必填) |
| params.text | string | — | 叠加的文字(text/combo 时必填) |
| params.position | string | "bottom-right" | top-left · top-right · bottom-left · bottom-right · center |
| params.opacity | number | 1 | 0–1 |
| params.scale | number | 0.15 | 水印宽度相对源文件的比例(0–1) |
三步完成第一次调用
- 1领取免费 API 密钥
注册并创建一个密钥。每个请求都用 Authorization: Bearer p6_<key_id>:<secret> 请求头做鉴权。起步无需绑卡——用量按 credits 计费($1 = 100 credits,一次水印调用消耗 1 credit)。
- 2POST 你的源文件和水印参数
按标准请求格式调用 POST /v1/video/watermark 或 POST /v1/image/watermark:一个指向输入文件的 source_url(https URL),外加一个 params 对象。把 type 设为 image、text 或 combo,然后传 watermark_image_url 和/或 text,再配上 position(top-left、top-right、bottom-left、bottom-right 或 center)、opacity(0–1)、scale(0–1,默认 0.15)和 padding。Fotovid 会下载输入文件、叠加水印,并同步返回结果。
- 3保存返回的结果 URL
响应是扁平的 JSON,包含 id、type,以及指向水印文件的 Fotovid 托管 url(视频响应还会带上 duration)。把它下载下来、存一份自己的副本——托管 URL 会过期,只应作为一次性中转,而不是永久存储。
