视频
图片生成视频
在保留主体、构图和风格的前提下让参考图动起来。
阅读约 1 分钟2 个章节
起始图片决定主体和构图。提示词应写清运动、节奏以及必须保持不变的内容;短动画更容易控制。
实操要点
按优先目标选择模型——速度、还原度、分辨率或控制能力——并保存每次结果的参数和版本。 wan2.7-video, kling-3.0-*, veo3.1-* and sora2 — Image to video.
每次尝试只改一件事。好的输出应保留为参考图,它是下一轮迭代最可靠的起点。
将 finished 和 failed 视为终态。使用 polling 或 webhook,在服务器保存原始错误,并向用户展示安全的信息。
提示词与 API 示例
text
A matte-black espresso machine on a concrete counter with steam and morning light
text
Steam rises and drifts left, the light slowly warms, camera pushes in veryslightly. Everything else stays still.
text
A hyperrealistic macro photo of tiny, miniature surfers riding ocean wavesinside a rustic stone bathroom sink. A vintage brass faucet is running,creating the perpetual surf. Surreal, whimsical, bright natural lighting.

Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.
text
A surreal, cinematic macro video. Tiny surfers ride perpetual, rolling wavesinside a stone bathroom sink. A running vintage brass faucet generates theendless surf. The camera slowly pans across the whimsical, sunlit scene as theminiature figures expertly carve the turquoise water.
Source: Google AI for Developers, used under CC BY 4.0; format and dimensions adapted.
text
Smooth continuous transition between the two framings, no cuts, naturallighting change
text
The character turns from the window toward the camera and smiles. Room toneand distant traffic. No cuts.
text
The character performs the motion from the reference video, keeping their ownclothing and appearance
About these samples. Ready-made examples are copied to our own storage only when their source permits reuse. The exact prompt appears above each result, and the original source and license are linked below the media.
json
{"model": "doubao-seedance-2.0","input": {"prompt": "The camera drifts left as the sun clears the ridge","imageWithRoles": [{ "url": "https://example.com/dawn.jpg", "role": "first_frame" },{ "url": "https://example.com/noon.jpg", "role": "last_frame" }],"resolution": "1080p","duration": 8,"generateAudio": false}}
json
{"model": "pixverse-v6","input": {"prompt": "Slow dissolve between the two framings","firstFrameImage": "https://example.com/dawn.jpg","lastFrameImage": "https://example.com/noon.jpg","duration": 5,"resolution": "720p"}}
json
{"model": "wan2.7-video","input": {"imageUrls": ["https://example.com/dawn.jpg","https://example.com/noon.jpg"],"resolution": "1080p","duration": 5}}
json
{"model": "kling-3.0-motion-control","input": {"prompt": "Studio backdrop, soft key light","imageUrls": ["https://example.com/character.png"],"videoUrls": ["https://example.com/dance-reference.mp4"],"characterOrientation": "image","resolution": "1080p"}}
json
{"model": "midjourney-video","input": {"prompt": "Gentle parallax drift toward the archway","imageUrls": ["https://example.com/still.png"],"videoType": "vid_1.1_i2v_720","motion": "high","batchSize": 1}}
json
{"model": "midjourney-video","input": {"parentTaskId": "019ca881-9503-7270-a560-f00fc2b15785","index": 0,"animateMode": "auto","videoType": "vid_1.1_i2v_480"}}
sh
curl -X POST https://api.api-stock.com/api/v1/generation/create \-H "Authorization: Bearer sk-your-key" \-H "Content-Type: application/json" \-d '{"model": "sora2","input": {"prompt": "The gulls lift off and the boat rocks in the swell","urls": ["https://example.com/harbour.jpg"],"aspectRatio": "16:9","duration": 10}}'
json
{"code": 200,"data": {"taskId": "019ca8a1-1c40-73f2-9b6d-4a01d8e2f7c3","status": "not_started","createdAt": "2026-02-28T12:04:11.000Z"}}
ts
const BASE = "https://api.api-stock.com/api/v1";const KEY = process.env.API_STOCK_KEY!;async function animate(imageUrl: string, prompt: string) {const create = await fetch(`${BASE}/generation/create`, {method: "POST",headers: {Authorization: `Bearer ${KEY}`,"Content-Type": "application/json",},body: JSON.stringify({model: "sora2",input: { prompt, urls: [imageUrl], aspectRatio: "16:9", duration: 10 },}),});const created = await create.json();if (!create.ok) {throw new Error(`${created.error.code}: ${created.error.message}`);}const taskId: string = created.data.taskId;for (;;) {await new Promise((r) => setTimeout(r, 10_000));const res = await fetch(`${BASE}/task/status/${taskId}`, {headers: { Authorization: `Bearer ${KEY}` },});const body = await res.json().catch(() => null);if (!res.ok) {const message = body?.error?.message ?? `${res.status} ${res.statusText}`;throw new Error(message);}const { data } = body;if (data.status === "finished") return data.files[0].fileUrl;if (data.status === "failed" || data.status === "expired") {throw new Error(data.errorMessage);}}}const url = await animate("https://example.com/harbour.jpg","The gulls lift off and the boat rocks in the swell",);console.log(url); // → https://storage.api-stock.com/generated/video-...mp4
json
{"code": 200,"data": {"taskId": "019ca8a1-1c40-73f2-9b6d-4a01d8e2f7c3","status": "finished","files": [{"fileUrl": "https://storage.api-stock.com/generated/video-9f31c2.mp4","fileType": "video"}],"createdTime": "2026-02-28T12:04:11.000Z"}}
用你自己的密钥跑一遍
本指南中的所有模型都已上架 API Stock 目录——一个 API 密钥、一个预付余额,无需在各家供应商分别注册。