寒 DATA VAULT数据仓
EN / 中
CAP XXIII · № 023
DATA WAREHOUSE · AI · SYSTEM
— · — UTC
DATA VAULT
CAPITULUM · XXIII

On Drawing What the Record Allows三周多的短片 · 从甲骨到壁画 · 用代码画, 回原文查

№ 023 · 2026.11.03 · AI · SYSTEM · 3,710 字 · 14 MIN

黑底上, 一个甲骨文的「雨」字逐笔亮起来。三千多年前的人问今天下不下雨, 又问雨从哪边来; 我把这几句话放进一条 68.8 秒的短片, 却在第一版里没把问句数对。屏上写着「上面一共问了五句」, 后面跟的只有西、东、北、南四问。预览看到这里, 我问了一句: 「这个不是一共四句问句吗」。后来改成「上面还问了四句」。

这三周多, 大抵就在做这样的事。让 Claude 和 Codex 把古物画出来, 再盯着画面里的一句话, 看它究竟有没有那么回事。截至这次整理, 成片共 46 集, 同集的配音与无配音版只算一集。主线里的「中华故事汇」讲历史, 另外几套讲法律; 早期科普和零散支线也算在这个总数里。下面挑几集, 沿着画法怎么变、说法怎么改, 聊作一份做片笔记。

这些片子没用过生图模型, 画面代码则是 AI 写的。更早做的《听出地心》用过真实肖像和报告插图, 后来并入卷一的「客星」也用过星云照片与古籍扫描。到 10 月 17 日做卷一第 1 集《雨从哪边来》时, 规矩才定成照片和扫描只拿来照着描, 不放进成片。「用代码画」说的是这以后的做法, 不能倒过来抹掉早期的照片。

卷一: 木牍得翻过来

「中华故事汇」卷一做完 12 集, 一集六七十秒到一分半, 大多只有字和配乐。第 3、11 集是例外, 用我的声音克隆配了旁白。那时的题目还小, 一件古物或一句原话就够撑一集。《雨从哪边来》用的三块甲骨拓片, 照 1916 年《殷虛書契後編》和 1921 年《龜甲獸骨文字》的扫描描; 释文则回到郭沫若《卜辭通纂》第 375 片。他把分散在三本书里的残片对成一版, 我们才有眼前这一连串问雨的话。

揭晓那一拍, 甲骨文用 0.4 秒变成今天的「雨」。前两拍静音, 这一拍的配乐最响。若把屏幕递给刻下卜辞的人, 他大概仍要问雨到底来不来, 未必在意我们认出了一个字。我们隔着这么久去看, 看重的东西已有不同; 片子能做的, 是把他当时的问题先留下。

黑底上逐笔亮起的金色甲骨文雨字
《中华故事汇》卷一第 1 集《雨从哪边来》, 黑底上亮起甲骨文「雨」的金色笔画。

第 3 集《秦朝的乘法表是倒着背的》, 原稿把木牍末尾读成「凡千一百一十三字」。查证时把得数重新加了一遍, 1113 恰好是全部 38 句得数之和; 再对照片, 才发现带「字」的那行属于另一块木牍。这块背面写的是「·凡千一百一十三」。王焕林的《里耶秦简「九九表」初探》也指出了这个总和。动画于是要让木牍翻面, 旁边的计数器一路加到 1113, 再和背面的字对上。

到《十天一问》, 另一个顺口的说法也被拿掉了。它原来叫「一个星期是十天」, 容易让人以为商朝有星期, 我改了片名。画面从今天一行七天的月历, 切到一行十天的干支表。骨上的 25 个不同字, 只有 7 个取自《甲骨文合集》6057 本版, 余下借同组别的甲骨补齐, 简介里也要交代。

秦代木牍背面的总数与计数器1113对应米色牛骨上排列着涂朱的甲骨文
依次是卷一第 3 集《秦朝的乘法表是倒着背的》背面的总数, 和第 16 集《十天一问》牛骨上的涂朱文字。

卷二: 墙上认不出的字, 就不画

卷二《一统风云》有 7 集, 每集约 86 秒。米白纸换成黑底上的深色实物, 也换了起手的规矩: 先读古人亲手写下的东西, 科学留到后面揭晓。整季不配音, 开头用《梅花三弄》泛音段的 13 个音。

《铜镜怎么把背面照到墙上》画上海博物馆藏的西汉透光镜, 镜背铸着「见日之光, 天下大明」。本来想让八个字一起投到墙上, 馆方藏品介绍也写了投影中的文字与纹饰; 然而查到的两张实拍, 光斑里只看得出圈和连弧, 认不出字。馆方文字固然这样写, 我们手里的照片却不足以支持把字画清楚, 但也不能据此断言透光镜都照不出字。成片只画花纹, 馆方的说法放进简介。

黑底上的透光镜镜背及八字铭文墙上光斑显出连弧花纹而没有可辨认的文字
卷二第 5 集《铜镜怎么把背面照到墙上》, 镜背有铭文, 墙上的光斑只画出实拍中能辨认的花纹。

这一集的光路按反射公式算。代码容得下把每束光安排妥当, 却不能替照片多认出一个字。前面的《边塞的兵要背什么》也有类似的小坎: 转录本把「蓬」统一换成了「烽」, 还标错一枚简号, 只好换两份一手来源重核。画面沿塞墙往前走, 蓬与火逐座传下去; 那张信号表出自居延新简《塞上蓬火品约》, 字不能顺手改成我们习惯的写法。

收官的《发了那么多封信他怎么不回》, 从一封粟特文信起手。约 313 年, 一个带着女儿困在敦煌三年的女人写给丈夫, 怨他一封信也不回。原件照片描成 942 段矢量, 上屏的关键句拿 Sims-Williams 的英译和 Livshits 的俄译相互核对。信袋停在烽燧下的垃圾堆里, 没能送出去。原稿还说「1907 年才被人打开」, 读到斯坦因《Serindia》才改掉: 找到是一回事, 整批信到 1910 年才在牛津展开。连「打开」这个动词也得查。

夜空下的夯土烽燧与脚下的一小堆遗物
卷二第 7 集《发了那么多封信他怎么不回》, 未送出的信停在夜色里的烽燧脚下。

卷三: 镜头沿着壁画走

卷三《盛世华章》计划 8 集, 现在做完隋、唐、后梁、后唐 4 集, 时长也到了 3 分 24 秒至 3 分 46 秒。题目从一件器物转到一段历史, 画风换成敦煌壁画重彩, 开始画人, 仍不画五官。每集配一首《风雅十二诗谱》里的曲子, 对曲谱的年代只说「据传是唐开元年间的谱」。

《只活了37年隋朝留下什么》是一面 13 格长壁画, 镜头沿墙走过运河与粮窖。到了征高句丽, 一个点代表一百人, 30.5 万人的点阵铺开, 再收到回抵辽东城的 2700 人。这个比例让空下来的面积自己说话。不过画面里的数字也有边界: 运河长度在不同书里从两千到两千七百公里不等, 上屏便写「两千多公里」; 粮食「得供五六十年」要留在唐太宗批评隋文帝大旱不开仓的语境里, 不能剪成一句夸赞。

后唐那集讲李存勖, 三支箭自是好开场, 欧阳修在《伶官传》里却写着「世言」, 只能按传说来讲。923 年也得把四月称帝、十月灭梁分清。戏台上的热闹往后收, 兵变时《鹿鸣》的乐器一件件停掉; 皇帝之死只画乐器堆起火。五代几集共用一条 53 格进度条, 片尾一扇门打开, 里面接下一集。

隋朝壁画中的点阵大部熄灭只余少量亮点后唐宫殿前的戏台上站着红衣皇帝与绿衣伶人
依次是卷三第 1 集《只活了37年隋朝留下什么》大部熄灭的点阵, 和第 4 集《灭了梁朝的皇帝为什么死在戏子手里》的宫前戏台。

古案清谈: 契纸上的三道横

法律这一条线用古案清谈的标识, 和历史片片尾的印章分开。《古案清谈》本身做了 5 集, 一集约两分钟。第 1 集《杀人之前问五遍》讲唐太宗一怒之下处死张蕴古, 后来定下覆奏的规矩。片子按《资治通鉴》的次序, 先三覆奏, 再到同年十二月的五覆奏, 用五道红弧画出京城死囚两天内的奏报。

张蕴古也没有被写成「无罪」。查《贞观政要》, 他曾把太宗想从宽的意思透给犯人, 又和犯人赌博; 片里留的是太宗自己的话「若據常律, 未至極刑」。原文关与分屏稿为这一集花了 40.5 分钟、104 次工具调用, 成片 27 屏、402 字。查证花掉的时间, 有时就在决定少写哪两个字。

第 5 集《古代真的用指纹吗》更干脆。我贴来几条说法和问答截图, 想讲古代指纹, 查下来三条主要说法都不成立, 连截图标的《元史》也实为《新元史》。后来改讲《吐鲁番出土文书》里 665 年的借钱契: 名字底下几道横线, 记的是手指长短和指节。画面先给整张契纸, 再把短横拆开, 标出指尖与指节。与今天的指纹识别放在一起看可以, 中间那段「古已有之」的传承故事就免了。

时间线上五道红弧对应京城两天内的五次覆奏唐代借钱契的名字下面画着几道短横竖条旁的三道横线分别标出指尖与指节
古案清谈第 1 集《杀人之前问五遍》用红弧画覆奏, 第 5 集《古代真的用指纹吗》从整张契纸拆到指尖与指节的线。

讲案说法: 人挪了, 那张牌还跟着

《讲案说法》做了 3 集, 题材换成今天的真实判例。前两集用的是别人给我的文稿, 第 3 集由 Claude 找题, 找到最高法指导性案例 271 号《王某群危险驾驶案》。片名问的是《人在副驾驶睡觉怎么还算醉驾》, 画面里挂一张「驾驶人」牌, 座位变了, 牌仍跟着同一个人。屏上那句「骗监测、挪座睡觉」得一起留下, 单抽出「副驾驶睡觉也算醉驾」, 这个案子的条件便丢了。

这集 8 路 Codex 并行搭建约 10 分钟, 第一遍检查却还有 7 项没过, 过了的是 47 项。第 1 集《交通事故全责为什么不用赔》也改过呈现: 我听完 121.6 秒的配音版, 决定不要旁白, 改成 19 屏大字的快速版。

米白底上挂着驾驶人牌并标注身份不变
讲案说法第 3 集《人在副驾驶睡觉怎么还算醉驾》, 「驾驶人」牌随人挪动, 画面交代了骗监测、挪座睡觉的案情。

一级比一级狠: 从夜楼到玩具屋

10 月 30 日, 我嫌《讲案说法》的画面粗, 「那个车也不像车」, 接着便有了《一级比一级狠》。第一季做了 7 集, 画夜里的楼和街道。一件事逐级往上加, 共十级, 后面三四级明确进入「假如」。《从2楼扔苹果到2公里扔一栋楼》一路加到高空扔楼, 自然不是在报道真事。

车得有格栅、轮毂和反光, 楼要补上空调外机与防盗网。第 2 集《从偷一根葱到偷走故宫》又暴露出另一种毛病: 楼在晃, 地面也跟着震。我看了两轮, 定下整幅画面不要无故摆动, 被拿走的东西动就够了。

夜色中居民楼前的花盆落到银色轿车车顶
第一季第 1 集《从2楼扔苹果到2公里扔一栋楼》, 夜景里花盆砸上银色轿车, 车与楼都由代码画出。

第二季「赔多少」做完 4 集, 换成等距剖开的玩具屋, 配乐也换成芯片游戏风。《从赔500元到赔3300万亿》从楼上漏水往外推; 到《从赔一根网线到赔一条海底光缆》, 房子墙里露出线路, 右上账单卡逐级添行。后几级的数按「修一处多少钱乘以断了几处」来估, 不能当实际判赔。结尾引用的海缆案只读到律所转载, 屏上便只写维修费, 没写成法院判赔数。

等距剖开的房屋墙内有蓝色线路右上角有账单卡
第二季第 4 集《从赔一根网线到赔一条海底光缆》, 剖开的房子露出墙内线路, 账单卡在右上角加数。

片子其实是一个网页

这些画面落到文件里, 一集就是一个 index.html。JavaScript 生成 SVG 矢量图, GSAP 控制缓动; render.mjs 用 puppeteer-core 驱动不显示窗口的 Chrome, 按「帧号 ÷ 60」设定时刻, 截出 PNG, 再交给 ffmpeg 压成 H.264。主系列的成片是 1080×1920、60 fps。甲骨问雨那集共 4,128 帧; 隋朝那集 12,480 帧, 渲了 690 秒, 壁画颗粒把文件撑到 433 MB。配乐也由 Python 代码合成, 不用录音。

每帧可以重算, 也要检查重算是不是同一张。引擎在同一时刻新开页面渲两次, 最大差不超过 3/255、不同像素不超过 0.05% 才过。早期实测 GPU 栅格下的 SVG 墨线会差一到三个像素, 后来改用 CPU。想让一笔墨稳稳停在原地, 还得先管浏览器怎样画它。

原文关放在搭画面之前。Opus agent 先读出处, 给每句上屏的话列对应证据; 原文至少两种独立转录逐字对上, 只有一种的只进简介, 查不过就停下换题。法条与判例要求读到官方原文, 只见报道或转载的材料另外限定说法。随后才写分屏稿, 派各路做场景与动画。我的事是挑题、看片和定稿, Claude 主会话盯各集, 配乐和核查交给 Opus; 10 月 18 日起, Codex 接了数据与画面代码。

这套做法也有做过头的时候。到偷东西那集, 63 步检查要花约两小时, 我在 10 月 31 日改成快查一遍: 平台可能判违规的内容、字有没有被挡住, 以及封面片尾。剩下的看预览再挑。这不意味着查证也能省, 只是没有必要让一辆已经停好的车, 陪着检查脚本再停两个小时。

三周多, 算进去的还有一遍遍重读

用量统计从美东 2026 年 10 月 10 日 11:55 到 11 月 3 日 14:21, 约 24 天, 包括起步调研、改做片手册和后续选题。两家模型共调用 56,525 次, token 合计 13,018,217,636, 约 130 亿。其中新读入 31,568,779, 读缓存 12,668,032,665, 写缓存 276,705,076, 输出 41,911,116。读缓存占 97%, 这部分是在反复读入既有上下文, 不能当成写出了 130 亿 token 的新东西。

调用最多的是 Claude Opus 5.5, 46,869 次; Codex 里的 GPT-6 Astra 是 6,037 次。其余是 Claude Sonnet 5.5 的 3,175 次, GPT-6 Sol 的 343 次和 GPT-6.1 Sol 的 101 次。10 月 31 日 Codex 额度用完后, 卷二末两集、卷三和《一级比一级狠》两季都由 Opus agent 搭建。卷三第 1 集从建目录到成片约 2 小时 40 分, 原文关、画面与配乐的工夫都在这段时间里。

按这次统计的总计口径, 用 API 标价算是 $5,708.54。单看《中华故事汇》三卷, 是 $2,724.28; 系列归属按会话和任务书划, 跨系列会话未必能拆得干净, 因而只宜看个大致。

片尾卡现在停 8 秒, 列出资料。字读完, 画面落在印章或系列标识上。至于下一集画什么, 留待下一张选题短单。

写作记录:这篇由 Codex 在 2026-11-03 16:07 到 16:15(美东)写成。主线程用 GPT-6 Astra(gpt-6-astra),推理努力程度 ultra;它自己另派了 2 个子线程,一个核对事实、一个挑图看图,都沿用 GPT-6 Astra 和 ultra。这 3 个线程合计读入 2,261,093 token(其中读缓存 2,089,344),输出 23,644 token(其中推理 4,336)。素材由 Claude Code(Claude Opus 5.5)事先整理,不算在这个数里。

「那几道短横, 记的是手指长短和指节。」

BASTION NOTE · 023
Xinghan's Memory · Written by Codex
— end of cap. XXIII —