COMFYUI 基礎 · 第 11 課
把短片拆成三張檢查圖:找出角色變形與背景漂移
用 ComfyUI 核心節點抽出首、中、尾影格,組成一張可放大檢查的 PNG。附 41 影格非 AI 測試片、工作流、實際解碼參考圖與觀察單,理解索引越界與抽查漏看的風險。
開始前,準備這些
- 已有可啟動且包含 LoadVideo、GetVideoComponents、ImageFromBatch、ImageStitch 的 ComfyUI
- 能匯入 JSON、上傳短 MP4 並下載 PNG;本課不用下載生成模型
這一課,你會學會
- 把 41 影格短片的索引 0、20、40 各存成 PNG
- 將三張同尺寸影格橫向拼成檢查圖,保留原片及設定
- 分清影格數與索引,辨認越界限制及三張抽查的盲點
本課目錄
影片跑完了,怎麼知道角色有沒有悄悄變樣?
第十課練的是讓一張圖動起來。這一課先不加模型或提示詞,而是把短片拆開看:角色的臉、配件與輪廓有沒有改變?原本固定的背景,有沒有跟著漂移?最後保存 三張獨立影格、一張首中尾檢查圖,以及自己的觀察紀錄。
本課使用 ComfyUI 核心影片節點、影格選取與拼接節點及儲存圖片節點,來源均固定在同一個版本。先下載工作流 JSON、41 影格測試 MP4及觀察單 CSV。JSON 只引用檔名,沒有內嵌影片;仍要自己上傳及選取。
首、中、尾三張只算抽查,不等於全片 QA。 這課的測試片甚至刻意藏了一個三張圖看不到的小變化,讓你練習辨認這個限制。它是本站以程式繪製、CPU 編碼的幾何動畫,不是 AI 生成影片、不是 Wan 測試結果,也不是 ComfyUI 操作錄影。第十課還沒生成,也能先用它完成這次練習。
第 1 步:選短片,先分清 VIDEO 與 IMAGE
在 Workflow → Open 匯入本課 JSON。找到 Load Video,上傳 lesson-11-test-41f.mp4,並確認選到這個檔案。工作流的檔名前綴預設放在 lesson11 下,方便與前一課分開,不會替你修改原始影片。
沿線看第一段:Load Video 的 VIDEO → Get Video Components 的 video。前者載入影片物件,後者才把它解成影格批次。接下來使用的是 images(IMAGE)輸出;不是 audio,也不是 fps。本課沒有音軌處理、影片重編碼輸出或生成模型。
這是核心節點練習,不需要額外裝影格擷取外掛。若看到缺失節點,先查看版本與官方更新說明,不要只因名稱相似就安裝陌生套件。本文核對的是固定版本原始碼,不代表已驗證所有版本的 GUI 匯入。
應該看到: Load Video 已選取測試檔,VIDEO 接到 Get Video Components,images 再分成三路。還沒按執行時,下游沒有輸出圖片是正常的。
第 2 步:41 張影格,最後一張是索引 40
三個 Get Image from Batch 節點的內部名稱都是 ImageFromBatch。依序設定:
- 首影格:batch_index 0,length 1
- 中間影格:batch_index 20,length 1
- 尾影格:batch_index 40,length 1
batch_index 是從零開始的位置;0 是第一張、20 是第 21 張、40 是第 41 張。length 是「從該位置起取幾張」,這裡全部設 1。不要把它填成影片總影格數 41,也不要把尾格填成 41。
對本課這段固定 24 fps 的影片,索引 20 的影格約從 0.833 秒開始,索引 40 約從 1.667 秒開始;整段有 41 張,總長才是約 1.708 秒。尾格開始時間與影片結束時間不是同一個數字。 這種 index ÷ fps 的換算只適用相應的固定幀率情境;手機或螢幕錄影可能是可變幀率(VFR),不能直接拿平均 fps 換成準確時間戳。
應該看到: 三個節點分別是 0/20/40,length 都是 1;本課素材實際有 41 影格,並非只靠檔名或前一課的設定猜測。
第 3 步:保存三張 PNG,再組成一張檢查圖
每個 ImageFromBatch 已接到自己的 Save Image,前綴分別是 lesson11/first、lesson11/middle、lesson11/last。最終檔名還會有計數後綴,不一定與下載的參考圖同名。
工作流另有兩個 Stitch Images(內部名稱 ImageStitch):第一個把首格當 image1、中間格當 image2;第二個把前一次的結果當 image1、尾格當 image2。兩個都設:
- direction:right,把 image2 接到右邊
- match_image_size:false,本練習的三張原本就同尺寸,不需要縮放
- spacing_width:16;spacing_color:white
第二個 Stitch Images 再接到 Save Image,前綴是 lesson11/contact-sheet。這是把像素左右拼在一張圖上,不是把三張影格合成影片。對這次 352×464 的輸入,寬度是 352×3+16×2=1088,高度仍是 464。
確認後按 Queue 執行。如果正常完成,應得到三張 352×464 的 PNG,加上一張 1088×464 的橫向檢查圖。Save Image 也可能把工作流與提示詞資訊寫入 PNG 中繼資料;分享自己的檔案前,先檢查是否含私人檔名、提示詞或其他不想公開的內容。保存到自己的資料夾,並保留 MP4 與 JSON;不要把接下來提供的本站參考圖當成自己已執行的成果。
應該看到: 檢查圖從左到右是 FRAME 000、020、040,兩道白邊各 16 像素,角色逐步向畫面右方移動。
第 4 步:用固定檢查順序,少看漏一項
先放大到能看清角色與格線,再依相同次序看三張,不要只憑「好像差不多」判斷:
- 主體輪廓與臉: 形狀、眼睛數量、嘴巴位置是否突然改變?正常的轉頭會改變外觀,不能把所有差異都當成錯誤
- 配件: 本片看黃色徽章;換成第十課的貓咪時,可看眼鏡、耳朵與邊緣。確認遮擋和消失是不是同一回事
- 背景錨點: 比較四角十字與格線的位置。固定鏡頭下,這些位置可幫助辨認背景是否漂移
- 運動方向: 本測試角色應朝畫面右方移動。角色自己的左/右和觀眾看到的畫面左/右可能不同,紀錄時寫清楚
在觀察單中記錄檔名、實際影格數、抽查索引與看到的現象。還沒自己跑過工作流的欄位保留 not_run;沒量到的內容留白,不要把預設值抄到 actual 欄位。
應該看到: 你能指出「哪一格、哪一個部位、發生什麼」,而不是只填「好看/不好看」。
第 5 步:找出三張抽查漏掉的徽章
現在完整播放原始測試片,注意黃色徽章:它在 索引 10–12(第 11–13 張) 被程式刻意拿掉,索引 13 又出現。首、中、尾的 0/20/40 都沒有抽到這段,所以即使三張看起來正常,也不能寫「全片沒問題」。這個消失是教學設計,不是 AI 模型失敗案例。
保留原本三張的結果,再把中間那個 ImageFromBatch 暫改成 batch_index 10、length 1;中間 Save Image 的前綴改為 lesson11/inspect-010,檢查圖前綴改為 lesson11/check-0-10-40,避免混淆。重新執行後,對照索引 10 的徽章位置;若要定位持續範圍,再逐一檢查 9、10、11、12、13,不要一次更動其他參數。
短暫變化可能在正常速度下不容易注意;播放只能補充抽查,不能保證每個瑕疵都被發現。對重要成片,仍需檢查完整時間範圍,必要時逐格查看。這套入門流程的作用是整理可比較的證據,不是自動判定影片品質。
應該看到: 索引 10 的徽章確實不見,並在觀察單註明「0/20/40 未覆蓋的區間仍需檢查」。練習結束可把中間索引與檔名前綴改回原設定,或另外保存一份 JSON。
第 6 步:換成第十課 A/B,先確認真的有 41 影格
先保存已完成的測試素材練習,再開新一份 JSON。上傳自己的第十課 A 片;如果還沒有生成,就停在測試素材練習,不需要為了這堂課付費生成。
0/20/40 只在實際有 41 影格時才是本課的首/中/尾。 第十課設定 length 41 是設定值,不足以證明輸出檔就有 41 影格。先以能顯示或實際計數影格的媒體工具確認;本課README附 FFprobe 的可選查核命令。工具沒有提供影格數時,不要用畫面上四捨五入後的「1.7 秒」反推。
若影片是 N 張且 N≥1,可先選 0、向下取整的 (N−1)÷2、N−1;這表示抽查影格序列的首、中、尾,不一定是時間上的正中點。VFR 影片若需要準確時間定位,應查看各影格時間戳或使用能處理該時間軸的工具,本課不提供通用換算。
另存 A 的三張圖與檢查圖後,再換 B,使用相同抽查位置及判讀順序,檔名前綴區分 A/B。觀看原片時也把兩支都看完。角色有轉頭時,先分辨正常姿勢改變與真正的配件變形;不要因單張比較就推論哪個提示詞「一定比較穩」。
應該看到: A/B 各有清楚標名的檔案、實際影格數和觀察紀錄;沒生成的那組仍標記 not_run。
常見卡點:先查索引,再查容量
三個節點都跑完,為什麼後兩張一模一樣?
先確認影片是不是太短、選錯檔,或中間/尾端索引超出範圍。已核對的 ImageFromBatch 會把超範圍的索引限制在可用範圍內(clamp),不一定報錯。例如只有 10 張,填 20 和 40 都可能取到最後一張。成功輸出不代表索引正確。影片本身靜止或重複影格也可能造成相同畫面,不能只憑相同就判定節點有錯。
只存三張,為什麼還可能占很多記憶體?
Get Video Components 會先取得解碼影格批次,再交給 ImageFromBatch 選取。不是只解碼三張。本課小素材共約 670 萬個像素、約 2009 萬個 RGB 通道數值;若以 float32 表示,單這一份像素張量就約 76.6 MiB,實際還有解碼、複本與拼接等開銷。這是容量估算,不是量測峰值或最低配備。沒有生成模型,也不等於零記憶體需求。
先用本課約 1.7 秒小檔;不要直接丟入長片或高解析度整段影片。設備吃緊時先停止,改用已有工具另存短片副本;不要為了試一次就加大批次或下載更多模型。租用主機的運算與儲存費仍依服務方案另計,本課沒有代為開通或付款。
拼接圖的角色被拉長,或尺寸和預期不同?
先確認三路來自同一段影片、各只取一張,以及 direction、match_image_size 與間隔設定。match_image_size=false 不代表所有不同尺寸圖都不處理;已核對的節點在水平拼接遇到高度不同時會補邊。本課同尺寸影格不需要這項補邊。先回到原始素材與設定,再看是不是比較到另一輪輸出。
需要對照雜湊完全相同嗎?
不用。本站雜湊是讓人查核下載素材是否被更動;你的 ComfyUI 解碼、色彩轉換、PNG 中繼資料或版本可能不同。先比較畫面編號、尺寸、排序與實際可見內容。這課沒有承諾跨環境逐位元一致,也沒有宣稱已執行 ComfyUI GUI 或 GPU 推論。
完成前的檢查單
- 已下載測試 MP4 與 JSON,並在 Load Video 自己選到正確檔案
- 三路是 images → ImageFromBatch,索引 0/20/40,length 都為 1
- 已保存三張個別 PNG 與 1088×464 的檢查圖,左右順序與 FRAME 編號正確
- 已找到索引 10 的刻意徽章消失,知道三張抽查不等於全片 QA
- 已記錄未檢查區間;換影片時先確認實際影格數,沒有把 VFR 平均 fps 當精準時間軸
- 已保留原片、JSON 與自己的觀察單,沒有把本站參考圖當成自己實跑結果
下載與來源
- 工作流 JSON/非 AI 測試 MP4/觀察單
- README 與查核方法/素材量測資訊/素材來源與 SHA256/原創素材使用說明
- 固定版本 LoadVideo、GetVideoComponents
- 固定版本 ImageFromBatch、ImageStitch
- 固定版本 SaveImage
本課正文、圖解、幾何測試素材、參考拼接與工作流配置為原創教材;素材使用說明見下載檔。ComfyUI 軟體及第三方工具仍依各自授權使用。本文驗證的是來源、靜態接線與本站測試素材的 CPU 編解碼;沒有將工作流匯入 ComfyUI GUI、沒有執行 ComfyUI 工作流,也沒有測試 GPU 速度或容量。