HiAPI
博客

使用指南

FLUX 3 Max 短视频:每个镜头一种模式,通过 API 批量处理

一个由文本生成视频、图片生成视频和关键帧构建的竖屏 9:16 广告活动,作为一次并行批量提交,包含真实输出和已验证的定价。

2026年11月3日
FLUX 3 Max 短视频:每个镜头一种模式,通过 API 批量处理

FLUX 3 Max 在 hiapi 上提供三个视频端点,对于短视频工作,有用的问题不是“哪个最好”,而是“哪个适合这个镜头”。本指南走查一个小型竖屏广告活动(为一家冰抹茶咖啡馆的帖子制作三个 9:16 片段),每个镜头使用不同模式,三个都作为一次并行批量提交,下面展示的每个片段都是真实、未经编辑的输出。

如果你需要完整的参数参考和校验错误说明,请先阅读 FLUX 3 Max API 指南。本文假设你已经能提交任务,重点讲短视频工作流。

按镜头选模式,而不是按项目选

短视频剪辑通常由钩子、产品节拍和收尾组成。这些节拍的输入不同,因此对应不同的 FLUX 3 Max id:

剪辑中的镜头 你手上有什么 使用 关键输入
钩子 / B-roll 只有一个想法 flux-3-max/text-to-video prompt
产品节拍 一张已批准且不能改动的产品照片 flux-3-max/image-to-video image_url(单个字符串),可选 end_image_url
转场 / 收尾 两个你想连接起来的场景 flux-3-max/keyframes-to-video keyframes: [{image_url, frame_index}]

三者共享 duration(5–20 秒)、resolution(720p / 1080p)、aspect_ratio(竖屏设为 9:16)和 generate_audio。因为请求体几乎相同,一个批处理脚本就能发送全部三个。模型页面:文本生成视频、图片生成视频、关键帧生成视频。

镜头 1:钩子,仅用文本

钩子需要第一秒就有运动,且没有特定素材要求,所以文本生成视频是正确选择。

{
  "model": "flux-3-max/text-to-video",
  "input": {
    "prompt": "竖屏手持特写:咖啡师将冷牛奶倒入高透明玻璃杯中的冰抹茶,绿色和白色在慢动作中交织旋转,晨光透过咖啡馆窗户,浅景深,清脆的冰块碰撞声,轻柔的咖啡馆环境音。",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "9:16",
    "generate_audio": true
  }
}

返回结果:倾倒从第一帧开始,到结尾时漩涡充满玻璃杯,这正是钩子需要的。文本生成视频做不到的是匹配你的场景:我要求咖啡馆,模型选择了木质柜台,而我的产品照片(下一个镜头)用的是大理石。对于钩子来说这是可以接受的。对于必须匹配品牌资产的镜头,请使用某个图片模式。

镜头 2:产品节拍,锚定在静帧上

这是已批准的产品照片。它事先生成为 9:16 静帧,并作为第一帧传给模型。

{
  "model": "flux-3-max/image-to-video",
  "input": {
    "prompt": "缓慢推近玻璃杯;牛奶漩涡漂移并沉淀,冰块轻微移动,光线在大理石柜台上轻轻闪烁,薄荷叶保持不动。安静的咖啡馆环境音。",
    "image_url": "https://static.hiapi.ai/blog/flux-3-max-short-form-video/still-a.jpg",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "9:16",
    "generate_audio": true
  }
}

构图保持锁定:同样的杯子、同样的薄荷枝、同样的大理石和窗户光线从开始到结束。不过运动比较克制。我要求的推近在 5 秒内几乎看不出来,大部分运动在液体和光线中。对于产品节拍来说这是好结果,因为你希望产品镜头保持真实。如果你想要更强的运镜,给它更多秒数或在提示词中更强调,并在扩大批量前检查结果。

注意字段名:image-to-video 接受单个 image_url 字符串。传入 image_urls 数组(像其他一些 hiapi 视频模型期望的那样)会在提交时被拒绝。

镜头 3:收尾,用两个关键帧

收尾连接咖啡馆和街道。我有同一杯饮料在户外举起的第二张静帧,并把两者都用作关键帧。

{
  "model": "flux-3-max/keyframes-to-video",
  "input": {
    "prompt": "连续镜头:一只手从咖啡馆柜台拿起冰抹茶并带到外面,最后在阳光明媚的街道上举向明亮的蓝天。平滑手持相机,自然光线从温暖的室内过渡到明亮的日光。",
    "keyframes": [
      {"image_url": "https://static.hiapi.ai/blog/flux-3-max-short-form-video/still-a.jpg", "frame_index": 0},
      {"image_url": "https://static.hiapi.ai/blog/flux-3-max-short-form-video/still-b.jpg", "frame_index": 120}
    ],
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "9:16",
    "generate_audio": true
  }
}

frame_index 以 24 fps 计帧,所以 5 秒片段从 0 到 120。把锚点放在 0 和 120,使片段正好从柜台镜头开始,并正好落在街道镜头上。在两者之间,模型自己发明了一个转场:片段中段,手在门口举着杯子,然后街道出现。这就是关键帧的取舍。你控制锚定的时刻,模型填充其余部分。如果中间必须是特定样子,为它添加第三个关键帧(最多允许 10 个)。

批量处理:一个脚本,三种模式,并行

短视频工作意味着大量变体,所以先提交所有内容,之后再轮询。这是我使用的脚本,已精简:

import json, os, time, requests
from concurrent.futures import ThreadPoolExecutor

API = "https://api.hiapi.ai/v1/tasks"
HEAD = {"Authorization": f"Bearer {os.environ['HIAPI_KEY']}"}
BASE = {"duration": 5, "resolution": "720p", "aspect_ratio": "9:16", "generate_audio": True}

jobs = {
    "hook":    ("flux-3-max/text-to-video",      {"prompt": HOOK_PROMPT}),
    "product": ("flux-3-max/image-to-video",     {"prompt": PRODUCT_PROMPT, "image_url": STILL_A}),
    "payoff":  ("flux-3-max/keyframes-to-video", {"prompt": PAYOFF_PROMPT, "keyframes": [
                    {"image_url": STILL_A, "frame_index": 0},
                    {"image_url": STILL_B, "frame_index": 120}]}),
}

def run(name):
    model, extra = jobs[name]
    r = requests.post(API, headers=HEAD, json={"model": model, "input": {**BASE, **extra}}).json()
    task_id = r["data"]["taskId"]          # save this before polling
    deadline = time.time() + 900
    while time.time() < deadline:
        time.sleep(10)
        d = requests.get(f"{API}/{task_id}", headers=HEAD).json()["data"]
        if d["status"] == "success":
            url = d["output"][0]["url"]
            open(f"{name}.mp4", "wb").write(requests.get(url).content)  # download now
            return name, "success"
        if d["status"] == "fail":
            return name, d.get("error")
    return name, f"timeout {task_id}"

with ThreadPoolExecutor(len(jobs)) as pool:
    for result in pool.map(run, jobs):
        print(result)

2026 年 11 月 3 日,我一次性发送全部三个时看到的情况:

  • 每个 POST /v1/tasks 都在 2 秒内返回 taskId。
  • 轮询显示每个任务都经历相同序列:handling,然后 archiving,然后 success。
  • 任务记录显示三个片段从 created 到 completed 均为 20 秒。并行运行它们并不比运行一个更久。
  • 每个输出都是 5.04 秒的 H.264 文件,704 × 1280,24 fps,带 AAC 音轨。注意宽度:9:16 的 720p 给出 704 px,不是 720。如果你的编辑器模板要求正好 720 × 1280,导入时请缩放或填充。
  • 输出 URL 位于临时域名上,expireAt 为完成后 7 天。请立即下载并自行存储文件。

对于更大的批量(几十个钩子变体),使用任务 API 的 callback 配合 when: "final",这样无需轮询,并记录每个 taskId,以免崩溃丢失已付费的工作。

批量成本

FLUX 3 Max 按输出秒数、按分辨率计费,三种模式费率相同。截至 2026 年 11 月,定价页面列出 720p 为 $0.0608/秒,1080p 为 $0.1036/秒。模型页面说明音频和关键帧数量不影响价格。

方案 每个片段 三片段批量
5 秒,720p(我运行的) $0.304 $0.912
5 秒,1080p $0.518 $1.554
15 秒,1080p $1.554 $4.662

实用循环:在 5 秒和 720p 下测试提示词,保留胜出者,仅将它们以 1080p 或更长渲染。关于费率详情,请参阅 FLUX 3 Max API 定价。

短视频检查清单

  1. 先把剪辑写成镜头,然后用上表为每个镜头分配模式。
  2. 静帧也做成 9:16。图片模式会动画化你给它的帧,所以横向静帧从一开始就是构图问题。
  3. 在每个请求中显式设置 aspect_ratio: "9:16",而不是依赖 auto。
  4. 保持关键帧图像视觉一致(相同产品、相同光照家族),并在提交前验证 frame_index ≤ duration × 24。错误的时间线会在提交时被接受,片刻后失败。
  5. 并行提交,轮询或使用回调,并立即下载。
  6. 草稿阶段保持音频开启。它不额外收费,你可以在剪辑中静音。

关于本次广告活动之外的提示词想法,请参阅 FLUX 3 Max 视频提示词指南。要在另一个模型上使用相同工作流,请比较 Kling 3.0 图片生成视频短视频工作流。

常见问题

FLUX 3 Max 能制作竖屏 9:16 视频吗? 能。三个端点都接受 aspect_ratio: "9:16"。在 720p 下,我得到的输出是 704 × 1280。

产品视频应该使用哪个 FLUX 3 Max 模式? 当产品照片必须完全保持批准时的样子,使用图片生成视频。在我的测试中,杯子、装饰和背景在整个片段中保持不变。当产品需要在两个场景之间移动时,使用关键帧。

生成一个 FLUX 3 Max 片段需要多长时间? 在我的运行中,三个 5 秒 720p 片段一起提交,每个从 created 到 completed 用时 20 秒。更长或 1080p 片段可能需要更久;我没有计时那些。

能在同一个批量中混合文本生成视频、图片生成视频和关键帧吗? 能。它们是同一 /v1/tasks 端点上的独立模型 id,共享相同字段,所以一个脚本可以并排提交它们。

FLUX 3 Max 短视频片段能有多长? 5 到 20 秒之间,以整秒为单位。成本随长度线性增长。

开始构建

选择你最需要的镜头,打开对应的模型页面(文本生成视频、图片生成视频或关键帧生成视频),在批量处理其余剪辑之前先运行一个 5 秒 720p 测试。

立即开始构建持久 AI 产物

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

阅读 API 文档