Communitygithub.com

PrankMedic/video-phu-hinh

為口說影片添加疊加圖像、B-roll 圖形,並支援人臉縮小框、計數器、清單、比較、步驟、長條圖及卡拉 OK 字幕。

video-phu-hinh 是什麼?

此技能專為需要保留說話者聲音與存在感,但優先顯示縮小畫面、文字與圖形的影片製作場景而設計。它基於 Remotion 框架,支援將口說內容轉換為視覺化 beats,涵蓋全螢幕(full)、卡片(card)及疊加(over)等多種模式,並自動處理畫面轉場與字幕。技能會分析原始影片,提取字詞時間戳記,並根據設定的 beats 動態切換說話者畫面大小與圖形元素。它特別強調資料驗證流程:執行踏點檢查(face detection、時長限制、模式衝突)以確保輸出品質,最後產出符合 LUFS 標準的影片。支援的平台包括命令列與 CI/CD 整合,依賴 Python 腳本與 Remotion 渲染引擎。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PrankMedic/NoleXSapien/tree/main/skills/video-phu-hinh

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

影片疊加圖形(Video Phủ Hình)

適用場景:需要保留說話者的聲音與存在感,但優先顯示縮小畫面、文字與圖形時。請先閱讀 CLAUDE.md,檢視內容與來源,建議格式後等待選定(若尚未選擇)。不處理含有可辨識資料的媒體;應暫停該部分,由負責人先行移除。不得自行發佈、送出、提交或推送。

  1. 執行 python3 scripts/chuan_bi_giong.py <video> Output/video/<slug>。閱讀報告並聆聽原始聲音;必須使用 scripts/tim_loi_noi.py 偵測口誤後再進行剪輯(聲音準備腳本已呼叫,可單獨執行修正)。不得僅依據已簡化的字幕推斷所有口誤。
  2. 將原始影片標準化為 9:16 直立畫布,採用 letterbox 方式,不裁切面部特寫。在此畫布上測量臉部:{x,y,radius} 標準化為 0–1 區間,radius 以寬度為基準,預設值 0.14。不同比例的來源需先轉換;若臉部移動位置則重新檢查。不啟用自動臉部追蹤;使用涵蓋所有臉部位置的區域框,或於構圖變更時拆分 composition。僅使用已根據專案規則移除可辨識資料的影片。
  3. 將 {w,s,e} 格式的字詞轉為 {text,startMs,endMs},其中毫秒 = 秒 × 1000。保留原始字詞與原始 segment;音訊依循相同 segment 從影片中剪出。不得同時使用預先剪好的聲音與原始字詞。媒體檔案放置於 public 目錄,使用相對路徑。audio 可為空值(因為 PhuHinh 使用影片內的聲音);music、musicVolume 為選用,音樂不屬於可伸縮的影片圖層。
  4. 建立 beats {atPhrase,nth?,untilPhrase,untilNth?,mode,content,source?,box?}。最後一個短語結束於最後一個字詞的 endMs;nth 從 0 開始計數。beats 不可重疊,時間點必須遞增。空隙自動回到卡片模式;建議覆蓋所有口語內容以清楚檢視節奏。full:說話者恰好填滿畫面,contain 模式,不裁切特寫,最多 8 秒(含連續多個 full beat);card:說話者縮小至左上角,圖形顯示於下方;over:圖形半透明,box 需避開臉部(包括畫面正在轉換時);cover:以背景與圖形完全覆蓋,但影片聲音繼續播放。畫面轉換連續進行 650 ms。
  5. Content 的 kind 可為 word、number、list、compare、steps、bars 和 text。number 需附加 value 與 spoken(該數字的語音短語,例如 value 12, spoken “十二”)。spokenNth 為選用,用於計數同一 beat 內數字短語出現的次數,從 0 開始;項目的 nth 仍依據整個剪輯後的口語內容。數字值會逐漸增加,僅在說完數字短語時才達到目標值。多項類型使用 items:[{text,atPhrase,nth?,value?,spoken?}],每個項目僅在提及時顯示;bars 使用 value,compare 分欄,steps 使用箭頭。spoken 為手動對應,需要人員驗證其與 value 的意義;腳本無法理解以文字書寫的數字語意。不得在標題或項目標籤中預先放置數字;由 value 負責顯示數字。每個項目保持簡短,避免超出區域。主文字至少 72 px。
  6. Box {x,y,width,height} 以 1080×1920 px 為單位計算,x 限制在 64–1016,y 限制在 100–1260;預設 card 位於 y620,over 位於 y900。字幕位於 y1330,範圍 1300–1520。字幕下方的來源必須包含作者/組織、年份、連結及存取日期(針對醫療資訊);未經查證的事實必須標註「待審核」。如需 AI 語音標籤,使用 aiVoice:true。
  7. 撰寫包含 props 的 JSON,執行 python3 scripts/kiem_phu_hinh.py <du-lieu.json>;必須修正未偵測到的時間點、過長的 full beat、遮擋臉部的 over beat,以及未出現在口語中的數字。回傳碼 0 表示資料檢查通過,1 表示檢查錯誤,2 表示讀取錯誤。臉部檢查工具在畫面穩定後進行,並在每次畫面轉換後的 650 ms 內以 30 fps 取樣;component 在渲染期間會額外檢查每一幀。應開啟實際幀以檢查臉部移動與文字溢出。接著在 studio/data 中建立 TS 檔案,export default {id:'VideoPhu',format:'PhuHinh',props:...}。請參考 mau-moi.ts;MauPhuHinh 為含佔位影片的靜音範例,非已審核影片。
  8. 執行 cd remotion && npx --no-install tsc --noEmit;使用 npx --no-install remotion render src/index.ts VideoPhu out/nhap.mp4 --codec h264 進行草稿渲染。檢視所有圖形類型、模式轉換幀、每個 segment 的開頭/結尾,聆聽 cover 模式下的聲音,檢查數字是否在正確時機達到目標值,以及清單是否在口語之前顯示。必要時對最終版本進行口語偵測,並重新聆聽接合點。
  9. 使用兩遍 loudnorm 標準化音訊至 −14 LUFS,量測真實峰值 −1.5 dBTP,如同 video-thuy-mac/SKILL.md 中的音訊標準化章節;務必寫入不同的檔案,並對最終版本重新量測。交付預覽版、原始素材、資料與未經核實的部分。注意:腳本與畫面不能取代責任人對醫療/廣告內容的審核,發佈前必須經過相關審查。

相關技能