视频生成工作流
先用图像模型定死首帧,再让视频模型只管运动;同一张图作首尾帧加交叉淡化做无缝循环。附全部实测样片
讲怎么把视频调得好看。接口本身怎么调见视频生成。文内样片均为真实调用产出,最后验证:2026-09-05。
为什么不该一句话直接出视频
不要指望一句提示词直接出好视频。 视频模型要同时处理构图、光线、材质和运动, 注意力被摊薄,画面细节往往不如同价位的图像模型。更稳的做法是拆成两步: 先用图像模型把「第一帧长什么样」定死,再让视频模型只负责让它动起来。
- 用
gpt-image-2或gemini-3-pro-image生成 4K 参考图。 把画面描述、风格、色调、光线全写进图像提示词,反复生成到满意为止。 图像调用比视频便宜得多,试错成本低,而且立刻能看到结果。 - 把图放到公网可直接下载的地址。 视频模型要自己去下载, 不能要登录、不能是网盘分享页。
- 用它当首帧,提示词只写「怎么动」。 画面内容已由参考图定死, 视频提示词别再重复描述场景,只写运动。
第一步:生成 4K 参考图
gpt-image-2 最大边 3840px;gemini-3-pro-image(Nano Banana Pro)4K 档实际输出 5504×3072。
curl https://www.vibeapi.cn/v1/images/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"quality": "high",
"size": "3840x2160",
"prompt": "Nuwa mending the broken sky. A celestial goddess in flowing crimson and gold robes suspended among shattered heavens... traditional Chinese gongbi heavy-color painting, mineral pigments, cinnabar red, malachite green and gold leaf; no text, no watermark"
}'
要真正的高清档,quality: "high" 必须显式传。 不传或传 auto 会落到中间档,
而分辨率、文件大小都看不出差别——唯一能分辨的是响应里的 usage.output_tokens:
4K 高清档约 13000,中间档只有约 3300,差约 4 倍算力。
发一批图时建议逐张核对这个数,不对就重发,命中率通常一两次就够。
第二步:喂给视频模型
curl https://www.vibeapi.cn/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-1080p",
"prompt": "五色石的白热光芒缓缓明灭,天穹裂隙中的金液缓缓流淌弥合,祥云与凤羽绕身缓慢盘旋,衣袂飘动,镜头极缓慢推进",
"seconds": "15",
"aspect_ratio": "16:9",
"reference_images": [
{ "url": "https://your-cdn.example.com/nuwa-4k.png", "role": "first_frame" }
]
}'注意提示词里一句场景描述都没有——人物、服饰、色调全由参考图决定,提示词只管运动。 这是这套工作流最关键的一点。
做接缝看不出来的循环背景
做网站动态背景时,片子每循环一轮都会在接缝处跳一下。
用万相的首尾帧能基本消掉:把同一张图同时传给 first_frame 和 last_frame。
curl https://www.vibeapi.cn/v1/videos \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-1080p",
"prompt": "从首帧自然演化后回到尾帧,形成完整闭环。云层缓慢翻涌一周后回到起始形态,光线强度轻微起伏后复原,镜头极缓慢推进再退回原位。全程无剪切、无淡入淡出",
"seconds": "15",
"aspect_ratio": "16:9",
"reference_images": [
{ "url": "https://your-cdn.example.com/frame.png", "role": "first_frame" },
{ "url": "https://your-cdn.example.com/frame.png", "role": "last_frame" }
]
}'提示词里明写「回到起始形态」「全程无剪切」很关键,不写模型容易在结尾自由发挥。
交叉淡化补掉残差
首尾已经很接近,但不到像素级重合。首帧与末帧缩到 320×180 后逐像素求平均差为 9.66 / 255;作为对照,首帧与中间帧是 26.91 / 255。 差距只有对照组的三分之一,但 3.8% 的残差循环播放时仍看得见。
ffmpeg -i in.mp4 -filter_complex \
"[0:v]split[body][pre];\
[pre]trim=duration=1,format=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS+13.02/TB[jt];\
[body]trim=start=1,setpts=PTS-STARTPTS[main];\
[main][jt]overlay=shortest=0[v]" \
-map "[v]" -c:v libx264 -crf 17 -preset slow -pix_fmt yuv420p -an out.mp4setpts=PTS+13.02/TB 里的 13.02 是「原片时长 − 2」,按你的片子换算。输出比原片短 1 秒。
做完这一步首末帧平均像素差从 9.66 降到 1.65 / 255,循环播放看不出接缝。
四条无缝循环样片见下文「成片展示」。
成片展示
同一套两步法,换四种题材与画风。全部 wan3.0-video-1080p,15 秒,1920×1080,
首尾帧循环 + 交叉淡化:
不走参考图的 Seedance 长片(30 秒 / 1280×720):
作为对照,不带参考图的纯文生(5 秒 / 1920×1080):
工作流要点
- 别一句话直接出视频。 拆成两步:图像模型定画面,视频模型只做运动。
- 参考图提示词把画面吃干榨净——主体、构图、光源、色调、材质、画风;但别写运动。
- 视频提示词一句场景描述都不要写,只写运动。两边抢活画面反而会飘。
gpt-image-2的quality: "high"必须显式传,靠usage.output_tokens核对: 4K 高清约 13000,中间档约 3300。- 参考图必须是公网可直接下载的 HTTPS 直链,贴进无痕窗口能下载才算数。
- 要无缝循环:同一张图同时作首帧与尾帧,提示词明写「回到起始形态、全程无剪切」。
- 循环片再用 ffmpeg 交叉淡化 1 秒,首末帧像素差能从 9.66 降到 1.65 / 255。