案件档案解说器
一个以证据形式讲述的调查故事:谁、在哪、何时、以及记录说了什么,只有一个红色强调色,始终表示“这就是证据”。紧张感来源于冷静的克制:没有夸张的词语,没有快速剪辑。取而代之的是,一个永不停止漂移的镜头,一个永不静音的配乐,以及准确落在旁白所述单词上的事实。
在 cstack animated-video 技能(Remotion;请先阅读它)内部运行,并保留其审批节点、全质量交付和四个独立的 QA 状态(技术、事实、创意、所有者验收)。此技能添加了艺术指导、镜头词汇表、音频配方和一个可工作的工具包。
- 可复制的工作示例:
template/(30 秒的 xz 后门演示:src/kit/casefile.tsx= 工具包,src/scenes/*= 每个镜头类型一个场景,audio/score.py= 配乐)。截图:../../docs/case-file-explainer/。
为每个故事重新设计。复制方法和工具包,而不是 xz 影片的镜头。
清晰度优先。 我们的第二个案件档案(一个 PHP 远程代码执行故事)看起来很精致,但很难理解。对于任何解释某物如何工作的视频,请先用 decode-explainer 技能(概念阶梯、先做玩具模型、屏幕上有图例、每屏一个想法、术语定义后才使用、字号 ≥ 44 px)进行规划,然后仅将此技能用于证据室外观和调查节奏。
1. 故事:调查主线
只有当赌注是真实的并且每个主张都有来源时,调查故事才有效。
- 钩子(0-3 秒): 异常,以一个带数字的事实陈述(“他的登录慢了半秒”)。第 0 帧是封面:一个衬线标题加上证据对象,永远不是黑色。
- 追踪(中间部分): 跟随证据穿越地点和人物。每 2-4 秒一个节拍:日期印章,然后是人物卡,然后是地图上的路线,最后是找到的对象。
- 揭示: 掉出的时刻。音乐减弱,一件红色的东西亮起。
- 记录: 一张引用真实主要来源(电子邮件、证词、报告)的证词卡,下方注明作者和日期,以及一个脚注编号。切勿编造引语;将重建内容标记为“重建”。
- 结尾: 一个衬线标题,将钩子重述为裁决(“半秒。”),一条红色规则和案件编号。保持住,然后有目的地淡出。仅在创作者想要时才添加口头评论 CTA;如果有 CTA,则需完整说出。
- 短格式:30-45 秒,4-6 个镜头。长格式(YouTube):带有“Chapter I”衬线标题卡的章节。
- 将每个事实放在
NOTES.md中,并附上其来源和验证状态,然后再将其放到屏幕上。事实是影片的关卡。
教育变体(安全事件):此格式的默认选项
使其具有教育意义:帮助人们理解它是什么、为什么会发生以及他们可以做些什么来保护自己。主线(约 55-60 秒,6 个镜头):
- 封面/钩子: 日期印章、衬线事件名称、严重性印章和 CVE 标签,所有这些在第 0 帧可见。
- 规模: 为什么重要(影响多少网络或多少用户),附有来源统计和脚注。
- 它是什么: 一个管道图,展示漏洞所在的位置(互联网、Web 服务器、引擎、应用程序)。请求沿着红色路线行进,出现故障的阶段变红,并显示后果(例如,陌生人的 Shell 提示符)。在屏幕上定义术语(“shell = 你服务器上的命令行”)。
- 为什么会发生: 根本原因作为白色粘土 3D 隐喻(内存如块:半建好的堆栈、带有幸存指针的释放幽灵块),加上一个 3 行良性代码卡(
malloc/free)。 - 时间线 + 现实检查: 带日期的大头针(最古老的影响代码、首次攻击、泄露、补丁),然后是一张来自主要来源的证词卡,使风险保持适度。
- 保护: 一个“如何检查”终端(
php -v和修复版本),一个编号的检查清单,与配音同步,以及一个用于边缘情况的页脚(EOL 版本、仅作为权宜之计的 WAF)。 - 裁决 + CTA: 一个两行的衬线裁决和一个保存/关注 CTA。
教育安全:概念性地解释攻击类别。切勿展示载荷、请求体、偏移量或逐步利用过程。命名修复方法以及如何验证它。
2. 外观(艺术圣经)
| 元素 | 规则 |
|---|---|
| 背景 | 炭色 #0d0d0e,带有柔和的径向提亮;始终开启渐晕和细微颗粒 |
| 强调色 | 一种红色 #ff2d2a,始终发光(三重文字阴影 + 泛光)。红色 = 证据:路线、异常、嫌疑对象、关键词。没有其他东西被着色 |
| 内容 | 单色:米白色 #f2f0ea,暗淡 #8d8b86;档案照片为黑白 |
| 字体 | 衬线标题(Source Serif 4 700);打字机正文/标签(Courier Prime 700);数据/日期印章(IBM Plex Mono 700,字母间距大写) |
| 照片卡 | 黑白照片,白色边框,边缘略微撕裂,白色发光;角色行使用大写等宽字体;黑色姓名标签带有撕裂的白色边缘。未知人物 = 模糊卡片,带有“无已知照片” |
| 系统地图 | 由细灰色线条、几条粗主干线和弯曲高速公路组成的暗色街道地图,巨大的字母间距衬线区域水印(“D E B I A N”);路径以发光红色绘制,带有白色头部;大头针是带有指针的姓名标签 |
| 微缩模型 | 白色粘土 3D 模型(three.js):浅灰色地面上的哑光白色方块,柔和的阴影,雾。当它被点燃时,唯一的红色物体照亮其周围 |
| 引语卡 | 大号衬线引号,白色规则,等宽字体输入的文字,关键词为红色,下方有来源行和日期 |
| 日期印章 | 红色发光时钟 + “FRIDAY, MARCH 29, 2024” + 一行上下文 |
| 脚注 | 屏幕上显示有来源的主张时,在右上角用暗淡等宽字体显示 [n] |
9:16 的安全区域:将内容保持在 x 60-960 和 y 240-1440。字幕位于 y 约 1470,使用等宽字体放在深色标签上,关键词为红色。切勿将其放在面部上方。
3. 运动
- 极少硬切。 此风格的长纪录片在十分钟内只剪辑几次。镜头通过内容连接:潜入红色印章,它变成了地图的起始节点;潜入地图的红色节点,它变成了红色的 3D 方块。
- 镜头永不停止: 缓慢推近(每个镜头 5-8%),拉远以揭示上下文,以及沿路线平移。每种运动都缓入缓出;在对数空间中缩放。
- 卡片以阻尼弹簧弹出(缩放从 0.82 到 1);标签向下掉落 18 像素到位;文字逐字打出。
- 红色路线以旁白的速度绘制:头部在每个单词处到达相应节点。
- 每 1.5-3 秒改变一些内容,每次命中在单词后 2 帧内落地。
4. 音频配方
- 配乐永不停止。 前 5 分钟内无低于 -45 dB 的静音。小调的低保真环境无人机/垫音;仅音乐开场(长格式约 12 秒,Reels 约 0 秒)。
- 旁白在前,音乐低约 10 dB。 从配音包络中闪避(侧链式)。在配音间隙 0.6 秒或更长时增强音乐,并在揭示词之前将其淡出。
- 长格式目标:约 -16 LUFS 集成,LRA 约 6 LU。平静而密集,而非动态。Reels 交付目标:-14 LUFS / -1.5 dBTP。
- SFX 稀疏且物理: 打字音对应打字文本,卡片和标签落地时的轻柔砰声,路线绘制时的数据噪音,揭示时的次低音,裁决时的玻璃 ping 声或铃声。
- 声音: 一个平静、低沉、克制的旁白:短的陈述句,事实后停顿。首先使用创作者自己的录音;语音克隆需要花费审批。TTS 替身仅用于草稿,并且必须标明。
- 示例中的
audio/score.py根据单词时间构建整个配乐和混音。
5. 流程
- 事实和来源放入
NOTES.md;获取脚本和节拍表批准(animated-video 停止点 1)。 - 配音,然后是
words.json(Whisper 或 TTS 单词边界);在audio/fix_words.py中修复分词问题。 - 从
cue()在src/lib.ts中定义幕;使用相同的提示用audio/score.py构建配乐。 - 复制
src/kit/casefile.tsx和场景模式;使用snap.sh渲染关键帧板(停止点 2:风格帧/关键帧)。 - 以
--scale=1.3333333333333333(1440x2560)渲染,然后进行两遍 loudnorm 至 -14 LUFS,H.264 High,CRF 14,maxrate 24M,yuv420p 有限范围,BT.709 标签,faststart。 - QA:完整解码、blackdetect、响度、联系表、每个转换周围的密集帧,以及配音的 Whisper。分别报告 4 个 QA 状态。
构建第一个时发现的问题
- 整个脚本的 edge-tts 运行速度缓慢(180 个单词用时 88 秒)。使用
scripts/tts_lines.py(每行一次 TTS 调用,控制间隙,“|”开始一个部分),然后使用scripts/squeeze.py(缩短超过 0.45 秒的暂停并重新映射单词时间):68.6 秒变为 58.5 秒。 cue("Before")、cue("PHP")和其他重复单词会抛出问题。使用 2 单词短语,或传递nth。- 在 3D 广角镜头中,单行方块会使帧内空白。添加后行(z = -1.6, -3.2, -4.8)以增加深度。
- 将镜头保持在一个 bug 的位置上,直到下一个节拍前约 6 帧。过早移动会使主体在句子中间离开画面。
- 覆盖卡片必须在屏幕上至少显示 1.5 秒。从较早的单词开始,而不是最后一个。
- 通过共享浏览器,导航可能会落在当前所在的任何选项卡中,包括用户自己的选项卡。首先选择自己的选项卡。
- edge-tts 返回“March 2024”作为一个单词边界。在
chunk()之前拆分它,否则字幕会出错。 cue("It")和其他重复单词需要nth,或更长的短语(cue("It had"))。- 发光的红色立方体加上泛光效果会变成橙/黄色。将自发光保持在 0.5 或以下,基色为深色(
#b8120c),场景泛光为 0.5。 - 在竖屏 3D 中,塔必须位于卡片带(y 300-750)和字幕(y 1470)之间。对于一个 6 单位高的模型,将相机向后拉约 23 个单位。
- 终端上的 HTML 缩放会裁剪其边缘,超过约 1.12 倍。缩放到读数,而不是角落。
- 宽度超过约 300 px 的地图节点标签会跑出画面。将其居中于节点下方。