Case File 解說器
一場以證據為核心呈現的調查:誰、何地、何時,以及記錄說了什麼,並用一個紅色強調色永遠標示「這就是證據」。張力來自冷靜的克制:沒有誇張的詞語,沒有快速的剪輯。取而代之的是一個永不停止漂移的鏡頭、一個永不靜默的配樂,以及與旁白精準對應的事實呈現。
請在 cstack animated-video 技能(Remotion;請先閱讀該技能)內部執行,並保留其審核關卡、完整品質交付以及四個獨立的 QA 狀態(技術、事實、創意、所有權)。此技能增加了藝術指導、鏡頭語言、音訊配方以及一個可運作的套件。
- 可複製的工作範例:
template/(30 秒的 xz 後門示範:src/kit/casefile.tsx= 套件,src/scenes/*= 每種鏡頭類型一個場景,audio/score.py= 配樂)。截圖:../../docs/case-file-explainer/。
每個故事都需重新設計。複製方法與套件,而不是 xz 影片的鏡頭。
**清晰度優先。**我們的第二個 Case File(一個 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 幀時全部可見。
- 規模: 為何重要(影響多少網路或用戶),附有來源統計數據和腳註。
- 這是什麼: 一個管線圖,顯示漏洞存在的位置(網際網路、網頁伺服器、引擎、應用程式)。請求沿紅色路線行進,故障的階段變紅,並出現後果(例如陌生人的 shell 提示)。在螢幕上定義術語(「shell = 伺服器上的命令列」)。
- 為何發生: 根本原因以白色黏土 3D 隱喻呈現(記憶體如同積木:半完成的堆疊、釋放的幽靈積木帶有殘留指標),加上一張 3 行良性程式碼卡(
malloc/free)。 - 時間軸 + 現實檢查: 帶有日期的圖釘(最舊的受影響程式碼、首次攻擊、洩漏、修補程式),然後是一張來自主要來源的證詞卡,用以保持風險比例感。
- 保護: 一個「如何檢查」的終端機(
php -v和修復版本),一個按 VO 時間排列的編號檢查清單,以及一個關於邊緣情況的頁尾(EOL 版本,WAF 僅作為權宜之計)。 - 判決 + CTA: 一個兩行襯線判決和一個儲存/追蹤 CTA。
教育安全:從概念上解釋攻擊類別。永遠不展示 payload、請求主體、偏移量或逐步的利用方式。說明修復方法以及如何驗證。
2. 外觀(藝術聖經)
| 元素 | 規則 |
|---|---|
| 基底 | 炭色 #0d0d0e,帶有柔和的徑向亮部;始終保留暗角與精細顆粒 |
| 強調色 | 一種紅色 #ff2d2a,始終發光(三重文字陰影 + 光暈)。紅色 = 證據:路線、異常、嫌疑、關鍵字。其他皆無顏色 |
| 內容 | 單色:米白 #f2f0ea,暗淡 #8d8b86;檔案照片為黑白 |
| 字型 | 襯線標題(Source Serif 4 700);打字機主體/標籤(Courier Prime 700);數據/日期戳(IBM Plex Mono 700,字母間距大寫) |
| 照片卡 | 黑白照片,白色邊框帶有輕微撕裂邊緣,白色發光;角色行以大寫等寬字體呈現;黑色姓名標籤帶有撕裂的白色邊緣。未知人物 = 模糊卡片,文字為「NO KNOWN PHOTOGRAPHS」 |
| 系統地圖 | 深色街道地圖,由細灰色線條、一些較粗的主幹道和彎曲的高速公路組成,巨大的字母間距襯線區域浮水印(「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 px 到位;文字逐字打出。
- 紅色路線以旁白的速度繪製:箭頭在說到某個單詞時到達對應的節點。
- 每 1.5-3 秒改變一些內容,並在說出相應單詞的 2 幀範圍內完成變化。
4. 音訊配方
- 配樂永不停止。 在前 5 分鐘內沒有低於 -45 dB 的靜音。一個小調的暗環境無人機/墊音;純音樂開場(長格式約 12 秒,Reels 約 0 秒)。
- 旁白在上,音樂約低 10 dB。 根據 VO 包絡進行閃避(側鏈風格)。在 VO 間隙為 0.6 秒或更長時增強音樂,並在揭露詞之前將其淡出。
- 長格式目標:約 -16 LUFS 整合,LRA 約 6 LU。平靜且密集,而非動態。Reels 交付目標為 -14 LUFS / -1.5 dBTP。
- 音效稀疏且物理: 打字時的打字聲,卡片和標籤落下時的輕微重擊聲,路線繪製時的數據雜音,揭露時的次低音下降,判決時的玻璃叮噹聲或鈴聲。
- 聲音: 一個冷靜、低沉、平穩的旁白:簡短的直述句,事實後停頓。優先使用創作者自己的錄音;使用語音克隆需要花費審批。TTS 替代品僅限草稿使用,且必須標示。
- 範例中的
audio/score.py根據單詞時間建構整個配樂和混音。
5. 工作流程
- 事實和來源放入
NOTES.md;取得腳本和節奏表的批准(animated-video 關卡 1)。 - 錄製 VO,然後產生
words.json(Whisper 或 TTS 詞邊界);在audio/fix_words.py中修正 token 分割。 - 在
src/lib.ts中根據cue()定義幕次;使用同一個提示點以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:完整解碼、黑幀偵測、響度、聯絡表、每個轉場周圍的密集幀,以及對 VO 執行 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")和其他重複的單詞會導致問題。使用兩個單詞的短語,或傳遞nth。 -
在 3D 全景鏡頭中,單行積木會使畫面顯得空曠。添加後排(z = -1.6, -3.2, -4.8)以增加深度。
-
將相機停留在一個錯誤的位置,直到下一個節拍約 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 的地圖節點標籤會超出畫面。將其居中於節點下方。