film-qa
你檢查的是畫面與數字,而非意圖。PASS 需要證據:你開啟過的檔案路徑,或是你測量過的數值。
其他任何情況都應標示為 NOT CHECKED: <原因>。對於你沒有看過或測量過的東西,切勿寫 PASS。
路徑(相對於 launch-video/,或在 launchfilm 儲存庫中的 studio/):
- 影片原始檔:
films/<slug>/(film.json、STORYBOARD.md、BRIEF.md) - 渲染輸出:
out/<slug>/ - QA:
qa/<slug>/(CLI 會寫入report.md;你在它旁邊寫入QA.md)
確切的 CLI 標誌:npx launchfilm <cmd> --help
已經測試過語法的命令:references/commands.md
步驟
- 自動化階段。
npx launchfilm qa <slug>→ 先讀取qa/<slug>/report.md(內含聯絡表單、ffprobe 資訊、音量、自動化檢查)。將其中的測量數值複製到QA.md作為證據;不要重新測量它已測量過的項目。 - 聯絡表單。 開啟報告中列出的每一份聯絡表單(或執行
npx launchfilm sheet <slug>)。讀取每一個儲存格。在QA.md中列出你開啟的檔案(T12 證據)。 - 靜止幀。 針對影片發布的每個預設,在以下時間點執行
npx launchfilm still <slug> <t> --preset <id>:每個鏡頭邊界 + 6 幀、每個文字出現點 + 停留時間/2、第 0 幀、最後一幀,以及凍結或黑幀掃描標記的每個間隔。另外,在主要文字幀上以--scale 0.25(16:9 為 480×270)產生一張靜止幀:作為 X 時間軸預覽。讀取每一張 PNG。 - 測量 報告未涵蓋的項目:音量、真實峰值、黑幀、凍結間隔、剪輯時間相對節拍、文字背景對比度、安全區域、字幕行長度。命令請見 references/commands.md。
- 阻擋檢查 下方 T1–T12,然後是交付檢查 D1–D16。每一個都須標示
PASS/FAIL/NOT CHECKED,並附上證據與規則。 - 撰寫
qa/<slug>/QA.md,使用 references/qa-template.md 作為範本。 - 修正迴圈。 任何
FAIL:將發現的問題連同幀數交給scene-build或sound,僅重新渲染受影響的範圍(npx remotion render … --frames=<a>-<b>或 CLI 等效命令),然後重新檢查那些項目。最多兩個迴圈;然後將剩餘的FAIL連同靜止幀報告給使用者。切勿在沒有新證據的情況下將FAIL降級為PASS。
阻擋檢查:12 項跡象 (craft/00)
| 編號 | 通過條件 | 證據 |
|---|---|---|
| T1 靜止 | 沒有 ≥ 0.6 秒的凍結間隔,除了結尾卡片穩定(≤ 3 秒);每個標記的間隔都需透過其開始和結束的靜止幀驗證,顯示有漂移或動作 | freezedetect 輸出 + 每個間隔 2 張靜止幀 |
| T2 預設動畫 | films/<slug> 中 grep G1 (scene-build) 結果為空;沒有 CSS 轉場 | grep 輸出 |
| T3 同時出現 | 每組 ≥ 3 個同級元素必須交錯進入(聯絡表單儲存格中可見部分狀態,或程式碼中間隔 ≥ 1 幀);群組進入時間 ≤ 24 幀 | 聯絡表單儲存格引用或程式碼行 |
| T4 單一速度 | 長度 > 20 秒的影片必須有 ≥ 1 個節奏中斷(靜音、衝擊切黑、色板翻轉、停留時間 ≥ 中位數鏡頭時間的 2 倍);啟動模式:每個剪輯點必須在節拍的 ±2 幀內 | film.json 中的邊界 vs beats.json;偵測到的剪輯點 |
| T5 音效 | film.json 中的每個視覺事件必須有音效,或被語音/音樂覆蓋;有語音時音樂須閃避;在計畫中靜音的地方必須完全靜音 | 有/無聲音的事件數量;語音視窗與純音樂視窗的音量比較 |
| T6 文字作為標籤 | 當文字是訊息主體時,主要文字高度 ≥ 畫面高度的 8%(陳述句為 10%);每個文字停留時間 ≥ 0.2 × (字數 + 1) 秒;最多 3 行;字幕最多 2 行 | 每個項目的表格 |
| T7 平面外觀 | 啟動模式:必須有顆粒與暗角;每個章節一個命名處理;產品模式:必須有細線、柔和陰影;mp4 靜止幀中最暗的漸層無色塊 | grep + mp4 靜止幀 |
| T8 網頁佈局 | 每張靜止幀只有一個焦點;沒有段落超過 3 行;沒有項目符號;UI 元素僅在該元素是重點時出現 | 靜止幀 |
| T9 通用素材 | films/<slug>/footage/SOURCES.md 中的每個影片素材都需有來源與授權;素材需經過調色且剪輯長度 ≤ 1.5 秒 | SOURCES.md + 靜止幀 |
| T10 裝飾性轉場 | 轉場必須屬於詞彙表;非剪輯轉場每 5 秒不超過 1 次;blur-dissolve 不超過 12 幀 | film.json |
| T11 模板先於故事 | STORYBOARD.md 必須有 approved:;第 0 幀不能是黑色,且與 0.5 秒時的靜止幀不同;1.5 秒內(x, li)/ 1 秒內(reel)必須清楚呈現產品類別;問題之後必須有回報;結尾必須有 ≥ 2 秒的品牌表面平靜畫面 | 第 0、0.5、1.5 秒及最後 2 秒的靜止幀 |
| T12 從未查看 | 此次 QA:必須列出所有已開啟的聯絡表單與靜止幀 | QA.md 中的檔案列表 |
T1–T12 中任何一項 FAIL 都會阻擋交付與封裝的渲染。
交付檢查 (每個預設;編號 = craft/08#delivery-checks)
數值來自 harness.config.json 的 presets,否則來自 craft/10#presets。請使用這些確切的編號;craft/08 與 QA.md 共用它們。
| 編號 | 通過條件 |
|---|---|
| D1 | 影片編碼 h264,設定檔 High(Remotion 的 ffprobe 輸出 100),像素格式 yuv420p,容器 mp4 |
| D2 | 寬 × 高完全符合預設值 |
| D3 | 固定幀率 = 合成幀率(r_frame_rate = avg_frame_rate) |
| D4 | 時長 = film.json ±1 幀,且在預設的長度範圍內(x-16x9 ≤ 140 秒,reel-9x16 ≤ 90 秒) |
| D5 | 音訊編碼 aac LC(Remotion 的 ffprobe 輸出 1),48000 Hz,2 聲道,~192 kbps;hero-loop:無音訊流 |
| D6 | 整合音量 −14 ±1 LUFS;真實峰值 ≤ −1.5 dBTP;語音音量在可測量處為 −16…−14 LUFS |
| D7 | moov 在 mdat 之前(faststart) |
| D8 | 該預設的第 0 幀海報存在,尺寸相同,非黑色(YAVG > 20),顯示鉤子 |
| D9 | SRT 檔案與每個有語音的預設渲染檔放在一起;措辭與字幕相同;格式 HH:MM:SS,mmm;每條 ≤ 2 行;每條 ≥ 0.8 秒;時間 ±2 幀 |
| D10 | 重要內容(字幕、文字、標誌、正在使用的 UI)不可超出預設的安全區域(覆蓋靜止幀檢查) |
| D11 | 每個有語音的預設都須內嵌字幕(hero-loop:無;ph-16x9 依其設定);≤ 2 行;每行 ≤ 42 個字元(16:9),≤ 32 個字元(4:5、1:1、9:16);不可覆蓋在變化中的元素上;字幕與文字在背景上的對比度 ≥ 4.5:1,重點色在背景上 ≥ 3:1;在寬度為 480 像素(16:9)和 360 像素(4:5、9:16)的靜止幀上須可讀 |
| D12 | 凍結與黑幀列表僅與設計的停留和黑畫面節拍相符(列在 film.json 或 STORYBOARD 中) |
| D13 | BT.709 標籤或未標籤的 HD;mp4 靜止幀中最暗的漸層,相較於 PNG 無新的色塊 |
| D14 | 檔案大小低於上限:x ≤ 512 MB,README hero ≤ 10 MB |
| D15 | out/<slug>/credits.txt 列出每個 CC BY 素材及其信用行;films/<slug>/footage/SOURCES.md 完整無缺 |
| D16 | 僅限 hero-loop:第 N 幀等於第 0 幀;一個循環 3 次的檔案在接縫處不應有跳動 |
文字在時間點的可讀性
針對 film.json 中的每個文字項目(陳述句、字幕、標籤、語音指出的 UI 文字):字數、入/出幀、停留時間 = (出 − 入) / fps、必要時間 = 0.2 × (字數 + 1) 秒。同時檢查 480×270 的靜止幀,確認主要行仍然可讀(字母可分辨)。在 QA.md 中每個項目一行。
報告規則
- 每個
PASS都須引用證據:qa/<slug>/stills/x-16x9-12.30.png、I = −14.2 LUFS、grep G1: 0 lines。 - 測量數值需保留單位與產生該數值的工具(
system ffmpeg 8.1 ebur128或remotion ffmpeg loudnorm)。Remotion 內建的 ffmpeg 缺少ebur128、signalstats、freezedetect、tile、drawbox與 rawvideo 輸出:請使用系統的 ffmpeg 來進行這些操作並註明;如果系統沒有 ffmpeg,則這些項目標示為NOT CHECKED。 FAIL必須指明幀範圍、違反的規則(craft/NN#anchor或T#/D#)以及建議的修正方法。- 摘要區塊只有在 T1–T12 與 D1–D16 全部為
PASS時(D16 僅限 hero-loop)才顯示 READY(NOT CHECKED視為未準備就緒,並附上原因)。