Skip to content

暂不可用

网关翻译层尚未适配 Video Edit 模型的视频输入字段映射(T2V/I2V/R2V 已适配)。当前调用会返回 "video-edit requires exactly 1 video media item" 错误。需等待网关侧更新后方可使用。以下文档基于 DashScope 官方 API 推导,待适配完成后 video_url 字段格式可能会调整。

下载原始 Skill 文件

bash
curl https://ai.ospreyai.cn/docs/raw/skills/happyhorse-video-edit.md -o happyhorse-video-edit.md

对话式接入

本 Skill 文件可被 AI 助手(Claude Code、Cursor、ChatGPT 等)学习,通过自然语言对话完成视频编辑。

在 AI 对话中发送以下指令即可:

学习:https://ai.ospreyai.cn/docs/raw/skills/happyhorse-video-edit.md,保存为本地的技能 skills

更多接入方式和使用示例详见 API 文档 — AI 助手对话式接入


HappyHorse 1.0 视频编辑 (Video Edit) — 暂不可用

Overview

通过 Open.OspreyAI 网关 https://open.ospreyai.cn 使用 HappyHorse 1.0 模型,对已有视频进行编辑:风格变换、局部替换等。支持输入视频 + 可选参考图 + 文字指令。

HappyHorse Video Edit 是视频编辑模型,输入一段待编辑视频,可选 0-5 张参考图片,配合文字指令完成各种编辑任务。输出视频时长 3-15 秒(输入视频 ≤15 秒时,输出与输入时长一致)。采用异步任务模式:提交任务 → 轮询状态 → 下载视频。

核心特性:

  • 视频编辑:对已有视频进行风格变换、局部替换等编辑
  • 参考图引导:可选 0-5 张参考图片,引导编辑效果
  • 文字指令:prompt 描述编辑意图(风格转换、替换物体等)
  • 高清输出:支持 720P、1080P 分辨率
  • 保持时长:输入视频 ≤15 秒时,输出时长与输入一致
  • 异步任务:提交后立即返回 task_id,后台编辑完成后通过 OSS 临时链接下载

API 参考文档阿里云 — HappyHorse 视频编辑 API

与其他 HappyHorse Skill 的对比:

Skill模型输入输出适用场景
HappyHorse 文生视频T2V文字提示词1-10s 视频纯文字驱动
HappyHorse 图生视频I2V1 张首帧 + 文字3-15s 视频图片动态化
HappyHorse 参考视频R2V1-6 张参考图 + 文字3-15s 视频多图融合
本 SkillVideo Edit视频 + 可选参考图 + 文字3-15s 视频视频编辑、风格变换

⚠️ 注意:Video Edit 模型的网关请求格式(video_url 字段)尚未完成端到端验证。网关翻译层目前对 T2V/I2V/R2V 已完成适配,Video Edit 可能尚需等待网关侧更新。以下文档基于 DashScope 官方 API 和已有 HappyHorse 模型的适配规律推导,实际调用时如遇格式错误,请联系网关管理员确认最新适配状态。

所有 API 均需 Bearer Token 鉴权(Authorization: Bearer sk-xxx)。

Quick Start

bash
export GW="https://open.ospreyai.cn"
export API_KEY="sk-your-api-key"

# 1. 提交视频编辑任务
curl -s -X POST "$GW/v1/video/generations" \
  -H "X-DashScope-Async: enable" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.0-video-edit",
    "prompt": "让视频中的角色穿上图片中的条纹毛衣",
    "video_url": "https://example.com/video.mp4",
    "images": ["https://example.com/clothes.png"],
    "resolution": "720P",
    "watermark": false
  }'

# 响应: {"task_id": "task_xxx", "status": "queued"}

# 2. 轮询任务状态(视频编辑通常需要数分钟)
curl -s "$GW/v1/video/generations/{task_id}" \
  -H "Authorization: Bearer $API_KEY"

# 3. 下载编辑后的视频
curl -sL "{result_url}" -o edited_video.mp4

Task Routing

场景动作
首次编辑视频→ Route A: Submit Task
需要查看任务是否完成→ Route B: Check Status
需要获取或下载视频→ Route C: Download
需要调优参数→ Route D: Tune Parameters
需要排查错误→ Route E: Troubleshoot

Route A: Submit Task

服务信息

  • 网关地址: https://open.ospreyai.cn
  • 提交接口: POST /v1/video/generations
  • 查询接口: GET /v1/video/generations/{task_id}
  • 鉴权方式: Authorization: Bearer sk-xxx
  • 异步头: X-DashScope-Async: enable

Step 1: 提交视频编辑任务

bash
curl -s -X POST "$GW/v1/video/generations" \
  -H "X-DashScope-Async: enable" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "happyhorse-1.0-video-edit",
    "prompt": "将视频转换为水彩画风格",
    "video_url": "https://example.com/video.mp4",
    "resolution": "720P",
    "watermark": false
  }'

响应:

json
{
    "id": "task_xxxxxxxxxxxxxxxxxxxxxxxxx",
    "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxxx",
    "object": "video",
    "model": "happyhorse-1.0-video-edit",
    "status": "queued",
    "progress": 0,
    "created_at": 1780000000
}

记住 task_id,用于后续查询任务状态和获取视频。

请求参数

字段类型必填说明示例值
modelstring模型名称"happyhorse-1.0-video-edit"
promptstring编辑指令(描述编辑意图)"将视频转换为水彩画风格"
video_urlstring待编辑视频 URL"https://example.com/video.mp4"
imagesarray参考图片 URL 数组,0-5 张["https://..."]
resolutionstring分辨率:720P / 1080P"720P"
watermarkboolean是否添加水印,默认 truefalse
seedinteger随机种子 [0, 2147483647]42

video_url 字段说明

video_url 是待编辑视频的 URL,支持两种格式:

  1. 公网 URL:HTTP 或 HTTPS 协议

    json
    "video_url": "https://example.com/video.mp4"
  2. Base64 编码(不推荐,视频文件较大):

    json
    "video_url": "data:video/mp4;base64,AAAA..."

视频要求

限制项要求
时长3-60 秒
分辨率长边不超过 1920 像素
文件大小不超过 100MB
格式MP4(推荐)、MOV

⚠️ 输出视频时长为 3-15 秒。当输入视频 ≤15 秒时,输出时长与输入一致;超过 15 秒时,输出固定为 15 秒。

images 字段说明(可选)

images 是参考图片 URL 数组,用于引导编辑效果:

json
"images": [
  "https://example.com/reference1.png",
  "https://example.com/reference2.png"
]

在 prompt 中通过 [Image N] 引用对应图片:

让视频中的角色穿上[Image 1]中的衣服,背景换成[Image 2]的风格

参考图片要求

限制项要求
格式JPEG、JPG、PNG、WEBP
分辨率宽和高均不小于 300 像素
宽高比1:2.5 ~ 2.5:1
文件大小不超过 20MB
数量0-5 张(可选)

请求头

Header说明
X-DashScope-Async: enable启用异步任务模式(必传)
Authorization: Bearer sk-xxxAPI 鉴权
Content-Type: application/jsonJSON 请求体

Route B: Check Status

查询任务状态

bash
curl -s "$GW/v1/video/generations/{task_id}" \
  -H "Authorization: Bearer $API_KEY"

进行中:

json
{
    "code": "success",
    "data": {
        "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxxx",
        "status": "IN_PROGRESS",
        "progress": "50%",
        "submit_time": 1780000000,
        "start_time": 1780000001,
        "finish_time": 0,
        "data": {
            "output": {
                "task_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                "task_status": "RUNNING"
            }
        }
    }
}

已完成:

json
{
    "code": "success",
    "data": {
        "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxxx",
        "status": "SUCCESS",
        "progress": "100%",
        "result_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/...",
        "submit_time": 1780000000,
        "start_time": 1780000001,
        "finish_time": 1780000120,
        "data": {
            "usage": {
                "SR": 720,
                "duration": 13.24,
                "input_video_duration": 6.62,
                "output_video_duration": 6.62,
                "video_count": 1
            },
            "output": {
                "task_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/...",
                "orig_prompt": "让视频中的角色穿上图片中的条纹毛衣",
                "task_status": "SUCCEEDED"
            }
        }
    }
}

任务状态流转

queued → IN_PROGRESS (50%) → SUCCESS (100%) / FAILED
状态说明
queued任务已提交,排队等待
IN_PROGRESS正在编辑中
SUCCESS编辑成功,可下载视频
FAILED编辑失败,查看 fail_reason

⚠️ 视频编辑任务耗时较长(通常 2-10 分钟),比 T2V/I2V/R2V 更久,请耐心等待。

Route C: Download

任务成功后,从响应中获取视频下载链接:

  • data.result_url:顶层字段,直接的下载 URL
  • data.data.output.video_url:嵌套字段,同上

两个 URL 相同,均为阿里云 OSS 临时链接(有效期约 24 小时)。

bash
# 直接下载
curl -sL "{result_url}" -o edited_video.mp4

⚠️ 视频 URL 带签名参数,有效期约 24 小时(Expires 参数控制),过期后需重新查询任务获取新链接。

Python 调用示例

python
import requests
import time

GW = "https://open.ospreyai.cn"
API_KEY = "sk-your-api-key"
headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
    "X-DashScope-Async": "enable"
}

# 1. 提交视频编辑任务
resp = requests.post(f"{GW}/v1/video/generations", headers=headers, json={
    "model": "happyhorse-1.0-video-edit",
    "prompt": "让视频中的角色穿上[Image 1]中的条纹毛衣",
    "video_url": "https://example.com/video.mp4",
    "images": ["https://example.com/clothes.png"],
    "resolution": "720P",
    "watermark": false
})
task = resp.json()
task_id = task["task_id"]
print(f"Task submitted: {task_id}")

# 2. 轮询任务状态(视频编辑耗时较长,间隔可设大些)
headers_query = {"Authorization": f"Bearer {API_KEY}"}
while True:
    resp = requests.get(f"{GW}/v1/video/generations/{task_id}", headers=headers_query)
    data = resp.json().get("data", {})
    status = data.get("status", "")
    progress = data.get("progress", "")

    if status == "SUCCESS":
        video_url = data.get("result_url") or data.get("data", {}).get("output", {}).get("video_url")
        print(f"Video ready: {video_url}")
        break
    elif status == "FAILED":
        print(f"Failed: {data.get('fail_reason')}")
        break

    print(f"Status: {status} ({progress})")
    time.sleep(10)  # 视频编辑耗时长,10秒轮询

# 3. 下载视频
if status == "SUCCESS":
    resp = requests.get(video_url)
    with open("edited_video.mp4", "wb") as f:
        f.write(resp.content)
    print(f"Downloaded: edited_video.mp4 ({len(resp.content)} bytes)")

Route D: Tune Parameters

分辨率

说明生成时间
720P720p 标清较快
1080P1080p 高清较慢

⚠️ Video Edit 不支持 durationratio 参数。输出视频时长由输入视频决定(≤15 秒时保持一致),画面比例与输入视频一致。

水印

说明
false不添加水印(推荐,示例中默认使用)
true添加水印,右下角显示 "Happy Horse"(API 默认值)

种子

说明
0 - 2147483647固定 seed 可提高结果复现性
不传系统自动生成随机种子

Prompt 编写技巧

Video Edit 的 prompt 用于描述编辑意图

风格转换:

"将视频转换为水彩画风格"
"将视频转换为赛博朋克风格,增加霓虹灯光效果"
"将视频转换为黑白电影风格"

局部替换(配合参考图):

"让视频中的角色穿上[Image 1]中的条纹毛衣"
"将视频中的汽车替换为[Image 1]中的红色跑车"
"将视频中的天空替换为[Image 1]中的星空"

添加/移除元素:

"在视频背景中添加樱花飘落的效果"
"移除视频中的文字水印"
"为视频中的角色添加墨镜"

运动调整:

"将视频转换为慢动作效果"
"增加镜头推进效果"
"让视频中的角色动作更加流畅"

视频编辑示例

纯视频 + 指令(无参考图):

json
{
  "model": "happyhorse-1.0-video-edit",
  "prompt": "将视频转换为水彩画风格",
  "video_url": "https://example.com/video.mp4",
  "resolution": "720P"
}

视频 + 参考图 + 指令:

json
{
  "model": "happyhorse-1.0-video-edit",
  "prompt": "让视频中的马头人身角色穿上[Image 1]中的条纹毛衣",
  "video_url": "https://example.com/video.mp4",
  "images": ["https://example.com/clothes.png"],
  "resolution": "720P"
}

视频 + 多张参考图 + 复杂指令:

json
{
  "model": "happyhorse-1.0-video-edit",
  "prompt": "将视频中的角色服装替换为[Image 1]中的西装,背景替换为[Image 2]中的办公室场景",
  "video_url": "https://example.com/video.mp4",
  "images": [
    "https://example.com/suit.png",
    "https://example.com/office.png"
  ],
  "resolution": "1080P"
}

输出视频参数

  • 分辨率: 720P 或 1080P(按请求参数)
  • 比例: 与输入视频一致(无 ratio 参数)
  • 时长: 3-15 秒(输入 ≤15 秒时保持一致,超过 15 秒时输出 15 秒)
  • 格式: MP4
  • 文件大小: 约 5-30 MB

Route E: Troubleshoot

问题排查方法
Invalid URL检查 URL 是否为 /v1/video/generations(不是 /v1/services/aigc/...
prompt is requiredprompt 是必填字段,必须在顶层
video_url is requiredvideo_url 是必填字段,必须提供待编辑视频的 URL
happyhorse supports video task relay only不能走 /v1/chat/completions/v1/images/generations,必须走 /v1/video/generations
401 鉴权失败检查 Bearer Token 是否有效
任务长时间 IN_PROGRESS视频编辑通常需要 2-10 分钟,比生成任务更久,耐心等待
任务 FAILED检查 fail_reason 字段,可能是视频不合规或模型过载
视频 URL 过期重新查询任务状态获取新的 result_url
视频不符合要求检查时长(3-60s)、分辨率(长边≤1920px)、大小(≤100MB)
图片不符合要求检查格式(JPEG/PNG/WEBP)、分辨率(≥300px)、宽高比(1:2.5~2.5:1)、大小(≤20MB)

请求格式对比(常见错误)

项目❌ 错误(DashScope 原始格式)✅ 正确(网关适配格式)
URL/v1/services/aigc/video-generation/video-synthesis/v1/video/generations
prompt{"input": {"prompt": "..."}}{"prompt": "..."}
视频{"input": {"media": [{"type": "video", "url": "..."}]}}{"video_url": "..."}
参考图{"input": {"media": [..., {"type": "reference_image", "url": "..."}]}}{"images": ["..."]}
参数{"parameters": {"resolution": "720P"}}{"resolution": "720P"}

⚠️ 关键差异:网关将 DashScope 的 input.media 拆分为:

  • video_url:视频 URL(对应 type: "video"
  • images:参考图片 URL 数组(对应 type: "reference_image"

与其他 HappyHorse 模型的关键差异

特性Video Edit(本 Skill)T2VI2VR2V
模型happyhorse-1.0-video-edithappyhorse-1.0-t2vhappyhorse-1.0-i2vhappyhorse-1.0-r2v
输入视频 + 可选参考图 + 文字纯文字首帧图 + 文字1-6 张参考图 + 文字
视频输入video_url
图片输入images(0-5 张)images(1 张)images(1-6 张)
ratio无(由输入视频决定)
duration无(由输入视频决定)✅ 1-10s✅ 3-15s✅ 3-15s
生成时间2-10 分钟1-3 分钟1-3 分钟1-5 分钟
适合场景视频编辑、风格变换创意视频图片动态化多图融合

Verification Checklist

  • [ ] 请求 URL 为 POST /v1/video/generations(不是 DashScope 原始路径)
  • [ ] 请求头包含 X-DashScope-Async: enable
  • [ ] prompt 在顶层(必填,描述编辑意图)
  • [ ] video_url 在顶层(必填,待编辑视频 URL)
  • [ ] images 在顶层(可选,参考图片 URL 数组,0-5 张)
  • [ ] 视频 URL 可公网访问,格式符合要求(时长 3-60s,≤100MB)
  • [ ] 图片 URL 可公网访问,格式符合要求(≥300px,≤20MB)
  • [ ] 提交成功,返回 task_idstatus: "queued"
  • [ ] 轮询 GET /v1/video/generations/{task_id} 直到 status: "SUCCESS"(间隔建议 10 秒)
  • [ ] 从 result_url 获取视频下载链接
  • [ ] 下载 MP4 文件并可正常播放
  • [ ] 编辑效果符合 prompt 描述

AI API Gateway Documentation