使用指南
使用 Seedance-2.0-Fast 通过 hiapi API 制作短视频
TL;DR
- 这是什么:一套完整的流程,教你通过 hiapi API 用 seedance-2.0-fast 制作用于 TikTok/Reels 风格的竖版短片——从你第一次调用异步任务,到用一个批处理脚本渲染出整整一周的帖子。下方嵌入的短片就是用本指南中展示的完全相同的请求生成的。
- 为什么短视频选这个模型:原生
9:16输出,时长 4–15 秒,720p 渲染价格为 每秒 $0.1772——一段 5 秒的竖版短片大约花费 $0.89(实时定价)。480p 草稿档位为 每秒 $0.0843,让你在确定最终渲染之前可以低成本地反复打磨开头钩子。 - 已验证的 API 事实:
prompt、resolution(480p|720p)和duration(整数,4–15)为必填。aspect_ratio接受1:1、4:3、3:4、16:9、9:16、21:9、adaptive。图生视频通过image_urls传入一张静态图。一切都走统一的异步/v1/tasks端点——没有单独的、视频专用的 API 需要学习。 - 工作流:先用 480p 出草稿锁定概念,再用 720p 重渲染最终保留的版本,并且由于任务提交不会阻塞,可以并行分发多个提示词。
为什么 seedance-2.0-fast 适合短视频循环
短视频内容是一场规模游戏——你很少只发布一条短片,而是发布一整个队列,并留下那些效果好的。这就改变了你对视频模型的真正需求:快速、便宜、原生的竖版输出,比原始画质更重要。seedance-2.0-fast 正是围绕这种取舍构建的:
- 按秒计价让迭代成本可控。在 480p 下,一段 4 秒的草稿大约花费 $0.34;像下面这样的 5 秒短片在 480p 下花费 $0.42,在 720p 下花费 $0.89。因为计费完全按照
duration × rate,duration是你唯一的成本杠杆——没有单独的“画质”附加费需要你在预算中考虑(已对照实时定价页面验证)。 - 原生
9:16。你通过aspect_ratio直接渲染竖版,而不是裁剪一段 16:9 的短片,从而丢失提示词所描述的构图。 - 参考视频模式更便宜,而不是更贵。传入一段
reference_video_urls短片用于风格/运动指导,可将费率降至 720p 下每秒 $0.1072、480p 下每秒 $0.0486——当你找到一种想要在整批中重复的风格时,这很有用。
如果你发布的是重点作品而不是日常批量内容,下面的工作流仍然适用——关于更广泛的模型介绍,请参阅我们的配套文章 seedance-2.0-fast 用于 API 集成。
准备工作
你需要一个 hiapi API 密钥——无需 SDK:
export HIAPI_API_KEY="sk-..."
hiapi 上的每个视频模型都走同一个异步任务端点:POST https://api.hiapi.ai/v1/tasks 会立即返回一个 taskId,然后你轮询 GET /v1/tasks/{taskId} 直到它完成。完整参考见文档。
你的第一条竖版短片
最小有效请求需要 prompt、resolution 和 duration。加上 aspect_ratio: "9:16" 以获得短视频画幅:
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-fast",
"input": {
"prompt": "特写竖版镜头:双手将一张金黄色的煎饼叠在一摞高高的煎饼顶部,煎饼放在阳光明媚的乡村风格厨房里一张质朴木桌上的玻璃盘中,热气升腾。温暖的晨光从左侧照射进来。随后一股蜂蜜缓慢地浇在最上面的煎饼上,在光线下闪闪发亮,热气持续升腾。温馨、自然、手持感镜头,浅景深,暖色调。无文字叠加。",
"resolution": "720p",
"aspect_ratio": "9:16",
"duration": 5
}
}'
响应会立即返回一个任务 ID:
{"code": 200, "data": {"taskId": "tk-hiapi-..."}, "message": "success"}
轮询直到 status 为 success,然后立即下载 output[0].url——该 URL 有时效限制。下面是该请求实际生成的短片:
该渲染结果为 720×1280(干净的 9:16),时长刚过 5 秒,计费 $0.886——正好是 5 × $0.1772,从实践中确认了按秒计费,而不仅仅是定价页面上的说法。
对照实时 API 验证的输入模式
seedance-2.0-fast 的模式很严格——发送不支持的字段会得到 400,而不是被静默忽略的参数:
| 字段 | 类型 | 必填 | 取值 |
|---|---|---|---|
prompt |
string | ✅ | 你的镜头描述 |
resolution |
string | ✅ | 480p、720p |
duration |
integer | ✅ | 4–15(秒) |
aspect_ratio |
string | 可选 | 1:1、4:3、3:4、16:9、9:16、21:9、adaptive |
image_urls |
array | 可选 | 用于图生视频的源静态图 |
省略必填字段,任务会在创建任何东西之前被拒绝——格式错误的请求不收费。请严格匹配此表中的字段名;针对其他视频模型编写的短视频脚本(带有 motion_strength、seed、first_frame_url)在这里会得到 400,而不是被忽略。
可复用的 Python 函数
提交、轮询、下载——大约 30 行代码就涵盖了一个生产循环:
import os, time, requests
API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}
def submit(prompt: str, duration: int = 5, resolution: str = "720p",
aspect_ratio: str = "9:16", **extra) -> str:
r = requests.post(API, headers=HEADERS, json={
"model": "seedance-2.0-fast",
"input": {"prompt": prompt, "duration": duration,
"resolution": resolution, "aspect_ratio": aspect_ratio, **extra},
}, timeout=60)
data = r.json()
task_id = (data.get("data") or {}).get("taskId")
if not task_id:
raise RuntimeError(f"submit failed: {data}")
return task_id
def wait(task_id: str, timeout_s: int = 900) -> dict:
deadline = time.time() + timeout_s
while time.time() < deadline:
task = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
if task["status"] == "success":
return task
if task["status"] == "fail":
raise RuntimeError(f"task failed: {task.get('error')}")
time.sleep(8)
raise TimeoutError(task_id)
def make_clip(prompt: str, out_path: str, **kw):
task = wait(submit(prompt, **kw))
url = task["output"][0]["url"] # 有时效限制——立即下载
with open(out_path, "wb") as f:
f.write(requests.get(url, timeout=120).content)
一段 5 秒 720p 渲染通常在一到两分钟内完成;在高峰负载下,请预留最多约 10 分钟再将其视为超时。
图生视频:从固定画面开始
对于产品或品牌主导的短片,提示词漂移才是真正的风险——你希望画面里是你的产品或盘子,而不是模型对它的解读。image_urls 解决了这个问题:生成或拍摄一张静态图,然后让它动起来。
task_id = submit(
"煎饼堆轻轻落定,热气继续向上缭绕,随后蜂蜜开始从画面外浇入,最初的几滴落在最上面的煎饼上。缓慢、稳定的手持感运动,温暖的晨光。",
duration=5, resolution="720p", aspect_ratio="9:16",
image_urls=["https://your-cdn.example/pancake-still.jpg"],
)
构图、光照和主体位置会锁定在你的参考静态图上——提示词只需描述接下来发生的运动。对于任何开头画面比模型自身直觉更重要的短片(一盘菜、一张产品图、一个品牌布景),这都是理想之选。
批量生成一天的短片
因为 /v1/tasks 是异步的,批量生产就是:全部提交,然后收集。
briefs = [
("hook-pancakes", "特写竖版镜头:双手将一张金黄色的煎饼叠起来……"),
("hook-latte", "竖版镜头:倒入牛奶时,一杯新鲜拿铁上热气升腾……"),
("hook-citrus", "竖版微距镜头:一把刀切开一个柑橘类水果……"),
]
tasks = {name: submit(p, duration=5) for name, p in briefs} # 并行分发
for name, tid in tasks.items(): # 收集结果
result = wait(tid)
url = result["output"][0]["url"]
open(f"{name}.mp4", "wb").write(requests.get(url, timeout=120).content)
成本保持可预测,因为计费严格按 duration × rate:
| 方案 | 规格 | 成本 |
|---|---|---|
| 1 次草稿迭代 | 4 秒 · 480p | 约 $0.34 |
| 1 条可发布短片 | 5 秒 · 720p | 约 $0.89 |
| 5 条短片(每日一批) | 5 × 5 秒 · 720p | 约 $4.43 |
| 风格匹配批次 | 5 秒 · 720p 使用 reference_video_urls |
每条约 $0.54 |
一个在实践中站得住脚的工作流:用 480p 为每个想法出草稿,保留值得发布的那些,只对它们重新以 720p 渲染。一旦你找到值得重复的风格,reference_video_urls 能以低于全新 720p 渲染的每秒费率锁定风格。
面向信息流的提示词技巧
在测试渲染中真正塑造输出的因素,特别是针对短视频:
- 将画面描述为竖版,并设置
aspect_ratio: "9:16"以匹配。为 16:9 场景编写的提示词在被强制转换为 9:16 时会被居中裁剪;提前描述一个近距离的竖版构图(如上面的煎饼短片)能让主体填满画面。 - 以运动开头,而不是布景。信息流短片的开场瞬间需要已经在做某件事——一只手已经在叠、蜂蜜已经开始浇——而不是在回报之前先来个缓慢的定场镜头。
- 每条短片保持一个清晰的动作。上面的 5 秒渲染按顺序正好做了两件事(叠放,然后浇淋),读起来很清晰;把三个不相关的动作塞进一条短片里,往往会让它们全都变得模糊。
- 明确说明光照和材质。“温暖的晨光”、“热气升腾”、“闪闪发亮”——具体的感官细节正是让一条具体、诱人的渲染区别于泛泛之作的关键。
常见问题
seedance-2.0-fast 特别适合 TikTok 和 Reels 吗?
是的——原生 9:16 支持和按秒计价(而非每条固定费用)使其非常适合发布节奏,因为你要渲染多个短选项并保留最强的那个。
单条短视频要花多少钱?
在 720p 下,成本为 时长(秒)× $0.1772。一条 5 秒短片是 $0.886;一条 10 秒短片是 $1.772。在 480p 下费率降至每秒 $0.0843。在为一整批做预算之前,请务必在定价页面确认当前费率。
我可以让一张静态图片动起来,而不是仅从文本生成吗?
可以,通过请求中的 image_urls——参见上面的图生视频部分。当特定产品、盘子或布景需要与拍摄时完全一致地出现时,这是更可靠的路径。
我能生成的最短和最长的短片是多久?
duration 接受 4 到 15 秒的整数。不支持秒的小数部分。
分辨率除了像素尺寸和价格之外还会影响其他东西吗?
在模式本身中不会——resolution 只控制输出尺寸和每秒费率。构图和运动完全由提示词和 aspect_ratio 驱动。
总结
用 seedance-2.0-fast 做短视频归结为一个异步端点、三个必填字段,以及鼓励你先迭代再确定的按秒计价:用 480p 为竖版概念出草稿,如果特定产品或主体需要完全准确地出现,就用 image_urls 锁定胜出方案的开头画面,然后将最终保留的版本重新以 720p 渲染。获取一个 API 密钥,从本指南顶部的请求开始——seedance-2.0-fast 模型页面有完整的参数参考和当前定价,可助你继续深入。