让AI生成摘要
![]()
一个在五秒内蓄力、斩击并燃尽的太阳斩击,过去意味着要在粒子编辑器里耗上一个周末,或者买一套付费特效包。我们只用了一个下午就做出来了:一张静态图、一段 AI 视频、一条 FFmpeg 命令。
这条路线就是 video to sprite sheet。视频模型在黑色背景上绘制运动,FFmpeg 把帧打包成网格,引擎再以翻页动画(flipbook)的方式播放这个网格。我们完整跑了两遍这条链路,一次做斩击命中,一次做循环能量球,最终都在 Godot 里播放成功。我们使用的设置如下。
关键要点
- video to sprite sheet 工作流能把一段简短的 AI 视频变成游戏引擎可逐帧播放的翻页动画。
- Atlas Cloud 视频生成器 中的 Seedance 2.5 接收首帧和末帧,末帧决定特效如何结束。
- 纯黑的末帧让单次特效淡出,而重复使用首帧则让我们得到无缝循环。
- 一条 FFmpeg 命令把每段 5 秒的 MP4 变成 64 帧、8×8 的精灵图集。
- 在 Godot 中使用加法材质时,黑色背景会消失,无需 alpha 通道。
游戏特效的 video to sprite sheet 工作流是什么样的
翻页动画(flipbook)是存储在一张纹理中的帧网格。引擎一次显示一个单元格,就像纸质翻页动画那样。游戏特效美术师用翻页动画来做火焰、爆炸之类的效果。
变化在于谁来画这些帧。2026 年 10 月下旬,开源项目 effekseer-vfx-skill 在 v0.3 版本中加入了一条视频翻页动画路线。其 README 称该路线已用 Seedance 2.5 验证过,任何支持首帧和末帧的图生视频模型都可以使用。思路是:图像模型画一帧,视频模型画出所有中间帧。
![]()
该项目的指南解释了它的用武之地:会改变形状的特效。分层的粒子基本体可以缩放、淡入淡出和滚动一张图片,但无法在一个轮廓内把火变成烟。视频模型能在单段视频中画出这种变化。
使用 Seedance 2.5 生成法术特效片段
这段视频正是过去需要美术师参与的部分。Atlas Cloud 托管了 Seedance 2.5,它的图生视频模式同时接受首帧和末帧。对游戏特效来说,这一对帧就是你想要的控制器:首帧固定外观,末帧固定结束方式。
以下是我们用一张静帧和一段提示词得到的斩击命中效果:
方法一:Atlas Cloud 视频生成器
打开生成器之前,先准备两张方形图片。首帧是你的特效放在纯黑背景上;任何图像模型都能画出来。末帧则是一张纯黑方块。
让元素保持小尺寸。我们这张图里的亮核只占画面宽度的约七分之一,因为特效会从这个尺寸开始生长,而任何碰到边缘的东西在精灵图集里都会变成一条硬边。
接着,在视频生成标签页中:
- 在模型行中保持选中 Seedance 2.5。
- 把特效图片上传到首帧。
- 把黑色方块上传到末帧。
- 粘贴提示词。
- 设置分辨率,时长选 5 秒。我们用的是 1080p。
- 点击运行。
![]()
我们使用的提示词:
plaintext1A high-end AAA game skill effect seen from far away: a small solar crescent slash impact in the middle of a large empty black void. Pure black background, the camera is completely fixed and far from the effect, with no zoom, no push-in, no shake and no change of scale at any time. Only the effect is in frame, no character, no weapon, no ground, no scenery. The entire effect, including the slash, the shockwave and every spark, stays inside the central half of the frame from the first frame to the last: nothing ever comes near the frame edges, and a wide band of pure black stays visible on all four sides in every single frame. No full-screen flash, no white-out, no haze, no fog, no grey or lit background at any moment. 20-1 s: the small solar core from the first frame implodes: its embers and thin golden streaks are pulled inward along curved paths, and the core shrinks to a tiny blinding white point. 31-2 s: a short razor-sharp crescent of plasma, no longer than one third of the frame width, flicks diagonally through the core from lower left to upper right within a few frames and stops. It has a white-hot leading edge, a molten gold body and thin trailing ribbons of orange fire. Both tips of the crescent are clearly visible inside the frame, surrounded by black. 42-3 s: one thin bright shockwave ring pops out from the core, expands to about one third of the frame width and fades there, while the crescent tears into short curling tongues of fire and a spray of fast sparks that travel only a short distance. 53-5 s: the fire tongues thin into glowing filaments, the sparks slow, cool from gold to deep red and die out one by one until the frame is pure black, matching the last frame. 6Look: modern AAA real-time VFX, cinematic HDR bloom kept tight around the effect, fine particle detail, fluid fire motion, fast attack and slow decay. Color: white-hot, molten gold, amber, deep crimson. The background stays pure black in every frame; no ground, no reflection, no text.
其中有三个部分适用于任何特效。说明特效停留在哪里,以及摄像机距离多远。点出你不想要的老套效果,比如雾气或全屏闪白。给每个秒数区间一个变化和它的结束状态。如果你想要手绘风格而不是这种发光风格,我们的 Seedance 2D 动画指南讲得更深入。
方法二:Seedance 2.5 图生视频 API
一款游戏需要几十种特效。一旦某段提示词生效,同样的工作就能以请求的形式运行,脚本可以循环处理火、冰、毒和闪电。
第 1 步:创建并复制 API 密钥,在 Atlas Cloud 控制台的设置页面中操作。
![]()
第 2 步:查看请求格式,在 Atlas Cloud API 文档中,或 Seedance 2.5 图生视频页面的 API 标签页里。首帧放在名为 image 的字段中,末帧放在 last_image 中,两者都是 URL。
第 3 步:提交视频,然后轮询获取文件。 这里的提示词是节选版;请粘贴方法一中的完整版本。
plaintext1curl -X POST https://api.atlascloud.ai/api/v1/model/generateVideo \ 2 -H "Authorization: Bearer $ATLASCLOUD_API_KEY" \ 3 -H "Content-Type: application/json" \ 4 -d '{ 5 "model": "bytedance/seedance-2.5/image-to-video", 6 "image": "https://your-cdn.com/solar-core-first-frame.png", 7 "last_image": "https://your-cdn.com/black-last-frame.png", 8 "prompt": "A high-end AAA game skill effect seen from far away: a small solar crescent slash impact. Pure black background, fixed camera, only the effect is in frame. 0-1 s: the core implodes to a white point. 1-2 s: a short crescent of plasma cuts through it. 2-3 s: one thin shockwave ring expands and fades. 3-5 s: the fire dies out until the frame is pure black.", 9 "duration": 5, 10 "resolution": "1080p", 11 "generate_audio": false 12 }'
plaintext1curl https://api.atlascloud.ai/api/v1/model/prediction/<prediction_id> \ 2 -H "Authorization: Bearer $ATLASCLOUD_API_KEY"
轮询直到状态显示 completed,然后从 outputs 下载 MP4。同一个端点和密钥可以访问 Atlas Cloud 上的其他视频模型,所以要在另一个模型上测试特效,只需改一个字符串。
用 FFmpeg 把 MP4 转成精灵图集
我们的 1080p 视频返回的是 1440×1440 的 MP4 文件,24 fps 共 121 帧。翻页动画并不需要全部帧。我们保留了 64 帧,刚好够 8×8 网格,并用一条命令打包:
plaintext1ffmpeg -i orb.mp4 -vf "fps=12.8,format=gbrp,colorlevels=rimin=0.08:gimin=0.08:bimin=0.08,crop=1180:1180:113:108,scale=256:256:flags=lanczos,tile=8x8" -frames:v 1 orb_sheet.png
从左到右读这个滤镜链:
- fps 把视频重采样为每秒 12.8 帧,也就是 5 秒内共 64 帧。
- format 和 colorlevels 提高黑场,让边缘附近的微弱辉光变成纯黑,这样每个单元格都不会出现边框。我们的视频是 10-bit,必须先转换为 RGB。
- crop 裁掉特效周围多余的黑色,让每个单元格都填得比较满。测量你自己的视频并修改这四个数字。斩击本身已经占满画面,所以那一条我们没加 crop。
- scale 把单元格尺寸设为 256 像素。
- tile 把各帧排列成网格。
输出是一张 2048×2048 的 PNG。
![]()
MP4 转精灵图集这一步也是你设定播放速度的地方。以 12.8 fps 播放 64 帧,特效持续原来的 5 秒。以 24 fps 播放,斩击不到 3 秒就一闪而过。
爆炸精灵图集或循环能量球:两种末帧设置
游戏特效分两种。单次特效播放一次就消失:命中火花、斩击命中、爆炸精灵图集。循环特效则在法术维持期间持续播放:施法者手中的能量球、火把、光环。末帧就是你告诉模型想要哪一种的方式。
| 单次爆发 | 无缝循环 | |
|---|---|---|
| 首帧 | 黑色背景上的特效,尺寸小 | 黑色背景上的特效,最终尺寸 |
| 末帧 | 纯黑方块 | 与首帧相同的图片 |
| 提示词结尾 | 淡出直到画面全黑 | 回到与首帧完全相同的形状 |
| 实测结果 | 末帧最亮像素为 3(满值 255) | 第 121 帧与第 1 帧在 0 到 255 量程上相差约 0.8 |
| 引擎中 | 播放一次,然后释放节点 | 开启循环 |
做循环时,我们把同一张能量球图片上传到两个位置,并要求等离子在原地旋转。
![]()
由于视频结束于开始之处,64 帧图集无需额外处理就能循环。像上面的命令那样以均匀速率采样整段视频,最后一格就会自然接回第一格。
在 Godot 中为翻页动画设置精灵图集动画
Godot 自带的 2D 精灵动画教程介绍了在标准 Sprite2D 节点上使用由 AnimationPlayer 驱动的精灵图集。这就是我们在 Godot 4.7 中使用的设置,另外针对黑色背景改了一处材质。
![]()
- 添加一个 Sprite2D,把图集拖到 Texture 中。
- 在 Animation 下,把 Hframes 设为 8,Vframes 设为 8。此时精灵显示一个单元格。
- 在 Material 下,创建一个 CanvasItemMaterial,把 Blend Mode 设为 Add。
- 添加一个 AnimationPlayer,把 Frame 属性从起始的 0 关键帧设到 4.92 秒处的 63。
第 3 步正是视频要在黑色背景上拍摄的原因。加法混合会把每个像素的颜色加到其后面的内容上,而黑色什么也不加。背景就这样消失了,无需抠像,也不需要 alpha 通道。
![]()
AI 精灵图集生成器适合用在哪里
搜索 AI 精灵图集生成器,首页大部分结果都是为角色打造的:行走循环、待机动作和攻击动画。那是另一项工作,规则也不同。
| 角色精灵工具 | 用于特效的 video to sprite sheet | |
|---|---|---|
| 典型主体 | 必须保持形象一致的角色 | 火、冰、烟雾、能量 |
| 每个动作的帧数 | 一个行走循环可以是 8 帧 | 我们的每张图集都是 64 帧 |
| 背景处理 | 透明 PNG | 黑色,通过加法混合去除 |
| 难点 | 每一帧比例完全一致 | 让特效保持在画面内 |
所以按主体来选择。英雄的奔跑循环属于角色工具,因为帧与帧之间的一致性正是关键所在。一个翻腾成烟雾的火球没有什么比例需要保护,而视频模型的连续运动恰恰是它需要的。
常见问题
我可以用同样的方法把 GIF 转成精灵图集吗?
可以。FFmpeg 能读取 GIF 文件,所以同一条命令把 GIF 作为输入也能用。但颜色会更粗糙,因为 GIF 每帧最多只有 256 色。如果你有原始 MP4,还是从它开始。
特效精灵图集应该有多少帧?
取决于特效在屏幕上持续多久。我们用 8×8 网格的 64 帧来做一段 5 秒视频。一次快速命中的火花用 4×4 网格的 16 帧就够了。帧数越多纹理越大,所以一闪而过的小特效很少需要 64 帧。
这在 Unity 或 Unreal 中能用吗?
图集就是普通的 PNG 网格,所以不绑定某个引擎。在 Unity 中,粒子系统的 Texture Sheet Animation 模块同样接受 8×8 的平铺数量。在 Unreal 中,Niagara 精灵用 SubUV 设置来实现同样目的。我们只在 Godot 中测试了播放。
如果我的引擎需要透明背景怎么办?
在 tile 之前加上 FFmpeg 的 colorkey 滤镜,例如 colorkey=black:0.12:0.1。它会把接近黑色的像素设为透明,我们的测试输出是 RGBA PNG。特效的暗部边缘会变成半透明,所以在未处理的黑色图集上使用加法混合通常看起来更干净。
一段特效视频要花多少钱?
截至 2026 年 11 月 13 日,在 Atlas Cloud 上一段 5 秒 1080p 的 Seedance 2.5 图生视频视频定价约为 $3.00。这是促销价,比 $3.75 的标价低 20%。同一段视频在 720p 下约为 $1.52,返回尺寸为 960×960,仍然远大于 256 像素的单元格。
AI 特效生成器是一回事吗?
这个标签涵盖的不止一种工具。有些能直接从文本提示词生成图集。这里的工作流更窄:通用视频模型绘制运动,而单元格尺寸、帧数和混合方式都由你自己控制。
结语
两张特效静帧、两段提示词,加上每段视频一条 FFmpeg 命令,我们就做出了能在引擎中播放的斩击命中和循环效果。末帧起到了大部分引导作用:会结束的特效用黑色,会重复的特效再用一次首帧。在黑色背景上拍摄意味着引擎可以免费去掉背景。
如果你想在自己的游戏里尝试 video to sprite sheet,先从一个特效和一段 5 秒视频开始。确认它始终保持在画面内,按 8×8 打包,然后放到一个使用加法材质的精灵上。只要这一个能播放,剩下的法术书就都是同样的步骤,只是换一张首帧而已。






