← 工作室

01 · 生成视频

金融决策的演化

暂定片名 Old Brain, Young Money。这是一部逐镜头用生成视频制作的纪录片:旁白先于任何画面录制,每一条被引用的说法都追溯到一份存档来源。

论点,用 Tony 的话说:相对于我们身体演化的漫长历史,金钱是一件年轻的、人造的东西。恐惧与贪婪是为狮子而生的,不是为市场;现代世界放大了这种错位。出路是理解人性,把风险交给机构、时间和分散的市场,并且经常练习做小的决定。

9:29.8 开发版剪辑 1 · 2026 年 10 月 1 日
47 生成镜头 · 冷开场 + 4 章
9:06 旁白 · Fish Audio 声音“Anthony”
27 / 27 引述已对照存档副本审核
8 脚本草稿,每稿都经 Tony 批注
尚未发布 三道关卡尚未通过,列在文末

流水线,按顺序

1  论点 2  来源 3  脚本 4  旁白 5  镜头清单 6  角色 7  模型测试 8  镜头 9  剪辑 10  声音 11  验证 12  总装
01

从作者的论点出发,而不是从提示词出发

Tony 在 9 月 25 日的一次记录里说出了这个论点。它被原样存档,成为这部片子的主心骨。结局在第一个镜头出现之前就定了:真相留在片中,邀请放在片尾字卡上。

apex-philosophy/captures/2026-09-25.md · Linear 项目“The Evolution of Financial Decisions” · 质量标杆:Tony 提供的一段高端纪录片参考片

02

研究只守一条规矩:没有对应到某一行来源的内容,不得进入旁白

来源文件记录了每一个人物和每一个事实。标注 VERBATIM 的引述,必须是存档网页中的原文片段,由脚本机械地检查。转述会写明自己是转述。文件还记录了脚本不许说的话:Markowitz 的 50/50 分配只能表述为 1952 年的做法,因为他后来说过“Now I don't do that”;Ted Benna 并没有把养老金的消亡归咎于 401(k)。

实测 完整脚本上的 27 条引述,27 条全部通过审核。来源存档在 research/raw,并附出处说明:Markowitz 1952 与 1991、Benna 在 NPR 2009 与 Fortune 2024、Kahneman 与 Tversky 1979、Kuhnen 与 Knutson 2005、Fliessbach 2007。

research/sources.md · research/audit_quotes.py · research/raw/

03

八稿草稿,每一稿都经作者批注

第 01 稿只有冷开场和第一章。第 06 稿是完整的影片,长 9:57。Tony 批准了接近 9:15 的目标,第 07 稿用四处删减达到了它。留下来的结构:凌晨两点的冷开场,接着是 一 · 为狮子而生,二 · 恐惧与贪婪,三 · 风暴,四 · 出路,最后是结尾。

script/draft-01.md … draft-08.md · script/directions.json(逐句节奏)

04

先录旁白。它是此后一切的时钟

Tony 从 Fish Audio 里挑了声音“Anthony”,语速 0.85,逐句生成。一个配音工具把每一句录音按声音、语速、模型和文本做键缓存,所以重新渲染某一稿时,只会重录改动过的句子。一个重抽工具对一句话取多条录音,留下最接近目标语速的那一条。每一条录音都用 Whisper 逐条核对,因为 Whisper 处理很长的拼接文件时,既会循环,也会漏字。

实测 旁白共 9:06.1。由录音缓存算出的总时长,与渲染出的文件精确到帧一致——正因如此,镜头清单才能在任何画面出现之前就排好时间。

tools/voice.py · tools/reroll.py · audio/cache · audio/drafts/draft0N-narration.mp3

05

按缓存录音排好时间的镜头清单

每一行都从它所说明的那句话开始,并标注类型:B-roll、角色、时钟、界面、扫描、图形或复用。类型决定路线:B-roll 与角色镜头用生成视频,手机界面与数据卡用设计出来的屏幕,脑部扫描用真实解剖结构,章节卡用 HyperFrames 排版。剪辑再加上 4 秒的前导,以及 9 秒的片头与片尾字卡。

实测 约 382 秒生成画面,分布在 31 行 B-roll、7 行角色、4 行时钟、6 行界面、15 行图形、8 行扫描和 3 行复用中。制作之前算出的影片长度:9:19。

script/shotlist.md · script/shotlist.json · tools/shotlist.py

06

先锁定角色,再生成任何一帧

影片跟随一位女性。她的身份由一段标准的 FACE 描述承载,原样粘贴进每一条提示词;只有服装和场景段落会变。一张由静帧组成的角色设定表(正面、四分之三侧面、侧面、眼部特写、全身、早晨与夜晚的服装),是此后每一次参考图生视频调用的参照集。

visuals/character/her.md · sheet A-01 … A-07 · Seedream 5 Pro stills via Renoise

07

先对每个模型、每种镜头类型做测试,再投入制作

一批付费测试用同样的镜头跑了 Seedance 2.5 和 MiniMax H3 Max。Seedance 动作流畅、人物身份最稳,但场景参考图会劫持构图。H3 Max 的 B-roll 很强,却在一个含两个动作的角色镜头里插入了硬切。由此得出的规则:角色只给身份参考,每个镜头只做一个动作;B-roll 交给 H3。每条路线的价格表,都读自厂商自己的页面,并记录在决定旁边。

实测 第 02 批测试:520 积分。HeyGen Video 1(经后训练的 MiniMax H3)随后在订阅账号下跑完了第二到第四章,每生成一秒约 0.43 积分,每个镜头只生成一次,每个任务前后都读取余额,因此成本是实测的,不是估算的。

visuals/tests · tools/runway_i2v.py · tools/heygen_video.py · tools/gen.py · tools/rn (Renoise CLI)

08

逐章生成镜头,记录与每个文件放在一起

每个生成的片段,都连同它的提示词、请求、任务记录,以及章节日志里的一行一起写下。有真实物件的地方,就用真实物件:第一枚硬币是来自 The Met 开放获取馆藏的真实 Lydian 金币(stater);大脑是真实的 MNI152 解剖结构,由扫描工具扫过,光晕放在已发表的坐标上;支付界面是对 2007 年实验的带字幕复原。

冷开场 · 4 个镜头 · Seedance 2.5 ×3,H3 ×1 第 1 章 · 10 个镜头 · Seedream 静帧 → Runway H3 图生视频 第 2 章 · 11 个镜头 · HeyGen Video 1 · 29 积分 第 3 章 · 15 个镜头 · HeyGen Video 1 · 35 积分 第 4 章 + 结尾 · 7 个镜头 · HeyGen Video 1 · 23 积分

visuals/coldopen · visuals/ch1 … ch4 · visuals/scan · tools/scan.py · each clip: .mp4 + .prompt.txt + .request.json + .task.json + LOG.md

09

在 HyperFrames 里剪辑,一章一个项目,剪切落在句子节拍上

每一章是一个 HyperFrames 项目,每个场景是一个子合成。时间线由构建脚本依据录音缓存生成,所以每一刀都落在它所属的那句话上。必须精确的屏幕是设计出来的,不是生成的:带虚构提醒的手机锁屏、来自 Fed、SSA、CDC 和 BLS 的数据卡、一张 Benna 的 NPR 卡、一段每帧滚动两像素的助手对话。第二到第四章共用一个库,所以时间线代码只存在一份。

edit/cold-open · edit/ch1 … ch4 · edit/lib/timeline.py · edit/lib/comps.py · tools/build_index.py per chapter · npx hyperframes check

10

声音处理:在人声之下让出空间的配乐,按峰值量过的音效

生成的配乐垫底,用人声组(voiceover group)为旁白让出空间,因此人声永远最突出。时钟、心跳、风声和狮子都是生成的音效;有两个撞击声来自库存音效库。其中一课已写成脚本里的一条规则:让声音模型生成“轻柔”的东西,得到的是近乎无声的文件,所以每个音效在放入之前,都先量它的峰值。

carve.mjs (group voiceover) · tools/runway_sfx.py · tools/audio_levels.py (fails on a lane mismatch)

11

先用仪器验证,再由作者过目

章节验证器先在一章已知良好的版本和一个已知有问题的版本上校准,这样“通过”才有意义。它转写交付的渲染文件,要求每一个旁白字在混音下都被识别出来,要求没有任何一句被淹没,并读取响度。Tony 随后的审看,修掉了没有任何仪器标出的问题:一个让手机文字抖动的缓慢变焦,以及一段太响太久的扫描仪嗡声。

实测 校准:第一章 v4 的 214 个字全部识别,没有任何标记;v3 则正确地标出了被淹没的扫描仪那一句。每一章的渲染:所有字都听得清,每一句里配乐和音效都至少比人声低 12 dB,响度约 −14 LUFS。

tools/verify_chapter.py · ch1-v4 · cold-open-v5 · ch2-v1 · ch3-v1 · ch4-v1 · phone copies for review on Remote Control

12

总装,在拼接后的文件里统一响度

总装工具把冷开场和四章拼接起来,在拼接后的文件里按实测,以纯增益把每一部分统一到 −14.0 LUFS,峰值 −1.0 dBFS。结果就是开发版剪辑 1,长 9:29.8,另有一份 480p 的手机副本供审看。片尾字卡仍写着“text to come”。

tools/assemble_film.py · edit/film/renders/old-brain-young-money-dev1.mp4 · git: every step is a commit in the project repo

对外放行之前的关卡

  • 旁白在付费的 Fish Audio 模型上重新渲染。免费模型只授权非商业使用,开发阶段按 Tony 的选择用的是它。
  • 确认 HeyGen Video 1 的商业条款适用于所生成的镜头。
  • Tony 的片尾字卡文字。

这条工作流教给工作室的事

  • 厂商文档里的一句话,并不授予任何关于某个账号能做什么的许可。一次带认证的调用,一分钟就解决了读三遍文档也解决不了的事。
  • 在渲染器里,音量轨是绝对增益;有十六条轨道一直满电平播放,直到写了一个遇到不匹配就报错的工具。
  • 把草稿工作留在项目仓库里。曾有保存在临时文件夹的来源,在一次会话恢复时丢失,此后不再发生。