作品简介与玩法
《带上她的眼睛》短剧版是一条 1 分 49 秒的竖屏科幻短剧,改编自刘慈欣同名小说:一位地航员被永远困在地心,只能借地面上另一个人的眼睛,重新看见草原、溪水和落日。
作品页就是播放页。视频下方是逐段拆解——全片 18 段,点任意一段视频就跳到该处。红色左边线的 10 段是这次新生成的对白戏,灰色的 8 段是从上一版成片里裁出来复用的空镜。
和上一版最大的区别是:人物真的在说话。十个对白镜头的画面、中文台词与口型是同一次生成出来的,不是先做画面再配音对轨。
依据:aiknow/innovation_lab/eyes-drama/index.html、项目工程 OpenMontage/projects/eyes-drama/(shots.json、edl.json、gen.py、align.py、compose.py)。
制作工具与技术栈
- 编排框架:OpenMontage,开源 agentic 视频生产系统。它提供工具注册表(按能力族归类的生成/处理工具)、分镜与剪辑的数据结构,以及各家视频模型的提示词规范。本项目没有改动框架本身,只在它的
projects/ 下新建了一个工程。 - 视频与对白:Seedance 2.0,经 fal.ai 的
bytedance/seedance-2.0/reference-to-video 端点。它是本次唯一同时满足三个条件的模型:单次生成即带同步语音、能按提示词里的引号台词出中文口型、支持最多 9 张参考图锁定人物身份。标准档计费 $0.3034/秒。 - 配乐:ACE-Step(fal.ai),纯器乐。
- 字幕校时:ffmpeg 逐 0.25 秒扫人声频段能量定位说话区间,再用 Whisper(fal.ai)转录该区间核对内容。
- 合成:ffmpeg。分段归一化、拼接、配乐自动闪避、libass 烧录中文字幕(PingFang SC)。
工具可用性由 OpenMontage 的工具注册表在运行时查询确定,不同 API key 配置下可用集合不同。
制作步骤
起点不是空白:文件夹里已有上一版用 Seedance 做的成片、三份制作文档,以及 10 段无字幕无黑边的原始分镜素材。这批干净素材决定了整个成本策略。
- 先分清哪些钱不用再花。10 段旧素材里 8 段是空镜(草原、溪水、日落、星空、岩浆舷窗、小黄花、太空站种花、草原奔跑),画质完好且没有烧录字幕,可以直接复用。预算因此全部投向旧版最缺的东西:人物对白。
- 从旧片里抠出身份锚。女主取落日六号舱内的竖版基准帧,男主取太空站种花镜头的帧。这些截图作为参考图上传,用来锁住十个新镜头里的同一张脸。
- 先验证再放量。只生成一个镜头(女主说出真相,8 秒,约 2.4 美元),确认三件事:参考图能否锁脸、中文口型是否真的对得上、原生音频质量如何。验证通过后才批量生成。
- 第一次失败:男主参考图被内容审核拦下。服务端返回
content_policy_violation / partner_validation_failed,提示「输出视频含敏感内容」。用的是一张清晰的正面肖像帧,判断是触发了真人肖像相似度检测。这类请求不计费,但队列响应里没有 video 字段,直接取会抛 KeyError。改用同一角色的两张 3/4 侧脸中景帧后一次通过。女主的同类正面参考图从未被拦,所以不是「正面图一律拦」,而是相似度打分问题。 - 第二次失败:4.86 美元因网络中断打水漂。两个镜头在轮询阶段遇到连接重置,费用已扣但成片没下下来。fal.ai 没有公开的请求列表接口,request_id 没留存就找不回。随后重写了生成器:提交成功立刻把 request_id 落盘到
pending/,轮询与下载全程指数退避重试,并提供 --resume 续传。此后再没丢过。 - 第三次失败:配乐接口无权限。Google Lyria 返回 403
permission_denied。改用 fal.ai 的 ACE-Step。 - 补齐人物弧光。首轮成片 61 秒,男主从冷漠到共情全靠一句旁白带过。第二轮按戏剧优先级排序依次生成 6 个镜头——抗拒、转变、爆发、告别,以及女主的「问风」和事故独白。排序的用意是:万一后面被拦,前面的关键戏已经到手。实际 6 个全部一次通过。
- 校时、合成、验收。字幕时间全部由脚本实测回填,最后 ffmpeg 合成并抽帧核对每条字幕是否压在正确画面上。
关键实现要点
把预算花在"不可复用"的部分
空镜可以复用,人脸和台词不行。10 段旧素材全部转成竖屏后铺底,新生成的 72 秒全是带口型的对白戏。最终 108.5 秒成片里,只有 66% 是新生成的。
16:9 空镜转竖屏的两种处理
旧素材多为 1280×720 横幅。直接中心裁切到 9:16 只保留约三分之一画幅,草原和星空的视野会被毁掉。最终按镜头内容分两路:远景空镜用深度虚化背景铺满 + 居中原画 + 极缓推镜,保住完整视野并读作有意为之的宽银幕;近景人物镜(岩浆舷窗、溪水、小黄花)用满屏中心裁切。
提示词里的身份描述必须逐镜重复
Seedance 把每个镜头当作独立上下文处理,「同一个人」「她」这类指代无效。每个 Shot 块都要把三到六条可辨识的外形特征原样重写一遍:同样的年龄、脸型、发型、服装配色与胸前发光圆盘。
字幕时间靠测,不靠猜
生成出来的语音起止时间事先无法预知。做法是先逐 0.25 秒扫 250–3800 Hz 频段的平均电平定位说话区间,再把每段单独切出来转录核对内容,最后把实测时间写回剪辑表。
这里有个坑:提示词里写了「几乎听不见」的两句气声台词,模型照做了——电平只有 -34 dB,自动检测的默认阈值直接把它们滤掉。若不做细粒度扫描复查,这两句会没有字幕。
配乐按对白段自动闪避
合成时按剪辑表生成一条音量包络:对白段配乐压到 22%,空镜段 60%。成片整体响度 -15.3 LUFS、真峰 -1.3 dBFS。
局限说明
- 不是「一句话出片」。108.5 秒成片对应 18 段分镜的人工编排、10 条逐镜提示词、25 条实测校时的字幕,以及三次失败后的流程加固。模型负责镜头内的画面与表演,结构、节奏与台词是人写的。
- 人物一致性只在参考图约束下成立。十个镜头共用同一组参考图才达到现在的一致度。换场景、换景别时仍有轻微漂移;上一版旧素材内部本身就存在男主换脸的情况,那几帧未被用作参考图。
- 成本不低。标准档
$0.3034/秒,本次共花费约 26.8 美元(余额 28.13 → 1.32),其中 4.86 美元因网络中断损失。按成片时长折算约 0.25 美元/秒。 - 审核结果不可预测。同一批参考图里,女主的正面帧通过、男主的正面帧被拦。无法事先判定,只能失败后换图重试(好在不计费)。
- 没有做的事:序幕「戴上眼睛」那场戏和女主哼唱《草原之夜》的收尾仍是空缺,余额不足以再生成。片中所有语音均为模型生成,无真人配音。
- 版权:改编自刘慈欣《带上她的眼睛》,此处作为技术过程展示,非商业用途。
给 AI 的需求示例
下面是真实用于生成「真相」那一镜的提示词结构(原文为英文,此处保留骨架并译出说明)。关键在于:参考图要逐张点名用途、身份描述逐镜重复、台词用引号直接给出。
参考图 1、2:女主的脸、发型与服装——严格匹配。
参考图 3:地心舱内部与岩浆舷窗——严格匹配这个场景。
Shot 1(中近景,极缓推镜,平视):
一位二十多岁的中国女性,鹅蛋脸,长发披散,身穿白色装甲宇航服,
银色颈环,胸前有发光的蓝色圆盘——在狭窄的白灰色舱室内失重漂浮。
一只戴手套的手搭在厚圆舷窗边缘。窗外橙色岩浆翻涌发光,
闪烁的琥珀色光扫过她的脸。她直视镜头,平静而疲惫,
用普通话说:"我在落日六号。"
Shot 2(特写,静止,轻微倾斜):
同一位二十多岁的中国女性,鹅蛋脸,长发披散,白色装甲宇航服,
银色颈环,胸前发光蓝色圆盘。她眼里含着没落下的泪。
琥珀色岩浆光在她脸颊上脉动。她用普通话说:"被困在地核了。"
光线:唯一光源是舷窗外的橙色岩浆,舱内指示灯提供冷蓝补光。
风格:电影感硬科幻,浅景深,变形宽银幕镜头,细腻 35mm 颗粒,青橙调。
音频:低沉的地下轰鸣,隐约的船体金属呻吟,稀疏电子提示音。
她的声音轻柔、贴近、疲惫。无配乐。
注意 Shot 2 把身份描述一字不差地重写了一遍。若写成「同一个女人」,模型会当作全新上下文处理,人物可能换脸。
小练习
练习一 · 锁住一张脸(约 20 分钟,需要付费接口)
找一段你自己拍的、有人物正面的视频,截三帧(正面、侧脸、带环境的中景)。写一条两镜头提示词,让这个人在两个不同场景里各说一句不超过 8 个字的中文。对比:只写「同一个人」和把外形特征逐镜重写,人脸一致度差多少。
练习二 · 不花钱也能做的部分(约 30 分钟,只需 ffmpeg)
拿任意一段 16:9 横屏视频,分别用「中心裁切」和「虚化背景铺满 + 居中原画」两种方式转成 9:16,各导出 10 秒。在手机上看,判断哪种更适合你这段素材的内容——远景和近景的答案通常相反。
练习三 · 字幕校时(约 20 分钟)
写一个脚本,逐 0.25 秒测量一段带人声音频在 250–3800 Hz 的平均电平,把高于阈值的连续区间合并成「说话段」输出。然后故意把阈值调高 10 dB,看会漏掉哪些句子——这正是本片两句气声台词差点没有字幕的原因。