将视频/音频媒体上传至BytePlus VOD(视频点播)存储,返回Vid及播放引用;支持本地文件上传(ApplyUploadInfo +...
VOD 精密擦除是一项面向实际任务的技能,主要用于Uploads video/ audio to a BytePlus VOD 空间(从本地文件或公共 URL) 返回vid://... reference.;对于已经使用 VOD 的媒体,请提交精密擦除任务。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
将视频/音频上传至 BytePlus VOD 存储空间(来源为本地文件或公开 URL),并返回一个 vid://… 引用。对于已存在于 VOD 中的媒体,提交精准擦除任务(StartExecution → Operation.Task.Type: Erase),且仅使用自动 OCR。请不要向终端用户说明其可切换擦除模式(手动 / 自动)——本能力始终发送 Auto 模式。NewVid 始终为 true(不作为用户可选配置项暴露)。
| 方面 | 行为 |
|---|---|
| 输入 | Vid 或 DirectUrl(JSON 字段 video) |
| 擦除覆盖范围 | 默认仅擦除字幕(Auto.Type: Subtitle,SubtitleFilter: {})。用户可通过设置 text: true 或 all_text: true 选择擦除所有检测到的屏幕内文字 → 触发 Auto.Type: Text。 |
| 时间线范围 | 默认为整段视频(不启用 ClipFilter)。可选传入 clip_filter,其 mode 取值为 skip 或 selected;任一 mode 被指定时,clips 字段为必填项(非空列表)。 |
| 输出媒资 | NewVid 始终为 true —— 不可配置,亦不向用户提示。 |
| 擦除元数据 | 默认 with_erase_info: true(即 WithEraseInfo)。若设为 false,则标准输出中的 EraseMeta 为 {};当 Erase.File 返回时,VideoUrls 字段仍会被填充。 |
不支持:Manual 模式、自定义比例的 Locations、对 SubtitleFilter 超出 {} 的调优、VideoOption.EncodeMode、覆盖 NewVid 值。
精准擦除白名单:若遇到 HTTP 403 错误或“Permission denied”,请按 BytePlus VOD 要求说明白名单 / 工单流程。
.env 文件 —— 脚本会自动加载):BYTEPLUS_ACCESSKEY — BytePlus Access KeyBYTEPLUS_SECRETKEY — BytePlus Secret KeyVOD_SPACE_NAME — VOD 存储空间名称uv run python …(若已安装依赖,也可直接运行 python scripts/…)。上传流水线(本地文件):
[S1_APPLY] ApplyUploadInfo → TOS 上传地址 + SessionKey
[S2_TOS] 向 TOS 执行 PUT(直传或分块)
[S3_COMMIT] CommitUploadInfo → Vid
输出:{ Vid, Source, PlayURL, FileName, SpaceName, SourceUrl }
上传流水线(URL):
[S1_UPLOAD] 提交 URL 上传任务(UploadMediaByUrl)→ JobId
[S2_POLL] 轮询 QueryUploadTaskInfo → Vid
输出:{ Vid, Source, PlayURL, FileName, SpaceName, SourceUrl, JobId }
精准擦除流水线:
[S3_ERASE] 提交 Erase 任务(StartExecution / Task.Type Erase)→ RunId
[S4_POLL] 轮询 GetExecution → 输出 Erase.File(+ 可选 Erase.Info)
输出:{ Status, SpaceName, VideoUrls[{ FileId, Vid, DirectUrl, Source, Url }], EraseMeta? }
运行任意脚本前,请确认:
.env 文件或环境变量中包含 BYTEPLUS_ACCESSKEY、BYTEPLUS_SECRETKEY 和 VOD_SPACE_NAME。根据用户意图选择对应流水线:
| 用户意图 | 流水线 | 入口脚本 |
|---|---|---|
| 上传视频至 VOD | 上传 | scripts/upload.py |
| 字幕 / 屏幕内文字擦除 | 精准擦除 | scripts/precise_erase.py |
请从 Skill 根目录(byted-byteplus-vod-precision-erasure/)执行:
# 本地文件上传(完成后返回 Vid) uv run python scripts/upload.py "/path/to/video.mp4" [space_name] # URL 上传(轮询直至返回 Vid) uv run python scripts/upload.py "https://example.com/video.mp4" [space_name] uv run python scripts/upload.py "https://example.com/sample.mp4" my_space
http:// / https:// URL(自动识别)。VOD_SPACE_NAME。.mp4、.mov、.mp3)。本地文件(同步,三步):
ApplyUploadInfo(API 版本 2023-01-01)→ 获取 TOS 地址与 SessionKey < 20 MiB,否则分块上传) CommitUploadInfo(2023-01-01)→ 返回 VidURL 拉取(异步 + 轮询):
UploadMediaByUrl(2023-01-01)→ 返回 JobId QueryUploadTaskInfo 直至完成(轮询限制同关联技能:通常为 360 次 × 5 秒) Vid成功时,标准输出为单个 JSON 对象,例如:
{
"Vid": "v0d123abc",
"Source": "vid://v0d123abc",
"PlayURL": "https://example.cdn.com/xxx.m3u8",
"PosterUri": "",
"FileName": "uuid-filename.mp4",
"SpaceName": "my_space",
"SourceUrl": "https://example.com/video.mp4",
"JobId": "job-xxx"
}
Source(vid://…)供下游技能使用。若 URL 轮询耗尽重试次数,标准错误输出 / JSON 中将包含类似内容:
{
"error": "Polling timed out (360 attempts × 5s); the URL pull upload is still processing",
"resume_hint": {
"description": "The URL upload has not finished yet; retry with the command below",
"command": "uv run python scripts/upload.py "" [space_name]"
},
"JobIds": "job-xxx",
"State": "running"
}
请从 Skill 根目录(byted-byteplus-vod-precision-erasure/)执行:
# 默认:仅字幕、整段视频、启用 WithEraseInfo
uv run python scripts/precise_erase.py '{"type":"Vid","video":"v0310abc"}'
uv run python scripts/precise_erase.py '{"type":"Vid","video":"vid://v0d225gxxx"}' production_space
# 更广范围 OCR(字幕 + 其他屏幕内文字)
uv run python scripts/precise_erase.py '{"type":"Vid","video":"v0310abc","text":true}'
uv run python scripts/precise_erase.py @params.json
# 超时后恢复执行
uv run python scripts/poll_execution.py '' [space_name]
| 参数 | 类型 | 是否必需 | 说明 |
|---|---|---|---|
type |
字符串 | ✅ | Vid 或 DirectUrl |
video |
字符串 | ✅ | Vid 或 VOD 中的 FileName;vid:// / directurl:// 前缀将被自动剥离 |
text |
布尔值 | 否 | 若为 true:启用 Auto.Type: Text(更激进)。默认 false → 仅字幕。 |
all_text |
布尔值 | 否 | 等效于 text(若两者均设置,优先应用 text)。 |
clip_filter |
对象 | 否 | 省略表示整段视频。若设置:其 mode 必须为 skip 或 selected,且 clips 为必填项(非空列表,元素为 { "start", "end" },单位为秒;也接受 Start/End 字段)。 |
with_erase_info |
布尔值 | 否 | 默认 true(即 WithEraseInfo)。若为 false,则不请求详细的擦除几何信息;标准输出中 EraseMeta 为 {}。 |
请不要向用户提示 Manual 模式 或 NewVid 配置项。
需明确区分:仅字幕 vs 全部屏幕内文字;整段视频 vs 指定片段(skip / selected + clips);以及用户是否需要区域级擦除遥测信息(with_erase_info)。请使用对话式表述 —— 除非用户主动询问实现细节,否则避免暴露原始 JSON 字段名。
成功时,标准输出为单个 JSON 对象,大致如下:
{
"Status": "Success",
"SpaceName": "my_space",
"VideoUrls": [
{
"FileId": "…",
"Vid": "v0…",
"DirectUrl": "path/to/output.mp4",
"Source": "vid://v0…",
"Url": "https://example.cdn.com/…"
}
],
"AudioUrls": [],
"Texts": [],
"EraseMeta": {
"Duration": 57.099,
"Info": {}
}
}
当 with_erase_info 为 false 时,EraseMeta 为 {}。
VideoUrls[0].Url:当该空间签名成功时,此 URL 可播放或下载。 Source:若 API 返回新 Vid,优先使用 vid://…;否则使用 directurl://…。与增强类技能采用相同模式:
{
"error": "Polling timed out (360 attempts × 5s); the job is still processing",
"resume_hint": {
"description": "The job has not finished yet; resume polling with the command below",
"command": "uv run python scripts/poll_execution.py '' [space_name]"
}
}
| 名称 | 说明 | 是否必需 |
|---|---|---|
BYTEPLUS_ACCESSKEY |
BytePlus Access Key | 是 |
BYTEPLUS_SECRETKEY |
BytePlus Secret Key | 是 |
VOD_SPACE_NAME |
VOD 存储空间名称 | 是(或通过 CLI 参数传入) |
VOD_POLL_INTERVAL |
轮询间隔(秒,默认为 5) | 否 |
VOD_POLL_MAX |
最大轮询次数(默认为 360) | 否 |
VOD_URL_EXPIRE_MINUTES |
签名 URL 过期时间(分钟,默认为 60) | 否 |
VOD_PLAY_DOMAIN |
强制指定播放域名(可选,优先级最高) | 否 |
VOD_HOST |
覆盖 VOD OpenAPI 主机名(可选) | 否 |
所有失败均统一使用:
{"error": "error description"}
ApplyUploadInfo(2023-01-01)CommitUploadInfo(2023-01-01)UploadMediaByUrl(2023-01-01)QueryUploadTaskInfo(2023-01-01)StartExecution(2025-07-01)GetExecution(2025-07-01)相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.5万人学习
最新文章