HiAPI
博客

使用指南

seedance-2-0 短视频制作指南:hiapi API 实战配方

使用 hiapi 上的 seedance-2-0 任务 API 制作竖屏 TikTok/Reels/Shorts 短片——文本生成视频与图片生成视频、经核实的定价,以及可直接复制粘贴的提交/轮询/下载脚本。

2026年11月3日
seedance-2-0 短视频制作指南:hiapi API 实战配方

快速概览

  • 这是什么:一份可直接运行、可复现的配方,教你用 hiapi 上的 seedance-2.0 制作竖屏短视频(TikTok / Reels / Shorts)。下方嵌入的短片正是用其上方印出的提示词原样生成的——绝非借用他人的演示。
  • 两种模式,一个模型:seedance-2.0 在同一个端点下同时支持文本生成视频和图片生成视频——可以从提示词开始,也可以让已有的静态图动起来。
  • API 事实(已在平台上核实):seedance-2.0 运行在异步任务端点(/v1/tasks)上。input 对象需要 prompt、aspect_ratio(必填——短视频请用 9:16)、resolution(480p / 720p / 1080p)以及以秒为单位的 duration。结果以 MP4 形式返回,位于 output[0].url。
  • 定价(按输出每秒计):480p 为 $0.136/秒,720p 为 $0.293/秒,1080p 为 $0.729/秒。一段 4 秒的 480p 短片成本为 $0.54。实时价格请见定价页。
  • 如何运行:向任务 API 发起 POST,轮询直到状态为 success,然后从 output[0].url 下载 MP4——该 URL 是临时的且会过期,因此请立即保存字节数据。完整的可复制脚本(两种模式 + 批量循环)见文末。

为什么短视频选择 seedance-2.0

短视频平台有一套固定的语法:竖屏 9:16、几秒钟时长、一个清晰的动作节拍。这正是 seedance-2.0 为之前生的形态。它只需一个宽高比标志就能渲染出电影感运动,因此你无需与模型较劲去获得竖屏画幅——只要请求 9:16,它就会按该画幅构图。

另一个原因是工作流:每个短片是单个异步任务。你提交作业、轮询任务 ID,然后取回一个完成的 MP4。没有需要照看的流式套接字,也没有需要躲避的 100 秒超时——与其他所有 hiapi 生成模型使用的任务协议完全相同,所以如果你已经调用过图像模型,这里的控制流程是一样的。

模式 1——文本生成视频

这是获得短片最快的路径:描述镜头、选择画幅和时长、提交。

下面的提示词是我实际运行的那一条。像导演一样写——主体、光照、镜头运动——而不是像关键词列表。

提示词:一位咖啡师在阳光充足的咖啡馆里萃取一份浓缩咖啡,特写咖啡油脂旋入杯中,温暖的晨光,轻柔的蒸汽升起,浅景深,平稳的手持镜头推进。

设置:aspect_ratio: 9:16、resolution: 480p、duration: 4

该短片是原生 9:16 画幅,可直接放入 Reels/Shorts 时间线。渲染大约花了两分钟,按当前 480p 费率估计约 $0.54——足够便宜,可以生成几个变体并保留最好的一个。

请求体很小。人们常漏掉的一个字段是 aspect_ratio:它是必填的,如果漏掉,API 会以 missing required field "aspect_ratio" 拒绝该任务。

import os, json, requests

TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

payload = {
    "model": "seedance-2.0",
    "input": {
        "prompt": (
            "A barista pulls a shot of espresso in a sunlit cafe, close-up on the "
            "crema swirling into the cup, warm morning light, gentle steam rising, "
            "shallow depth of field, smooth handheld camera push-in."
        ),
        "aspect_ratio": "9:16",   # required — 9:16 for short-form
        "resolution": "480p",     # 480p | 720p | 1080p
        "duration": 4,            # seconds
    },
}

r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
task_id = r.json()["data"]["taskId"]
print("submitted:", task_id)

模式 2——图片生成视频

第二种模式是让你提供的静态图动起来,而不是从零创造场景。这正是品牌工作所需的:拍摄(或生成)一张干净的产品静态图,然后让 seedance-2.0 添加动作节拍,这样构图和产品都能保持符合品牌规范。

调用形状与任务调用相同——保留 aspect_ratio、resolution 和 duration,而你的提示词现在描述的是要施加到画面上的运动(“缓慢推进”、“模特转向镜头”、“蒸汽开始升起”),而不是整个场景。将其与来自图像模型的静态图配对,你就拥有了两步流水线:生成主视觉画面,然后让它动起来。

提示:图片生成视频的短片保持简短(4 秒),让运动微妙一些。短视频奖励的是一个干净利落的节拍,而不是繁忙的镜头。

短视频批量的成本计算

由于计费是按输出每秒,你的成本极易预测——选择分辨率,乘以短片时长:

分辨率 价格 / 秒 4 秒短片 8 秒短片
480p $0.136 $0.54 $1.09
720p $0.293 $1.17 $2.34
1080p $0.729 $2.92 $5.83

要在钩子上反复迭代,请以 480p 起草——其价格是 720p 的四分之一,足以判断构图和运动。只将胜出的版本以 720p 或 1080p 重新渲染用于最终发布。当前各模型费率请见定价页。

完整脚本——提交、轮询、下载

这是端到端版本:提交一个文本生成视频作业,轮询任务直到完成,然后保存 MP4。下载步骤很重要——output[0].url 是一个临时链接,会过期,因此一旦任务成功就立即将字节写入磁盘。

import os, json, time, requests

TOKEN = os.environ["HIAPI_TOKEN"]
BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}


def submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4):
    payload = {
        "model": "seedance-2.0",
        "input": {
            "prompt": prompt,
            "aspect_ratio": aspect_ratio,  # required
            "resolution": resolution,      # 480p | 720p | 1080p
            "duration": duration,          # seconds
        },
    }
    r = requests.post(BASE, headers=HEADERS, data=json.dumps(payload), timeout=60)
    r.raise_for_status()
    return r.json()["data"]["taskId"]


def wait(task_id, timeout_s=600, poll=8):
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        r = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30)
        data = r.json().get("data", {})
        status = data.get("status")
        if status == "success":
            return data
        if status == "fail":
            raise RuntimeError(f"task failed: {data.get('error')}")
        time.sleep(poll)
    raise TimeoutError(f"task {task_id} did not finish in {timeout_s}s")


def download(task, path):
    out = task["output"][0]
    assert out["type"] == "video", f"unexpected output type: {out['type']}"
    # output[0].url is temporary (see expireAt) — save immediately.
    resp = requests.get(out["url"], timeout=120)
    resp.raise_for_status()
    with open(path, "wb") as f:
        f.write(resp.content)
    return path


if __name__ == "__main__":
    prompt = (
        "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema "
        "swirling into the cup, warm morning light, gentle steam rising, shallow "
        "depth of field, smooth handheld camera push-in."
    )
    tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
    print("submitted:", tid)
    task = wait(tid)
    print("saved:", download(task, "espresso_9x16.mp4"))

要把一个钩子变成一整批,请将 submit / wait / download 包裹在遍历提示词的循环中:

HOOKS = {
    "espresso":  "A barista pulls a shot of espresso in a sunlit cafe, close-up on the crema, gentle steam, handheld push-in.",
    "matcha":    "A whisk froths bright green matcha in a ceramic bowl, top-down light, slow spiral motion, calm morning mood.",
    "pour-over": "Hot water spirals over fresh coffee grounds in a dripper, close macro, steam rising, warm backlight.",
}

for name, prompt in HOOKS.items():
    tid = submit(prompt, aspect_ratio="9:16", resolution="480p", duration=4)
    task = wait(tid)
    download(task, f"{name}_9x16.mp4")
    print("done:", name)

以 480p 起草这一批,挑选胜出者,将其以 1080p 重新渲染,然后发布。这就是在一个模型和一个端点上的完整短视频循环。

关键要点

  • seedance-2.0 是 /v1/tasks 上的单个异步任务,返回一个 MP4——与 hiapi 图像模型的控制流程相同。
  • aspect_ratio 是必填的;TikTok / Reels / Shorts 请用 9:16。
  • 计费按输出每秒:480p $0.136/秒,720p $0.293/秒,1080p $0.729/秒——所以以 480p 廉价起草,只将胜出者高分辨率完成。
  • 输出 URL 是临时的——一旦任务报告 success,立即下载字节数据。
  • 同一次调用既做文本生成视频,也做图片生成视频;将图片生成视频与生成的静态图配对,可获得符合品牌的产品运动。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档