上个月接了个需求,要做一组产品展示短视频。我打开 API 文档,发现同一个模型下面挂了四五个端点:text-to-video、image-to-video、reference-to-video、first-last-frame-to-video……

我当时选了 text-to-video,写了段描述,跑出来一看——产品长得完全不像我们的产品。

后来才搞明白,我应该用 image-to-video,把产品图传进去让它动起来。白白浪费了半小时和几块钱 API 费。

这几种模式的区别其实不复杂,但文档里很少有人讲清楚。我把它们理顺了,配上代码,希望能帮你少踩一个坑。

T2V:纯文字生成视频

最直觉的方式。写一段话,模型凭空造一段视频出来。

用 Wan 2.7 跑一个:

import wavespeed

output = wavespeed.run(
    "alibaba/wan-2.7/text-to-video",
    {
        "prompt": "清晨的京都,石板路两旁是木屋,远处寺庙屋檐在晨雾里若隐若现,一只橘猫从巷子里慢慢走出来,镜头跟着它",
        "resolution": "720P",
        "duration": 5,
        "seed": 42
    }
)
print(output["outputs"][0])

T2V 的好处是自由度最高,你不需要任何素材。但你对画面几乎没有控制力。猫长什么样、巷子长什么样、镜头怎么动,全是模型自己决定的。同一个 prompt 跑两次,出来的可能是两条完全不同的巷子、两只完全不同的猫。

没有素材、还在想创意的时候用这个。但如果你对画面有具体要求——比如要展示自家产品——别用 T2V,出来的"产品"跟你的产品八竿子打不着。

在这里插入图片描述

I2V:传一张图,让它动起来

你有一张图——产品照、插画、AI 生成的图都行——想让它变成视频。I2V 就是干这个的。

你的图会变成视频的第一帧,然后模型根据你的文字描述生成后续的运动。

用 Kling O3 Pro 跑:

image_url = wavespeed.upload("./product_photo.jpg")

output = wavespeed.run(
    "kwaivgi/kling-video-o3-pro/image-to-video",
    {
        "image": image_url,
        "prompt": "Camera slowly orbits around the product, soft studio lighting, shallow depth of field, the product rotates gently",
        "duration": "5",
        "aspect_ratio": "16:9"
    }
)
print(output["outputs"][0])

和 T2V 的核心区别:第一帧是你定的。至少视频开头长什么样你说了算。模型只负责"接下来发生什么"。

Kling O3 是快手今年 2 月出的新系列,I2V 是它的强项。Pro 版的运动自然度比 Standard 好不少——人物走路不会飘,物体旋转不会变形。

不过 I2V 有个问题:你只能控制开头,后面的画面模型自由发挥。时间越长,画面越容易"漂"——跟第一帧的差异越来越大。5 秒还好,10 秒以上就明显了。有产品图想做动态展示的时候用这个。

在这里插入图片描述

R2V:传参考图,保持角色一致

这个概念比较新,很多人还没接触过。

R2V 和 I2V 都是"传图生成视频",但用法完全不同:

I2V:你的图是视频的第一帧。模型从这帧开始往后生成。
R2V:你的图是"参考"。模型学习图里的角色特征(脸、衣服、体型),然后生成一段全新场景的视频,但角色长得和你的参考图一样。

举个例子。你有一个虚拟角色的三张照片——正面、侧面、全身。

用 I2V:模型把其中一张图"动起来",角色在原来的背景里做动作。
用 R2V:模型生成一段这个角色走进咖啡馆点咖啡的视频——全新的场景、全新的动作,但角色的脸和衣服跟你的参考图一模一样。

用 Kling O3 Pro 跑:

ref1 = wavespeed.upload("./character_front.jpg")
ref2 = wavespeed.upload("./character_side.jpg")  
ref3 = wavespeed.upload("./character_full.jpg")

output = wavespeed.run(
    "kwaivgi/kling-video-o3-pro/reference-to-video",
    {
        "reference_images": [ref1, ref2, ref3],
        "prompt": "The character walks into a modern coffee shop, orders at the counter, sits down by the window. Medium shot, natural lighting",
        "duration": "10",
        "aspect_ratio": "16:9"
    }
)
print(output["outputs"][0])

R2V 解决的是 AI 视频最头疼的问题——角色一致性。以前用 T2V 做系列视频,同一个角色在不同视频里长得完全不一样。R2V 通过参考图"锁定"角色特征,终于能做连续剧了。

参考图传多张效果更好。只传一张正面照,模型对侧面和背面的理解会很差,转个头脸就变了。传 3-5 张不同角度的,稳定性好很多。做系列内容的时候用这个——AI 短剧、品牌系列广告、IP 形象多场景展示。

在这里插入图片描述
在这里插入图片描述

FLF2V:定义开头和结尾,AI 填中间

这是 Wan 2.7 最大的新功能,我觉得也是最有意思的一个。

普通 I2V 只能控制第一帧。FLF2V 让你同时控制第一帧和最后一帧——你告诉模型"视频从这张图开始,到那张图结束",中间的过渡它自己想办法。

first = wavespeed.upload("./scene_day.jpg")     # 白天的街景
last = wavespeed.upload("./scene_night.jpg")     # 同一条街,夜景

output = wavespeed.run(
    "alibaba/wan-2.7/first-last-frame-to-video",
    {
        "first_frame_url": first,
        "last_frame_url": last,
        "prompt": "Smooth time-lapse, sky gradually darkens, street lights turn on one by one, natural lighting transition",
        "resolution": "720P",
        "seed": 99
    }
)
print(output["outputs"][0])

跑出来的效果挺惊喜的——天色真的是一点点暗下去,路灯一盏一盏亮起来,过渡很自然。

但有个大前提:两张图之间要有明确的逻辑关系。同一个场景的不同状态效果最好(白天→夜晚、空杯→满杯、门关→门开)。如果两张图完全不相关——一张猫一张汽车——模型不知道怎么过渡,出来的东西会很诡异。

我试过用一张人站着的图和一张人坐下的图做 FLF2V,效果不错,动作过渡很流畅。但用一张室内图和一张室外图,中间的过渡就很生硬,像硬切不像过渡。

帧对的质量比 prompt 重要得多。一对好图配一句简单的 prompt,效果远好过一对烂图配一段精心写的 prompt。展示变化过程的时候用这个(日夜交替、季节变化、产品组装),做转场动画也行,做无缝循环视频也行(首尾帧用同一张图就是循环)。

在这里插入图片描述

怎么选

简单说:没素材就用 T2V。有一张图想让它动就用 I2V。想让图里的角色出现在别的场景就用 R2V。有开头和结尾两张图就用 FLF2V。

模型方面,我目前的搭配是:

T2V 和 FLF2V 用 Wan 2.7——阿里最新的,中文 prompt 理解好,FLF2V 是它的独家功能。
I2V 和 R2V 用 Kling O3 Pro——快手最新的,画质和角色一致性目前最好。

都在 WaveSpeedAI 上,同一个 SDK,换模型 ID 就行。

几个坑

I2V 上传的图分辨率别太低。1024px 以下出来的视频会糊。我有一次传了张 512px 的缩略图,出来的视频像打了马赛克。

R2V 参考图要多角度。只传正面照,角色一转头就变脸。至少正面 + 侧面 + 全身三张。

FLF2V 两张图要有逻辑关系。同一场景不同状态 > 相似场景不同角度 > 完全不同的场景。最后一种基本不能用。

T2V 的 prompt 要写得像分镜脚本。别写"一个人在走路",写"中景,穿灰色大衣的年轻女性沿着雨后的街道走来,镜头缓缓后退,浅景深,暖色调"。景别、运动、光线、色调都写上,出来的东西完全不是一个级别。

duration 不是越长越好。5 秒的质量通常比 15 秒好很多。需要长视频就用 Video Extend 分段续写,别一次硬生成 15 秒。


Wan 2.7:https://wavespeed.ai/blog/posts/wan-2-7-api-quickstart-wavespeed/
Kling O3 Pro:https://wavespeed.ai/de/collections/kling-o3
Kling O3 Pro I2V:https://wavespeed.ai/blog/posts/introducing-kwaivgi-kling-video-o3-pro-image-to-video-on-wavespeedai/
Kling O3 Pro R2V:https://wavespeed.ai/blog/posts/introducing-kwaivgi-kling-video-o3-pro-reference-to-video-on-wavespeedai/
SDK:https://github.com/WaveSpeedAI/wavespeed-python

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐