GPT-6 Sol、Claude Opus 5.5 已上线GPT-6 Sol 价格仅为 5.6 Sol 的一半

Kling 3.0 API:文生视频的请求代码和实测片段

一次 POST、模型填 kling-3.0,就是一条文生视频任务。下面是请求代码、请求体里的字段,以及我们 2026 年 10 月 29 日实跑并测量过的两条 5 秒片段。

Kiki, OmniaKey COO7 分钟阅读
本页内容

Kling 3.0 的文生视频任务只有一个 POST。接口地址是 https://api.omniakey.com/v1/media/tasks,模型填 kling-3.0,操作填 text_to_video。请求体里有两个必填参数:duration(5、10 或 15 秒)和 mode(std 或 pro)。返回里有一个任务 id,轮询到成功后再下载 MP4。我们 2026 年 10 月 29 日用 5 秒、std 模式跑了两条 1280×720 的片子,文件和画面都量过。

Kling 3.0 的请求体里有什么

请求体一共七个字段,其中 duration 和 mode 是 Kling 必填的两个,决定片长和画质档位。字段名照抄,值按表里的写法填,两个必填项不要漏。

字段填什么
modelkling-3.0
typevideo
operationtext_to_video
input.prompt一句话写清场景、动作和镜头
parameters.duration5、10 或 15,整秒
parameters.modestd 或 pro
parameters.aspect_ratio16:9、9:16 或 1:1

模型页自己的示例发的是 duration 6,还带一个 resolution 字段。这两个值在这里都不对。页面只收 5、10、15 秒,并写明没有单独的 resolution 字段(模型页,2026 年 10 月 29 日核对)。页面的常见问题里,std 对应 720P,pro 对应 1080P。

音频默认就有,页面没有列出开关(2026 年 10 月 29 日核对)。aspect_ratio 只用于文生视频;图生视频由首帧决定画幅,显式传比例会被拒绝。我们这两条都是 5 秒、std、16:9。pro 模式、10 秒和 15 秒、9:16 和 1:1、图生视频和尾帧,都不在这两次里。

结果最受提示词影响。Kling 3.0 提示词指南 讲了提示词的几个部分和镜头写法。

请求代码

一个 Python 文件就能完成提交、轮询和下载。它从环境变量 OMNIAKEY_API_KEY 读 key,创建任务时带上随机的 Idempotency-Key。每次轮询间隔 5 秒,最多 180 次。请求体和下面两条片子一致:模型 kling-3.0,type 填 video,operation 填 text_to_video。duration 5,mode 填 std,画幅 16:9。代码只用 Python 标准库,设好环境变量就能发请求,不需要另装 SDK 或别的依赖。

python
import json
import os
import time
import urllib.error
import urllib.request
import uuid

API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]

def request(method, url, body=None, extra_headers=None):
    headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
    data = None
    if body is not None:
        headers["Content-Type"] = "application/json"
        data = json.dumps(body).encode()
    headers.update(extra_headers or {})
    req = urllib.request.Request(url, data=data, headers=headers, method=method)
    with urllib.request.urlopen(req, timeout=120) as resp:
        return json.load(resp)

def poll(url, attempts=5):
    for attempt in range(attempts):
        try:
            return request("GET", url)
        except urllib.error.HTTPError as err:
            if err.code < 500 or attempt == attempts - 1:
                raise
        except urllib.error.URLError:
            if attempt == attempts - 1:
                raise
        time.sleep(5 * (attempt + 1))

def text_to_video(prompt, out_path, duration=5, mode="std", aspect_ratio="16:9"):
    body = {
        "model": "kling-3.0",
        "type": "video",
        "operation": "text_to_video",
        "input": {"prompt": prompt},
        "parameters": {"duration": duration, "mode": mode, "aspect_ratio": aspect_ratio},
    }
    task = request("POST", API, body, {"Idempotency-Key": str(uuid.uuid4())})["id"]
    print("task", task, flush=True)
    for _ in range(180):
        time.sleep(5)
        state = poll(f"{API}/{task}")
        if state["status"] not in ("queued", "processing"):
            break
    if state["status"] != "succeeded":
        raise RuntimeError(state.get("error") or state["status"])
    asset_url = state["assets"][0]["url"]  # signed link: short-lived, so download now
    req = urllib.request.Request(asset_url, headers={"User-Agent": "omniakey-example/1"})
    with urllib.request.urlopen(req, timeout=300) as resp, open(out_path, "wb") as f:
        f.write(resp.read())
    return task

if __name__ == "__main__":
    task = text_to_video(
        "A paper boat drifts slowly down a rain-soaked street at dusk. Warm streetlights reflect on "
        "the wet cobblestones. The camera follows the boat at a steady pace. No people, no text.",
        "paper-boat.mp4",
    )
    print("done", task)

每次轮询都是对任务地址发 GET。循环看 status,不看 progress.percent,后者在出片过程中可能一直是 0。状态离开 queued 和 processing 就停下。succeeded 时从 assets[0].url 下载,其它状态抛出任务自己的错误信息。下载要马上做,因为这条资源链接会过期;过期就再查一次任务,换一条新链接。轮询间隔和次数上限都写在代码里,觉得太慢或太久,直接改这两个数就行。轮询遇到连接断开或服务器 5xx 错误时,最多重试五次,每次多等一会儿。

2026 年 10 月 29 日我们又用同样的设置跑了一次这个文件。第一次轮询时连接断开了,所以现在的轮询会重试。第二次返回的任务 id 是 task_PNB1kPopriUyfcHsXhVWY2hBOEoSUIqM,MP4 量出来 5.04 秒,1280×720,双声道 AAC 音轨。从创建到下载用了 807 秒,前面两条分别是 82.2 秒和 110.7 秒,等待时间差很多,要留出余量。

我们跑的两条片子

两次请求都在 2026 年 10 月 29 日发出,请求体就是上面那组值。纸船的任务 id 是 task_cbOtsBxO75cml3nOmVUu9YG3PkYXW2ja。茶壶的任务 id 是 task_M2Ub1EoCaCUa1FjOZDdWDOuEOS9nRjnt。两条提示词都是原样发出的,任务 id 可以留着排查问题。

纸船

prompt
A paper boat drifts slowly down a rain-soaked street at dusk. Warm streetlights reflect on the wet cobblestones. The camera follows the boat at a steady pace. No people, no text.
纸船片段截帧:黄昏湿石板路上的一只折纸船,路灯的暖光倒映在水面上。
纸船片段按时间顺序排列的截帧。Kling 3.0,文生视频,5 秒,标准模式,16:9,2026 年 10 月 29 日生成。

茶壶

prompt
A ceramic teapot sits on a wooden table by a window. Steam rises in slow curls. Soft morning light moves across the table. The camera pushes in slowly. No people, no text.
茶壶片段截帧:窗边木桌上一只青釉茶壶,冒着热气。
茶壶片段按时间顺序排列的截帧。Kling 3.0,文生视频,5 秒,标准模式,16:9,2026 年 10 月 29 日生成。

文件量出来是什么样

剪辑工具在 2026 年 10 月 29 日测量了两个下载文件的尺寸、帧率、时长和音频,都逐项列在下面的列表里,方便对照。

  • 纸船 — 尺寸: 1280×720; 帧率: 24.0 fps; 时长: 5.04 秒; 音频: AAC,双声道,44.1 kHz; 平均电平: −50.9 dB; 最大电平: −34.0 dB; 剪接点: 无
  • 茶壶 — 尺寸: 1280×720; 帧率: 24.0 fps; 时长: 5.04 秒; 音频: AAC,双声道,44.1 kHz; 平均电平: −54.3 dB; 最大电平: −35.9 dB; 剪接点: 无
  • 代码跑出的片段 — 尺寸: 1280×720; 帧率: 24.0 fps; 时长: 5.04 秒; 音频: AAC,双声道,44.1 kHz; 平均电平: −48.4 dB; 最大电平: −20.0 dB; 剪接点: 无

前两条片子的声音很轻:平均电平是 −50.9 dB 和 −54.3 dB,峰值 −34.0 dB 和 −35.9 dB。代码跑出的那条更响,平均电平 −48.4 dB,峰值 −20.0 dB。我们只量了电平,音轨里是什么内容没有测。切镜检测在三条里都没有找到明显或轻微的剪接点,每条都是一镜到底。三条的尺寸、帧率和时长完全一致,对比时不用换算。

画面里发生了什么

两条都照提示词走了,茶壶那条自己多了一点横移。

纸船这条里,船在 5.04 秒里一直待在画面中间,湿漉漉的街道从后面滑过去,看起来就是镜头在跟着船走。暖色路灯的反光一直留在石板上,到最后一帧还在(2026 年 10 月 29 日看帧)。中间没有剪接。

茶壶这条里,蒸汽慢慢卷起来又散掉,早晨的光在木桌面上移动。最后一帧的茶壶比第一帧更大,位置也更靠右下,所以看起来是推近,同时带一点横移。提示词要的是缓慢推近,横移是提示词没有要求的(2026 年 10 月 29 日看帧)。

茶壶片段的首帧和尾帧并排。尾帧里茶壶更大,位置更靠右。
左:茶壶片段的首帧。右:尾帧。茶壶在画面里变大,正是提示词要的推近,同时带一点横移。

报错和限制

duration 超出 5、10、15 会返回 HTTP 400 model_price_error。这时不会创建任务(视频 API 文档,2026 年 10 月 29 日核对)。只发这三个整秒值。

创建请求少了 Idempotency-Key 会返回 400 missing_idempotency_key。key 最长 255 个字符。同一个 key 和同一份请求体会返回原任务,HTTP 200,不会重复扣费。同一个 key 换了请求体会返回 409 idempotency_key_reused(媒体 API 总览,2026 年 10 月 29 日核对)。

2026 年 10 月 29 日,用 Python urllib 默认的 User-Agent 发 POST,返回 HTTP 403。正文是 error code: 1010,来自 Cloudflare。换成我们自己的 User-Agent 就通了。创建请求和下载请求都要设 User-Agent。

输出链接是短期的。不要存 assets[].url,过期后重新查任务换一条新的(视频 API 文档,2026 年 10 月 29 日核对)。任务记录在创建后保留 24 小时(媒体 API 总览,2026 年 10 月 29 日核对)。两个 400 都在创建任务时返回,改好请求体再发一次就行。

Kling 3.0 按次计费,不按秒计(视频 API 文档,2026 年 10 月 29 日核对)。当前价格看 OmniaKey 价格页。

常见问题

kling-3.0 支持哪些时长?

5、10、15 秒。其它值返回 HTTP 400 model_price_error,不会创建任务(视频 API 文档,2026 年 10 月 29 日核对)。

std 和 pro 差在哪?

模型页把它们叫作 Standard 和 Pro,std 对应 720P,pro 对应 1080P(2026 年 10 月 29 日核对)。我们只跑了 std,所以我们没有测过两者的差别。

片段有声音吗?

每条都带 AAC 音轨,双声道、44.1 kHz。前两条很轻,平均电平 −50.9 dB 和 −54.3 dB;代码跑出的那条更响,平均电平 −48.4 dB,峰值 −20.0 dB。我们只量了电平,没有判断音轨里是什么。

能不能用一张图开头?

模型页列了图生视频,可以给首帧,也可以再给尾帧(2026 年 10 月 29 日核对)。图生视频由首帧决定画幅,显式传比例会被拒绝。

一条片段要生成多久?

我们 2026 年 10 月 29 日的两次里,纸船用了 110.7 秒,茶壶用了 82.2 秒。两条都是 5 秒、std、16:9。

从 Kling 3.0 模型页 开始,换上你自己的提示词,发同一份请求体就行。

文中提到的模型

Kling 3.0AI videovideo APItext-to-videoAPI

相关文章

最新文章