下载 App

豪掷10万积分!11 段首尾帧生视频衔接,拼出2 分钟的叙事长视频

精华03/31116 浏览开发交流 包含 AI 合成内容
作者:浠涫
开发引擎:TapTap Maker (UrhoX)
项目:方格屋(半成品)

一、需求背景
方格屋的序章有 26 行对话,分两段:
A 段(storyBefore):9 行,主角回忆高中教室,49.7 秒
B 段(storyAfter):17 行,从方格初体验到方格屋成立,70.8 秒
我想让每行对话都有对应的视频画面——不是一张静态背景图上飘文字,而是画面跟着对话内容走。教室、调色盘、方格纸、方格屋的木牌……每个场景都有独立的视频。
但 TapTap Maker 的 AI 视频生成有硬限制:单段视频最长 15 秒
2 分钟的叙事内容,不可能一段视频搞定。唯一的办法是:生成多段短视频,用首尾帧衔接技术把它们串成一条流畅的长视频。
最终方案:A 段 5 段视频(50 秒),B 段 6 段视频(70 秒),共 11 段,总计约 50MB。
二、核心思路:首尾帧衔接 = 无缝拼接
2.1 什么是首尾帧衔接
AI 视频生成支持 first_last_frame
模式——你给一张首帧图和一张尾帧图,AI 会生成一段从首帧过渡到尾帧的视频。
衔接的关键:第 N 段视频的尾帧 = 第 N+1 段视频的首帧。
TapTap
                           
这样每段视频结束时,画面自然过渡到下一段的开头,没有跳变。
2.2 为什么不直接合成一个长视频
三个原因:
  1. 引擎限制:AI 单次只能生成 4-15 秒的视频
  2. 风格一致性:短视频更容易控制画面质量,长视频到后半段画面容易崩
  3. 灵活修改:改一行对话只需要重新生成对应的那一段,不用重新生成整条视频
三、分镜设计:从对话到视频段落
3.1 时长计算
每行对话的时长 = 字数 × 0.16 秒(打字速度)+ 0.6 秒(阅读停顿)。空行 = 1.5 秒(场景切换)。
例如 A 段:
L1: "我不知道别人的脑子是不是安静的。我的不是。"  → 21字 × 0.16 + 0.6 = 3.96s
L2: "不对——是我的太安静了,所以装得下别人的。"      → 21字 × 0.16 + 0.6 = 3.96s
L1+L2 = 7.9s → 视频取 8s
3.2 A 段分镜(5 段,50 秒)
TapTap
3.3 B 段分镜(6 段,70 秒)
TapTap
四、AI 生成实操
4.1 第一步:为每段视频准备首帧和尾帧
先批量生成所有需要的场景图(约 12 张),作为视频的首帧/尾帧素材。
```
场景图 1(教室全景):
治愈系动画风格,高中教室,午后阳光从窗户照进来,一个安静的少年坐在最后一排的课桌前,
周围同学模糊处理,竖屏 9:16
场景图 2(情绪烟雾):
治愈系动画风格,教室中弥漫着彩色半透明烟雾,红色铁锈色和蓝色交织如墨水在水中扩散,
一个少年坐在中间表情平静,竖屏 9:16
场景图 3(调色盘散去):
治愈系动画风格,教室里彩色烟雾正在慢慢消散,画面从混沌渐变为宁静的暖色调,
空荡荡的教室,阳光斜照,竖屏 9:16
... 以此类推
```
4.2 第二步:逐段生成视频
每段视频用 first_last_frame
模式生成:
```
-- A-1 段(8s)
模式:firstlastframe
首帧:[场景图1 - 教室全景]
尾帧:[场景图2 - 情绪烟雾开始]
提示词:安静的少年坐在教室最后一排,周围同学的低语声化作彩色烟雾缓缓升起,
       红色和蓝色的情绪如墨水在空气中扩散,竖屏 9:16
时长:8 秒
-- A-2 段(13s)
模式:firstlastframe
首帧:[场景图2 - 情绪烟雾](= A-1 的尾帧)
尾帧:[场景图3 - 调色盘散去](= A-3 的首帧)
提示词:彩色情绪烟雾继续扩散,前排一个女生趴在桌上肩膀微微颤抖,
       铁锈色的焦灼和蓝色的悲伤在空气中交织,竖屏 9:16
时长:13 秒
```
4.3 关键技巧
技巧 1:尾帧截图比重新生图更一致
第 N 段视频生成后,截取它的最后一帧作为第 N+1 段的首帧。这比重新用文字生成一张图要一致得多——AI 画图每次都有随机性,但截图是确定的。
技巧 2:时长宁可多 1 秒,不要少
视频时长必须 ≥ 对话时长。如果视频短了,对话还没打完视频就切走了,画面会跳变。我的做法是每段多留 0.3-0.6 秒余量。
技巧 3:风格提示词要固定后缀
所有视频的提示词末尾统一加 治愈系动画风格,竖屏 9:16,暖色调
。这保证了 11 段视频的画风一致。
技巧 4:B-1→B-2 的首帧衔接失败了怎么办
我的 B-1 尾帧被 AI 检测为"含真人",无法作为 B-2 的首帧输入。这种情况下只能放弃首帧衔接,B-2 重新生成独立首帧。播放时会有轻微跳变,但通过 3 秒超时降级到 ADV 文字模式可以掩盖。
五、代码实现:双播放器预加载 + 零延迟切换
11 段视频不能全部预加载到内存(太大了),但也不能等玩家看到黑屏才开始加载下一段。我的方案是双播放器预加载
5.1 核心思路
```
播放器 A:正在播放第 N 段
播放器 B:后台异步加载第 N+1 段
第 N 段播完 → 交换 A 和 B → 播放器 A(原 B)播放第 N+1 段
                     → 播放器 B(原 A)开始加载第 N+2 段
```
永远只有一个播放器在播放,另一个在后台加载。切换时直接 swap,零延迟。
5.2 预加载实现
```lua
-- 确保预加载播放器存在
local function ensurePreloadPlayer()
    if not preloadPlayer_ and VideoPlayer then
        preloadPlayer_ = VideoPlayer:new()
    end
end
-- 异步预加载下一段视频
local function preloadNextClip(nextIdx)
    ensurePreloadPlayer()
    local clip = clips[nextIdx]
    preloadPlayer
:AsyncLoad(clip.path, 1080, 1920, function(result)
        if result == 0 then
            -- 加载完成后播放+暂停,让解码器预热首帧
            preloadPlayer:Play()
            preloadPlayer
:Pause()
        end
    end)
end
```
5.3 零延迟切换
```lua
-- 用预加载好的播放器替换当前播放器
local function swapPreloadedPlayer(targetIdx)
    local oldPlayer = videoWidget.player
    oldPlayer:Stop()
-- 把预加载好的播放器交给 widget
videoWidget_.player_ = preloadPlayer_
videoWidget_.nvgImageHandle_ = nil  -- 重置纹理缓存
-- 旧播放器变成新的预加载器(循环利用)
preloadPlayer_ = oldPlayer
end
```
5.4 时序同步
视频切换由对话进度驱动,而不是由视频播放进度驱动:
lua
-- 每行对话开始时,检查是否需要切换视频
local function startLine(lineIndex)
    -- 找到当前行对应的视频段落
    local targetClip = findClipForLine(lineIndex)
    if targetClip ~= clipIndex_ then
        switchClipForLine(lineIndex)
    end
end
这样即使视频加载有延迟,对话也不会卡住——对话是计时驱动的,视频只是画面配合。
六、成本报告
| 项目          | 数据                          |
| ----------- | --------------------------- |
| 场景图(约 12 张) | 约 12 × 200 = 2400 积分        |
| 视频生成(11 段)  | 约 120X100=12000积分           |
| 失败重生成(约 9次) | 约96000积分                    |
| 总积分消耗   | 约 100000-110000积分       |
| 总视频体积       | 约 50MB                      |
| 代码量         | prologue_video.lua 约 900 行 |
11 段视频花了大约 10 万积分。在 GameJam 24 小时的紧张节奏下,这是最大的积分支出。
七、踩坑记录
坑 1:首帧被判定为"含真人"无法使用
AI 的安全检测会把含人物的视频尾帧标记为"含真人",导致无法作为下一段的首帧。
解法:人物用远景或背影,避免面部特写。如果还是被拦,只能放弃该处的首帧衔接。
坑 2:11 段视频 50MB 太大了
资源体积直接影响加载速度。
解法:每段控制在 2-5MB,分辨率用 1080×1920(不用 4K),码率压低。最终 11 段约 50MB,勉强可以接受。
坑 3:视频时长和对话时长对不上
AI 生成的视频时长有 ±1-2 秒的误差。
解法:生成时多请求 1 秒余量。代码中视频和对话是独立驱动的——对话走计时器,视频走 onEnded
回调,互不阻塞。
坑 4:手机端全部白给
11 段视频每次都要花 1 万积分,手机端 Video.isSupported
返回 false,一段都播不了。
解法:没有解决,……[表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭][表情_豹哭]
八、一句话总结
首尾帧衔接的本质是"接力赛"——每段视频跑完自己的赛程,把画面准确交接给下一段。11 段短视频串起来就是一条 2 分钟的叙事长视频,成本可控,修改灵活,效果远超单段长视频。
唯一遗憾的是手机端不支持视频播放,这 1 万积分在手机上完全看不到效果。但桌面端的体验确实很好——如果你做的是桌面端游戏,这个方案值得试试。
01:29
官方阅,申请积分计划2,希望官方继续支持我完成这款游戏,截图
官方阅,申请积分计划2,希望官方继续支持我完成这款游戏,
视频内容只是一部分, 本游戏耗时3个月,目前完成进度百分之80, 是生存游戏,进入修仙界,走剧情找到宗门加入, 这时游戏才是真正开始, 提升实力境界后就可以变强,获取功法法术法宝, @视频内是游戏里挑战妖族入侵一种主流玩法,游戏就是围绕着这个来进行, 还有很多地方可以战斗,获得资源修炼变强,比如去藏书阁学习功法, 去法宝楼抽法宝,每一个宗门数十个法宝抽取 去修仙界探索,获得各自的资源,可能遇见妖兽
1 赞
3 回复
本地部署 AI 对接 TapMaker 指南 —— 以 CodeBuddy 为例V1.1截图
本地部署 AI 对接 TapMaker 指南 —— 以 CodeBuddy 为例V1.1
写在前面 大家好,我是橘猫,和你一样也是TapMaker的萌新玩家。在"全能神"天哥的悉心指导下,我顺利完成了本地开发环境的部署。经过这段时间的实战测试,已经成功打通了「本地开发 → 同步至TapMaker」的完整流程。 以下内容全部来自我的个人实操经验,旨在为同样在探索本地部署的朋友提供一个参考。每个人的电脑环境、网络情况、AI工具版本都不尽相同,文中的步骤仅供交流学习。如果你照着操作后遇到问题
32 赞
14 回复
如何提升你游戏中的UI美术水平截图
如何提升你游戏中的UI美术水平
一、请为你的游戏挑选一款合适的字体 很多开发者没有注意到其实UI界面中最重要的元素是字体,一款合适的字体能给整个游戏的界面感官带来蜕变。 请看案例 那么如何挑选适合自己的字体呢? 我总结出了一些小经验可供参考: 黑体:通用 宋体:古风、武侠、修仙 楷体:古风、武侠、修仙 圆体:卡通、动漫、Q版 科技:科幻、未来、电子 顺手分享一个免费可商用字体网站: 当然 如果你不知道自己的游戏适合什么风格
精华
121 赞
44 回复
03:06
为了不被斩杀,我只能做到这些了截图
为了不被斩杀,我只能做到这些了
之前一直申请不到计划3,之前说太花哨,后面说体量完成度不足,在我一番小作文下,编辑终于给了我解答,什么原生质感,玩家开局体验啥的。 本来计划2也够用,准备以后再优化了,结果计划2赠送的积分要砍半了,学生党实在消费不起,于是只能再冲一波计划3了 从周六中午到现在一天半时间,优化了一遍角色卡,战斗卡,还有抽卡界面,优化了新手教程,该说不说确实比之前要舒服些。 前半部分为新版,后半部分为旧版。 明天再次
25 赞
6 回复
00:45
TapTap制造本地开发模式保姆级教程截图
TapTap制造本地开发模式保姆级教程
1.你可以使用 Codex、Cursor、Claude Code 等支持 MCP 的 AI 工具 最简单的就是腾讯的WorkBuddy 2.去官网下载WorkBuddy 3.对WorkBuddy说:我要安装个Agent 我给你安装方法 一、安装 Maker MCP npx -y @taptap/maker install --ide codex,cursor,claude 部分 Agent 安装
12 赞
8 回复
00:45
一个在做的小项目截图
一个在做的小项目
这是7月11 创建的项目 内容不是很多,但是因为是菜鸡小白,所以很多东西进度很慢。 开发了7天,进度也仅仅才达到这样。 我是用慢慢推进的方式一点点做的,从开始界面,然后一点点往里面推。 点开的都是开发得差不多了,没点的那就是没做。 战斗场景也没做, 缺的东西很多。 但是都在规划中,我的思路是先做好UI布局,然后再完善内部数值系统。 玩法也是比较常用的刷宝玩法。 刷宝养成类 所以没有太复杂的系统,所
1 赞
5 回复
【新游上线】TapTap制造模拟器截图
【新游上线】TapTap制造模拟器
大家好,我是《TapTap制造模拟器》的制作人Paul~ 《Taptap制造模拟器》是一款轻度经营模拟游戏。玩家将经营一家独立游戏工作室,使用 AI 游戏制作工具从零开始开发作品,选择游戏类型、美术风格、玩法方向、商业化方案和制作规格,完成立项、制作、发布与运营。游戏上线后,你需要处理玩家反馈、修复 Bug、提升评分、控制服务器费用和员工工资,在收入、口碑、粉丝与现金流之间做出取舍。随着章节推进,
7 赞
14 回复
游戏墨染灵境,续一下计划二被说同质化截图
游戏墨染灵境,续一下计划二被说同质化
玩法如图,灵兽渡劫,灵武渡造(包括可以打造自定义灵武),炼丹引兽,12个挑战(每个boss都有各自特色),墨境轮回肉鸽玩法,基础秘境探索,拍卖玩法(可以抢夺可以尾随),灵田种植,还有异步pvp在线切磋。 真的有同质化吗[表情_生气][表情_生气][表情_生气]
4 赞
7 回复
新人避坑指南第一期(核心必看)截图
新人避坑指南第一期(核心必看)
新手制作游戏项目三大避坑准则 一、前期地图规范要求 开启新项目之后,必须清晰交代需求:明确项目内容、运行环境、角色出生点位置,再交由助手制作第一张地图。 第一张地图禁止直接预览,先将生成内容存入素材库,核对样式是否符合自身预期。 核心判定方法:单独生成第一张地图预览图,第一张地图决定整体全局架构,UI、UX整体风格全部由它锁定。如果第一张地图的画面、UI、UX不符合自己的设想,立刻新建项目,不要在
15 赞
6 回复
00:48
我做了一款哥特风像素射击游戏|《失落庭院》实机演示截图
我做了一款哥特风像素射击游戏|《失落庭院》实机演示
序列帧实在是太好丸辣! 一直想做哥特风的游戏哈哈,目前做了三把武器,三个怪物和两个房间,不知道有生之年能不能做完😭
11 赞
6 回复