市面上的「去水印」多数是要手工操作的桌面软件,一条一条处理。这里是同一件事的 HTTP 接口版:POST 一个视频地址 + 水印所在的矩形,轮询结果,拿回一段在原水印位置重建了背景的视频。高帧率检测 + AIGC 多帧一致修复,所以补出来的区域不会逐帧闪。输出分辨率与输入一致(最高 1080p),按视频时长计费 $0.015 每秒,只对成功的任务扣费。
决定你第一次调用成不成的,基本就是一条:**框要画得宽松**。紧贴着水印边缘的矩形,常常让整段视频原样返回;同一个水印,四周留出 30-50% 的余量就能干净去除。这条是我们自己踩出来的——最初的测试正好贴着水印画框,差点得出「这功能不行」的结论。角标类直接把框拉到画面边缘最稳,那一带本来也没有需要保护的内容。
同一个端点、同一个 key 还能自动擦掉硬字幕和画面里的任意文字,不需要你给区域——处理烧录字幕(而不是固定位置的水印)时用这个。两种任务都能限定只处理时间轴的一段,所以只在片头出现的水印,你只需要针对那几秒设置,而不必对整片做取舍。
cURL
# Region mode — box the watermark, get a clean video back.
# Coordinates are normalized 0-1 (fractions of width/height), so they are
# resolution-independent. Draw the box GENEROUSLY — see the note below.
curl -X POST https://apimodels.app/api/v1/video/generations \
-H "Authorization: Bearer $APIMODELS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "subtitle-erase",
"video_url": "https://example.com/clip-with-watermark.mp4",
"eraseMode": "manual",
"eraseRatioLocation": [
{ "topLeftX": 0.70, "topLeftY": 0.02, "bottomRightX": 1.0, "bottomRightY": 0.20 }
]
}'
# → { "code": 200, "data": { "taskId": "...", "state": "pending" } }
# Poll until state == "completed"; data.resultUrls[0] is the cleaned video.
curl "https://apimodels.app/api/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer $APIMODELS_API_KEY"
# Give the box ~30-50% more room than the mark occupies. A tight box very often
# returns the video unchanged — that is the #1 reason a region erase looks broken.
# For corner marks, take the box out to the frame edge as above.Python
import requests, time
API_KEY = "YOUR_KEY"
URL = "https://apimodels.app/api/v1/video/generations"
H = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
# The watermark sits in the top-right corner. Box it with margin —
# a rectangle cropped tight to the mark often comes back unchanged.
task = requests.post(URL, headers=H, json={
"model": "subtitle-erase",
"video_url": "https://example.com/clip-with-watermark.mp4",
"eraseMode": "manual",
"eraseRatioLocation": [
{"topLeftX": 0.70, "topLeftY": 0.02, "bottomRightX": 1.0, "bottomRightY": 0.20}
],
# Optional: only clean part of the timeline
# "clipFilter": {"mode": "Selected", "clips": [{"start": 0, "end": 12}]},
}).json()["data"]["taskId"]
while True:
d = requests.get(f"{URL}?task_id={task}", headers=H).json()["data"]
if d["state"] == "completed":
print(d["resultUrls"][0]); break
if d["state"] == "failed":
print(d["failMsg"]); break
time.sleep(10)
# Burned-in subtitles instead of a fixed mark? Drop eraseMode and the boxes —
# {"model": "subtitle-erase", "video_url": ..., "eraseType": "subtitle"}
# finds the captions on its own.有。向 https://apimodels.app/api/v1/video/generations 传 model "subtitle-erase"、eraseMode "manual",附上归一化的水印矩形,再轮询 task id 即可。拿回的视频会在原水印位置重建背景,分辨率与输入一致(最高 1080p),$0.015 每秒。不用桌面软件、不用逐条手工遮罩,同一个 key 还能处理字幕和画面文字。
绝大多数情况是框画得太紧。紧贴水印可见边缘的矩形常常让视频原样返回;同一个水印,四周留 30-50% 余量就能干净去除。先把框放大——角标类直接拉到画面边缘——再考虑别的原因。另外两点值得检查:eraseMode 必须是 "manual"(默认的自动模式下,你给的框只是**限定文字检测的范围**,框住一个非文字的 logo 不会有任何变化);坐标是宽高的 0—1 比例,不是像素值。
$0.015 每秒,按输入视频时长计,且只对成功的任务扣费——30 秒是 $0.45,3 分钟是 $2.70。没有订阅、没有按席位授权、没有起步量。去水印、去字幕,还是一次处理两者,单价相同;把任务限定在时间轴的一段**不会降价**,因为整个文件仍然要解码和重新编码。
位置固定的水印是最顺的情况——一个框覆盖整段即可。会移动的话有两条路:给多个框覆盖它经过的轨迹(会一起处理),或者用 clipFilter 把时间轴拆开、不同段落分别处理。如果水印在整个画面里大范围游走就不适合了,因为要框的区域几乎等于整幅画面。
不用。不传 eraseMode 就是自动模式:eraseType "subtitle"(默认)会擦掉画面中任意位置的字幕样式文字,eraseType "text" 则擦掉任意屏幕文字、不限于字幕。那种模式下框是可选的,作用只是**限定检测范围**——想清掉下三分之一的字幕、又保留片头标题卡时很有用。区域模式是为那些检测根本不会当成文字的东西准备的:logo、台标、签名、图片水印。
这完全取决于素材本身,判断在你,不在我们。处理自己拍的片子、你持有授权的素材,或权利人已同意的内容,属于常规后期。把别人享有版权的作品上的标记去掉再发布则不属于——而且在一些法域,移除权利管理信息本身就是独立于侵权的另一项违法行为。我们提供处理能力,你需要对所提交视频的权利归属负责。
不需要。在 apimodels.app 注册、生成一个 API Key 就能调。同一个 key 在同一个 base URL 下还能调 Seedance、VEO、Kling、Sora、gpt-image-2、Claude、GPT-5.6 和 Gemini——所以「先生成再清理」的流水线只需要一套凭证、一个账单主体,不用拼几家。
是「创建任务 + 轮询」的异步流程,耗时随片长和分辨率增加,短片通常几分钟内完成。**结果文件保留 7 天**,需要长期保存的请及时下载或转存。任务记录本身会留在控制台历史里。