Communitygithub.com

robertomanfroi/videos-opus

將垂直拍攝的影片(人物對著鏡頭說話)轉換成 Meta Ads 的廣告素材——前 5 秒為標題,之後以動畫示意圖呈現說話內容(流程、前後對比、不✕/是✓、應用程式畫面、含計數器的真實截圖),逐字字幕,並遵守 Meta 廣告安全區域,無停頓或重複。

videos-opus 是什麼?

此技能旨在將一段直式錄影(人物對著鏡頭說話)自動化製作成符合 Meta Ads 規格的廣告短片。它專注於將口語內容轉化為視覺化的動畫示意圖:前 5 秒只顯示一個大標題,之後每一句關鍵想法都會切換為對應的圖解(例如流程圖、前後對比、是非判斷、應用程式螢幕截圖等)。技能會嚴格遵守 Meta Reels 的安全區域(上方留 14%、下方留 35%、左右各 6%),確保所有文字、按鈕和動畫元素都不會被遮擋。 它支援多個平台(Claude Code 等以 SKILL.md 為基礎的 AI 代理),工作流程包括自動化剪輯(移除停頓和重複)、逐字字幕生成、動畫合成,以及最終渲染。使用者只需提供原始影片、產品/優惠名稱、CTA 文案和所需的真實圖片(產品封面、結果截圖等),技能會自動處理其餘步驟。它還包含一個可重複使用的動畫示意圖目錄(15 種模板),可對應不同的說話內容類型。 此技能特別強調高效能與低資源消耗:使用快轉轉錄來選擇剪輯點,透過快照檢查構圖而非每次渲染完整影片,並提供明確的錯誤處理(例如缺失圖片或標記會中斷流程)。對於需要多版本廣告的情況,它可以複製專案並僅修改標題或 CTA,無需重新剪輯。最終輸出會以繁體中文(或使用者指定的語言)簡短報告作業結果。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/robertomanfroi/videos-opus/tree/HEAD/kit/.claude/skills/estilo-anuncio

在你喜歡的 AI 中提問

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

說明文件

廣告風格

唯一規則: 上半部(或胸部區域)必須顯示她所說的機制;絕對不要重新打出句子——字幕已經顯示了。每個說出來的想法都要變成一個示意圖,在逐字時切換。

開始之前,請先閱讀 ../perfil-criadora.md 並載入(或建立)根目錄下的 perfil.json。同時,在一則訊息中詢問缺少的內容:產品/優惠名稱、最終呼籲行動 (CTA:「留言 X」或「點擊連結」) 以及她想要展示的真實圖片(產品封面、含數字的結果截圖、她其他影片的畫面)。將圖片儲存在專案的 assets/img/ 中。絕對不能虛構 Logo、封面、數字、價格或結果。

src/index.template.html(從 template/index.template.html 複製)是一個包含 15 種現成示意圖的目錄,並附有範例時間。保留 CSS 和輔助功能;重寫標題,並根據她的說話內容選擇/調整示意圖的時間;刪除未使用的區塊。舊的純文字模板位於 src/classico.template.html(僅在她要求這種視覺風格時使用:將其內容覆蓋到 index.template.html 上)。

結構:標題 + 示意圖(強制)

  1. 0 → ~5 秒:僅顯示標題。 一個大字型(白色線條 + 強調色線條,約 90–125 px,可選在關鍵字下方掃描的底線)。無示意圖、無應用程式畫面、無圖片。
  2. 標題之後:每個說出來的想法對應一個示意圖,在逐字時切換。 示意圖內的文字僅限於短標籤(1–3 個詞:「之前」、「使用 AI」、「你的業務」)。
  3. 當產品推銷一個流程時,請顯示舊方法的複雜性與新方法的簡潔性並列(密密麻麻的時間線 + 時鐘 + ✕ 對比一個請求 + ✓)。

目錄中的示意圖(可重複使用並調整時間):

說出的想法示意圖區塊
「我做了 X → 經歷 Y → 變成 Z」手機卡片(真實畫面)→ 虛線箭頭 + 移動的點 → 圓形節點 → 箭頭 → 結果卡片B2
消除錯誤/停頓音頻波形:問題部分變成藍色/紅色並帶標籤然後消失;時鐘減少B3
自動發生手機螢幕上元素自動出現 + 計數器「0 次點擊」B4
舊方法 × 新方法兩個面板:密密麻麻的時間線 + 時鐘 + ✕ 對比一個請求 + ✓B5
異議(「沒時間」、「我不會」)不 ✕ / 是 ✓:問題卡片導致 ✕ → 箭頭 → 解決方案卡片帶 ✓B6
疑問 → 證明對話氣泡帶疑問 → 測試卡片帶 ✓B7
「需要正確解釋」通用請求 → 灰色結果 ✕ 對比詳細指令正在被打字 ✓B8
交付內容清單虛線空缺被真實圖片或圖示填滿,每個項目一個B9
課程 / 產品真實封面 + 晶片飛入 + 圖表上升B10
社會證明帶有觀看次數計數器上升的真實截圖(從截圖中剪下計數器)B11
模仿某種風格參考 → 節點 → 她自己的畫面套用相同風格 + 「= 相同風格」B12
優惠 / 發佈標籤 + 印章 → 帶進度條的貼文 → 「✓ 已發佈」B13
三個步驟(「錄製、編輯、發佈」)三個節點在每個詞上點亮B14
留言 CTA留言框正在打字(「我想要」)+ Direct 卡片B15
連結 CTA白色橫幅「了解更多 ›」脈衝效果B16

在渲染之前,請閱讀每個區塊並問:「這個區塊顯示了想法,還是只重複了字幕?」

數字:B3、B5 和 B11 的計數器帶有標記(__B3_SEG_ANTES__、__B5_SEG_NOVO__、__VIEWS_PRINT_1__...)。 montar.mjs 在發現任何未替換的標記時會出錯。請替換為真實數字(她所說的或從截圖中讀取的)或刪除計數器。

圖片:bruto.jpg 會自動從影片中提取(novo-anuncio.mjs)。所有其他圖片(封面、截圖、其他影片的畫面、參考資料)只有在學員提供時才會使用。如果缺少圖片 → 刪除或重新設計該示意圖(使用 SVG 繪製圖示、文字卡片);絕對不能留下範例空缺。姓名/@ 和大頭貼來自 perfil.json(montar.mjs 會替換 __USUARIO__、__NOME__ 並放入大頭貼;如果沒有照片,則使用帶有姓名首字母的圓形)。

安全區域(Meta Reels 廣告 — 強制)

保留 上方 14%、下方 35% 以及左右各 6% 的空間。在 1080×1920 解析度下,安全框為 x 65–1015, y 270–1248:所有文字、數字、標章、CTA、字幕和示意圖標籤都必須位於此框內(包括動畫縮放/旋轉的峰值)。只有裝飾元素(暗色條、面板陰影)可以超出。使用以下指令檢查:$K --em video-projects/<slug> node ../../$E/scripts/zonas-seguras.mjs renders/<arquivo>.mp4 assets/seguras.jpg t1 t2 …(每個畫面上顯示紅色框)。

示意圖區域(專案根目錄中的 reel.json)

區塊繪製在 1080×340 的區域內,然後 montar.mjs 會定位和縮放此區域:

取景方式reel.json
頭部較低,上方有空間(頭頂低於 y ≈ 450){"faixa":"topo","zonaTop":280,"zonaAltura":<頭頂 − 290>,"capTop":<下巴 + 20,最大值 1165>}
頭部在畫面中較高(近距離自拍、車輛內){"faixa":"peito","zonaTop":<下巴 + 20>,"zonaAltura":<≈ 1150 − zonaTop>,"capTop":<zonaTop + zonaAltura + 10,最大值 1165>}

在 peito 模式下,一條暗色條會覆蓋從下巴到安全區域底部的位置,示意圖和字幕會顯示在其上方。字幕(高度 80 px)必須在 y 1248 之前結束。

視覺風格

元素規則
暗色條topo:從頂部向下漸變 rgba(0,0,0,.66) → 透明。peito:從下巴到約 y 1300 的暗色條。
示意圖套件面板 rgba(16,16,19,.92) 圓角 22 帶 1 px 亮邊框;手機卡片 160×284 (9:16) 使用真實畫面;AI 圓形節點使用 cor_ia 顏色;虛線箭頭帶有在強調色上移動的點;圓形印章 ✕ 紅色 #ff453a 和 ✓ 綠色 #30d158 在逐字時彈出;介面文字使用 Inter 字體。重複的裝飾(波形條、時間線剪輯)使用模板種子的 rnd() — 絕對不能使用 Math.random 或 GSAP 的 from:"random"。
字體排版標題字體(Archivo Black 或個人資料中的 fonte_titulo)用於標題、標籤和字幕。白色;強調色使用 cor_destaque(預設為黃色 #FFD21F)。
動畫入場時間短:在 0.45–0.6 秒內上移並淡入(power3.out / expo.out);印章使用 back.out;計數器快速滾動;進度條填充;箭頭生長。退場在 0.28 秒內。示意圖在逐字時切換。
字幕一次一個詞,46 px,白色帶柔和陰影(絕對不能使用外框),位於下巴正下方(reel.json 中的 capTop)。
CTA留言框正在打字 + Direct 卡片,或白色橫幅「了解更多 ›」。

顏色、尺寸和禁止事項:template/DESIGN.md(會複製到每個專案)。

剪輯規則

  • 移除所有停頓(−30 dB / 0.15 秒)和所有重複;如果可能,控制在 90 秒以內。同一個句子說兩次:保留最後一個(修正過的)。強調性重複(「值得、值得」)不算錯誤。
  • 廣告剪輯無 J/L(cortar.mjs --no-jl):畫面必須完全同步於說話內容。
  • 剪輯後,重新轉錄 clean.mp4 並檢查是否有重複的句子或被剪斷的詞。完整的轉錄文字可能會隱藏重複:還要在短時間視窗內掃描整個影片,只需一次呼叫:$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas 1,3,5,7,…(每 2 秒直到結束),然後進行比較。

速度規則(學員的電腦可能較慢 — 以下規則優先於上述步驟)

  • novo-anuncio.mjs 的轉錄已經使用 --rapido(僅用於選擇剪輯點)。clean.mp4 的重新轉錄(用於字幕)使用精確模型 — 每個剪輯版本只做一次。
  • 在一次呼叫中使用 --janelas 檢查拼接和重複。絕對不能一次只檢查一個視窗。
  • 不要為了只看幾個畫面而渲染整個草稿。使用 $K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots(每個示意圖一個時間點)並檢查 PNG 檔案。當快照正確時,只渲染一次。
  • raw.mp4 / clean.mp4 的編碼器會自動選擇。不要更改。
  • 在每個耗時步驟之前,用一行簡短的繁體中文告知正在執行的操作(「正在渲染廣告 — 可能需要幾分鐘。」),以免等待看起來像當機。

流程(所有指令透過啟動器 $K 執行)

E=.claude/skills/estilo-anuncio · M=.claude/skills/_motor · K = videos-opus 技能的啟動器:"<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit,其中 <VO> 是 videos-opus 技能所在資料夾(包含要求您閱讀此指南的 SKILL.md)。它會將可攜式程式加入路徑,並在 kit 的工作目錄中執行($K pasta 會顯示該目錄;專案位於 <pasta>\video-projects\<slug>)。$K --em <subpasta> … 在該子資料夾內執行。禁止使用 npx、Python 或單獨的 node:所有操作都必須透過 $K。

  1. 專案 + 快速轉錄:$K node $E/scripts/novo-anuncio.mjs "<video>" <slug> → video-projects/<slug>/ 包含 raw.mp4、raw.json、assets/palavras.txt、兩個模板、assets/img/bruto.jpg 和 reel.json。
  2. 取景:使用格線連絡表($K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/5,drawbox=x=65:y=270:w=950:h=979:color=red:t=6,drawgrid=w=1080:h=100:[email protected]:t=2,scale=270:-1,tile=7x2" -frames:v 1 assets/contato.png)並檢視:黃色線條每 100 px,紅色框 = 安全區域。找到頭頂和下巴位置,然後編寫 reel.json(參見「示意圖區域」表格)。
  3. 剪輯:讀取 assets/palavras.txt,編寫 assets/keeps.json;在 assets/ 內:$K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs --no-jl。
  4. 檢查:在專案根目錄:$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<個人資料中的術語>";閱讀;執行 --janelas 掃描;調整剪輯直到乾淨為止;如果某個詞聽錯 → assets/caption-fixes.json。
  5. 合成:重寫 src/index.template.html:標題在 0–5 秒,之後每個說出的想法對應一個示意圖;時間點從 $K --em video-projects/<slug> node ../../$M/ancoras.mjs "frase" …(專案根目錄)獲取;真實圖片放在 assets/img/。
  6. 組裝 + 檢查:$K --em video-projects/<slug> node ../../$E/scripts/montar.mjs(如果遺留標記或缺少圖片則會出錯)→ $K --em video-projects/<slug> hyperframes lint(0 錯誤)→ $K --em video-projects/<slug> hyperframes snapshot --at … 對每個示意圖並檢視(臉部未被遮蓋、標籤清晰、數字正確、無殘留範例)→ 對快照/時間點執行 zonas-seguras.mjs → 渲染並交付(透過啟動器,在 kit 的工作目錄中):$K node $M/renderizar.mjs <slug> — 檢查鎖定、背景渲染、驗證並自動複製到 prontos/。輸出 3 = 仍在渲染:執行 $K node $M/renderizar.mjs <slug> --esperar 直到顯示 PRONTO。絕對不能直接執行 $K --em video-projects/<slug> hyperframes render 或手動執行 prontos.mjs。之後對示意圖時間點執行 zonas-seguras.mjs renders/<slug>-final.mp4 …。
  7. 交付:用繁體中文簡短回覆:位置、剪輯了哪些內容、使用了哪些圖片、任何疑問點,以及影片已遵守 Meta 安全區域。絕對不能發佈或上傳廣告。

廣告變體(當學員要求「多個版本」時)

使用相同的剪輯,不同的標題和/或 CTA:複製專案(video-projects/<slug>-v2),僅更改 B1 區塊和 CTA,組裝、拍攝標題快照並渲染。無需重新剪輯或轉錄。

交付後的調整

「去掉價格部分」→ 修改 keeps.json,重複步驟 3–4,使用 ancoras.mjs 重新計算該段落之後的示意圖時間點,然後重複步驟 6。「更改標題」→ 修改 B1 和步驟 6。「字幕往上移」→ 修改 reel.json 中的 capTop 和步驟 6。絕對不能從頭開始重做她沒有要求更改的部分。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能