COMFYUI 基礎 · 第 11 課

把短片拆成三張檢查圖:找出角色變形與背景漂移

用 ComfyUI 核心節點抽出首、中、尾影格,組成一張可放大檢查的 PNG。附 41 影格非 AI 測試片、工作流、實際解碼參考圖與觀察單,理解索引越界與抽查漏看的風險。

  • 入門實作
  • 約 25–35 分鐘,不含軟體準備時間 · 閱讀與練習
  • 發布

開始前,準備這些

  • 已有可啟動且包含 LoadVideo、GetVideoComponents、ImageFromBatch、ImageStitch 的 ComfyUI
  • 能匯入 JSON、上傳短 MP4 並下載 PNG;本課不用下載生成模型

這一課,你會學會

  • 把 41 影格短片的索引 0、20、40 各存成 PNG
  • 將三張同尺寸影格橫向拼成檢查圖,保留原片及設定
  • 分清影格數與索引,辨認越界限制及三張抽查的盲點
本課目錄

影片跑完了,怎麼知道角色有沒有悄悄變樣?

第十課練的是讓一張圖動起來。這一課先不加模型或提示詞,而是把短片拆開看:角色的臉、配件與輪廓有沒有改變?原本固定的背景,有沒有跟著漂移?最後保存 三張獨立影格、一張首中尾檢查圖,以及自己的觀察紀錄。

本課使用 ComfyUI 核心影片節點、影格選取與拼接節點及儲存圖片節點,來源均固定在同一個版本。先下載工作流 JSON、41 影格測試 MP4及觀察單 CSV。JSON 只引用檔名,沒有內嵌影片;仍要自己上傳及選取。

首、中、尾三張只算抽查,不等於全片 QA。 這課的測試片甚至刻意藏了一個三張圖看不到的小變化,讓你練習辨認這個限制。它是本站以程式繪製、CPU 編碼的幾何動畫,不是 AI 生成影片、不是 Wan 測試結果,也不是 ComfyUI 操作錄影。第十課還沒生成,也能先用它完成這次練習。

本站原創非 AI 測試片:352×464、41 影格、固定 24 fps、無聲,片長約 1.708 秒。綠色幾何角色向畫面右方移動,背景格線與十字保持固定。影片內燒錄的 FRAME 編號從 000 到 040。下載原始 MP4;已量測的素材資訊。

第 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 再分成三路。還沒按執行時,下游沒有輸出圖片是正常的。

原創接線示意:Load Video 經 Get Video Components 取得影格批次,再分別取索引0、20、40,保存三張PNG並用兩個Stitch Images橫向拼接
本站原創操作示意,不是 ComfyUI 介面截圖。實際 JSON 包含 11 個執行節點與 1 個說明節點;三路選取共用同一個解碼來源。

第 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 影格,並非只靠檔名或前一課的設定猜測。

41影格的零起算索引尺:0、20、40為抽查點,10至12為故意設計的未抽查異常區間,並區分影片總長與尾影格起始時間
本站原創索引示意。索引是位置,影格數是總量;圖上標出的時間只解釋本課固定幀率素材,不是任意影片的時間定位方法。

第 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 像素,角色逐步向畫面右方移動。

非AI測試MP4的實際解碼首中尾影格CPU拼接參考:由左至右編號000、020、040,角色向右移動,背景固定,兩處白色間隔各16像素
實際 MP4 解碼後的參考圖,本站以 CPU 程式把 0/20/40 的原尺寸像素拼接,沒有修圖;不是 ComfyUI 工作流執行結果。原始解碼首格、中間格、尾格均保留解碼輸出的 PNG 位元組。不同解碼器、色彩處理或 PNG 中繼資料可能讓你的檔案雜湊不同,不要求與本站 PNG 雜湊相同。

第 4 步:用固定檢查順序,少看漏一項

先放大到能看清角色與格線,再依相同次序看三張,不要只憑「好像差不多」判斷:

  1. 主體輪廓與臉: 形狀、眼睛數量、嘴巴位置是否突然改變?正常的轉頭會改變外觀,不能把所有差異都當成錯誤
  2. 配件: 本片看黃色徽章;換成第十課的貓咪時,可看眼鏡、耳朵與邊緣。確認遮擋和消失是不是同一回事
  3. 背景錨點: 比較四角十字與格線的位置。固定鏡頭下,這些位置可幫助辨認背景是否漂移
  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,不要一次更動其他參數。

實際解碼的索引0、10與20比較教學圖,索引10的黃色徽章刻意消失,橘框標出檢查位置,說明只看首中尾會漏掉短暫變化
本站原創教學圖:使用測試片實際解碼影格,再縮小排版並加檢查框。沒有把框加回原始解碼檔;索引 10 原尺寸 PNG另行保留。這不是模型生成前後比較,也不是 ComfyUI 截圖。

短暫變化可能在正常速度下不容易注意;播放只能補充抽查,不能保證每個瑕疵都被發現。對重要成片,仍需檢查完整時間範圍,必要時逐格查看。這套入門流程的作用是整理可比較的證據,不是自動判定影片品質。

應該看到: 索引 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 與自己的觀察單,沒有把本站參考圖當成自己實跑結果

下載與來源

本課正文、圖解、幾何測試素材、參考拼接與工作流配置為原創教材;素材使用說明見下載檔。ComfyUI 軟體及第三方工具仍依各自授權使用。本文驗證的是來源、靜態接線與本站測試素材的 CPU 編解碼;沒有將工作流匯入 ComfyUI GUI、沒有執行 ComfyUI 工作流,也沒有測試 GPU 速度或容量。