视频擦除(字幕 / 水印 / 台标)
从视频里去掉硬字幕、画面文字和文字水印,并在原位重建干净背景。高帧率检测 + AIGC 多帧一致修复,补出来的区域不会逐帧闪。有两种指定方式:自动模式替你找文字;区域模式按你给的矩形处理——水印、台标、签名这类检测不会当成文字的东西走这一种(纯色块类图形 logo 效果不稳,见下文)。输出分辨率与输入一致(最高 1080p),按视频时长计费 $0.015 每秒,仅成功扣费。
先读这一条:区域框要画得宽松
区域模式下,矩形要比目标本身大 30-50%。紧贴着水印边缘画的框,常常让整段视频原样返回;同一个水印,四周留出余量就能干净去除。角标类直接把框拉到画面边缘最稳,那一带本来也没有需要保护的内容。
这是「框了却没反应」最常见的原因,也是我们自己踩出来的:最初的测试正好贴着水印画框,差点得出「这功能不行」的结论。
两种模式
| eraseMode | 适合处理 | 区域框的作用 |
|---|---|---|
| auto(默认) | 硬字幕、画面里的任意文字 | 可选。只是【限定检测范围】——只擦框内被识别出的文字 |
| manual | 文字水印(如 @账号名)、签名、台标与角标里的文字;纯色块类图形 logo 效果不稳 | 必填。框【就是处理目标】,不依赖文字识别定位 |
同一批 eraseRatioLocation 在两种模式下含义完全不同,这是最容易踩错的地方:在 auto 模式下框住一个没有文字的 logo,结果是毫无变化——因为框内没有可识别的文字。要擦非文字的东西,必须切到 manual。
实测(2026-10-18,合成素材):半透明文字水印 "@demo_channel" 用 manual 框住能干净去掉,auto 配 eraseType: "text" 也能去掉;但一块纯色方块图形 logo,即使框比它大 30-50%,manual 也基本没动。图形 logo 先拿一小段试,别直接跑整片。
创建任务
POST /api/v1/video/generations —— 异步:创建后轮询同一个端点取结果。
# ── Region mode — remove a watermark / corner logo ──────────────────────
# Box the mark with normalized 0-1 coordinates (fractions of width/height).
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_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 }
]
}'
# ⚠️ Draw the box GENEROUSLY — about 30-50% larger than the mark itself.
# A box cropped tight to the mark very often returns the video unchanged.
# For a corner logo, run the box out to the frame edges as above.
# ── Automatic mode — remove hardcoded subtitles (no box needed) ─────────
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "subtitle-erase",
"video_url": "https://example.com/clip-with-subtitles.mp4",
"eraseType": "subtitle"
}'
# Poll until state == "completed" — data.resultUrls[0] is the cleaned video.
# Result files are kept 30 days.
curl "https://api.apimodels.app/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"请求参数
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| model | 是 | string | 固定为 subtitle-erase |
| video_url | 是 | string | 待处理视频的公开地址(MP4 / MOV)。也接受 videoUrl |
| eraseMode | 否 | string | "auto"(默认,自动检测文字)或 "manual"(按你给的区域框处理,此时 eraseRatioLocation 必填) |
| eraseType | 否 | string | "subtitle"(默认,只去字幕样式的文字)或 "text"(去画面任意文字)。仅 auto 模式有效 |
| eraseRatioLocation | 否 | array | 归一化(0-1)区域框 [{ topLeftX, topLeftY, bottomRightX, bottomRightY }]。manual 模式下必填。⚠️ 要比目标本身大 30-50% |
| clipFilter | 否 | object | { mode: "Selected" | "Skip", clips: [{ start, end }] } —— 按秒只处理("Selected")或只跳过("Skip")这些时间段。两种模式都支持 |
| callback_url | 否 | string | 任务完成后回调该地址,省去轮询 |
参数名驼峰和下划线两种写法都收:eraseMode / erase_mode、eraseType / erase_type、eraseRatioLocation / erase_ratio_location、clipFilter / clip_filter;同时给了两种以驼峰为准。clipFilter.mode 不区分大小写。
失败时返回什么
- 建单时就被拒:HTTP 状态码即错误码,返回 { code, msg }。400 = 参数不对(缺 video_url、取值非法、manual 模式没给区域框)或读不到视频时长(链接不公开 / 已失效);401 = API Key 无效;402 = 余额不足。这些情况不会创建任务、不扣费。
- 建单成功、处理中失败:轮询 GET ?task_id= 仍返回 HTTP 200 和 code 200,失败信息在 data 里 —— data.state 为 "failed",data.failCode / data.failMsg 说明原因,data.credits 为 0(已全额退款),data.retryable 表示值不值得重试。常见原因:源视频导入失败(链接在处理期间失效)、处理超过 60 分钟超时。配了 callback_url 的,回调里是同样的 data。
计费与限制
- $0.015 每秒,按【输入视频时长】计,仅成功扣费、失败退款。30 秒 = $0.45,3 分钟 = $2.70。
- 用 clipFilter 只处理一段【不会降价】——整个文件仍要解码和重新编码。
- 处理时长以分钟计:30–60 秒的片子通常 10 分钟左右,多数在 16 分钟内,偶尔更久。时间几乎全花在逐帧文字检测与修复上,不是排队——属正常耗时,不是任务卡死。建议用 callback_url,不要长时间轮询等待。
- 时长没有硬性上限,但任务 60 分钟内没完成会按超时失败(全额退款)。建议单条不超过 60 秒;更长的视频先切成 60 秒以内的片段分别提交。
- 源视频 URL 需在整个任务期间保持可访问;预签名 URL 的有效期请不要短于 30 分钟(导入通常几秒完成,但 URL 一旦过期任务即失败)。
- 输出分辨率与输入一致,超过 1080p 按 1080p 输出。
- 结果文件保留 30 天,请及时下载或转存。
- 位置固定的水印最顺;会移动的可以给多个框覆盖轨迹,或用 clipFilter 分时段处理。在整幅画面里大范围游走的水印不适合。
- 去水印是否合法取决于素材本身,判断在你:处理自己的片子或已获授权的素材属于常规后期,去掉他人版权作品上的标记再发布不是。
相关
常见问题
能用 API 去掉视频水印吗?
可以。向 /api/v1/video/generations 传 model "subtitle-erase"、eraseMode "manual",附上归一化(0-1)的水印矩形,再轮询 task id。拿回的视频会在原水印位置重建背景,分辨率与输入一致(最高 1080p),$0.015 每秒。
为什么水印没被去掉?
绝大多数是框画得太紧。把框放大到比目标本身大 30-50% —— 紧贴可见边缘的矩形常常让视频原样返回,留出余量就能干净去除。另外确认 eraseMode 是 "manual":默认的 auto 模式下,框只是限定文字检测的范围,框住一个没有文字的 logo 不会有任何变化。坐标是宽高的 0-1 比例,不是像素。
去字幕 / 去水印多少钱?
按输入视频时长 $0.015 每秒,仅成功扣费 —— 30 秒 $0.45,3 分钟 $2.70。去字幕、去画面文字、去水印同价。用 clipFilter 只处理一段不会降价,因为整个文件仍要解码和重新编码。
去字幕 / 去水印要多久?
以分钟计,不是秒:30 秒的 1080p 片子通常 10–14 分钟,60 秒约 14–16 分钟(生产任务实测)。时间几乎全花在逐帧文字检测与修复上,不是排队,所以跑了十分钟的任务是正常的、不是卡死。建议用 callback_url 代替长时间轮询,并保证源视频 URL 至少 30 分钟内可访问。
去硬字幕需要框选吗?
不需要。不传 eraseMode 就是自动模式:eraseType "subtitle"(默认)会擦掉画面中任意位置的字幕样式文字,eraseType "text" 则擦掉任意屏幕文字。那种模式下框是可选的,作用只是限定检测范围 —— 想清掉下三分之一字幕、又保留片头标题卡时很有用。
支持哪些格式和分辨率?
输入支持 MP4 和 MOV(公开地址)。输出分辨率与输入一致,上游封顶 1080p。流程是「创建任务 + 轮询」的异步接口;结果文件保留 30 天,需要长期保存请及时下载或转存。