Viral ad remix
將一個已被證實有效的廣告結構,重新製作用戶 app 的廣告。AI 模型提供人物與場景;手機畫面上顯示的所有內容,都來自真實的 app 錄影;剪輯時確保每一句有聲台詞都對應到說出該句話的臉部。
$S 代表此技能目錄中的 scripts/。需要 ffmpeg、Python 3(含 numpy pillow opencv-python-headless),以及用於語音檢測的 mlx-whisper(Apple Silicon)或 openai-whisper。使用螢幕錄影工具(例如 app-demo-recorder 技能)錄製 app 畫面(Release 版本、真實帳號、無廣告狀態)。
在首次編輯前,先閱讀 references/lessons.md。它列出了此工作流程旨在避免的失敗模式。
0. 確認目標(一個訊息)
目標受眾(實際會留在 app 中的人,而非你希望使用的人)、頻道(Meta / YouTube Shorts / TikTok)、要展示的一項功能,以及信用額度預算。年長觀眾需要較慢的節奏、較大的文字、螢幕上的同儕,以及具體的好處(金錢、時間)。在沒有預算的情況下,不要開始付費生成。
1. 尋找已有效運作的參考廣告
python3 $S/find_reference_ads.py search --country KR --objective app_install --period 180 --order like
python3 $S/find_reference_ads.py search --country KR --keyword 앱테크 --lang ko
python3 $S/find_reference_ads.py download <id> <id> --out refs
選擇 4–30 秒的廣告(重製模型接受此範圍),其結構適合該功能:發現 → 嘗試 → 結果 → 行動呼籲 (CTA)。按讚數會因廣告花費而膨脹;請在同一次搜尋內比較,而非跨搜尋比較。參考影片帶有浮水印,屬於其廣告主:僅將其用作重製工作的結構來源。
2. 選角(角色演員表)
重製模型需要一張臉來複製。如果用戶沒有模特兒照片,請在花費任何影片信用額度之前,為每個人物生成一張角色演員表,並獲得用戶的同意。
- 誰: 目標觀眾的同儕(相同年齡、地區、職業、衣著),普通而非模特兒般漂亮,符合參考廣告中的角色(主持人、顧客、鄰居)。
- 演員表: 一張橫向圖片(約 1600x900),逼真的照片風格,同一個人和服裝的三種視角:正面半身近距離特寫、半身、全身;中性淺色背景,柔和日光。雙手放鬆且完全可見,各五根手指。沒有文字、標誌、浮水印或手機在手中。
- 提示骨架: "Photorealistic character reference sheet of ONE fictional <年齡> <國籍> <職業> <性別>, <臉部/頭髮細節>, wearing <服裝>. Three views side by side on a plain light background: front close-up, half body, full body. Natural skin texture, soft daylight. No text, no logos, no props."
工具,從最便宜開始:
# Codex CLI 圖片生成(包含在 ChatGPT 方案中,無需影片信用額度)
codex exec --skip-git-repo-check --sandbox workspace-write -C cast \
"Use your image generation tool to create ONE image: <prompt skeleton>. Save it as ./cast_<name>.png and print its path."
- Higgsfield(或透過代理工具的其他影像 API):使用相同提示的
generate_image,或其角色演員表工作流程以產生多視角演員表。會消耗信用額度;請先報價。 - 用戶已付費的任何圖片模型。
打開圖片檢查:跨視角臉孔一致、自然的手、沒有文字、不與任何真實或名人相似。虛構人物必須在平台或法律要求時揭露為 AI 生成。將演員表放在簡報旁:重製工作會將其作為角色圖片。
3. 生成重製版
準備:參考影片、步驟 2 的角色演員表、app 圖示,以及 1–2 張真實 app 截圖。
撰寫簡報,使 AI 輸出易於修復:
- 保留參考廣告的節拍和節奏;替換角色、場景、產品。逐字提供台詞,簡短,使用目標語言。避免使用推薦式措辭(「我試過,然後得到了…」),除非是真的;偏好示範(「讓我們計算…」)。
- 要求不要字幕或螢幕文字(它們會出現亂碼),以及不要手機上打字的特寫鏡頭(手看起來很奇怪,且手指會越過螢幕,無法進行螢幕替換)。
- 手機畫面將被替換,因此要求手機保持靜止並面向鏡頭。
- 先報價;以最低解析度草稿;一次只輸出一個。
4. 在處理前先分析 AI 輸出
python3 $S/analyze_source.py ai.mp4 work/ana # 鏡頭、台詞、聯絡表 work/ana/shots.jpg
python3 $S/analyze_source.py ai.mp4 work/ana --no-speech --rms 17.2-17.6 # 靠近某句台詞的精確音訊切點
查看 shots.jpg。分類每個鏡頭:保留(人物、場景)、螢幕替換(手機面向鏡頭)、丟棄(打字的手、變形的臉、無法閱讀的動作)。注意每句台詞在哪裡說出、在哪個鏡頭上。辨識器的台詞起始點通常早 0.3–0.7 秒:在剪輯音訊前使用 --rms 確認。
5. 將真實 app 畫面放到每支手機上
python3 $S/screen_replace.py auto ai.mp4 3.33 6.50 app.mp4 work/shotB.mp4 --work work/B --app-start 2.4
python3 $S/screen_replace.py auto ai.mp4 17.46 21.25 app.mp4 work/shotE.mp4 --work work/E --app-start 10.6 --blank 0,1740,1080,2020
auto 會擷取該鏡頭(在範圍內的任何剪輯點停止)、找到關鍵影格和螢幕角落、將其對齊到邊框、在整個鏡頭中追蹤手機(平面追蹤,雙向,包含旋轉)、以匹配的亮度和少量眩光進行合成,並寫入 work/X/key_preview.png(四邊形 + 像素格線)和 work/X/qa.png(原始 vs 合成)。
務必打開兩張圖片。 如果四邊形不正確,從格線讀取角落座標,然後使用 --key K --quad "x,y x,y x,y x,y"(左上、右上、右下、左下,內螢幕邊緣)重新執行。使用分析中安全範圍的 START/END。將 app 片段與台詞匹配:在人物提問時顯示輸入螢幕,在他們反應時顯示結果。使用 --blank(app 像素座標)塗掉過時或私人的 UI。
6. 建立結果時刻和文字
python3 $S/pop_highlight.py result_clip.mp4 x0,y0,x1,y1 work/pop.mp4 --blank 0,975,720,1145 # 關鍵數字彈出、發光、閃爍
python3 $S/captions.py captions.json work/caps # 鉤子、逐行字幕、結尾卡(PNG)
文字規則:第一影格上的鉤子(一個觀眾會想問的問題)、每句台詞一條字幕、最多兩行、大字、高對比、位於底部 20% 和右邊緣之外、絕不覆蓋觀眾必須閱讀的 app UI。將文字保持在使用者接受的最小量;法律要求的通知保留但字體小。結尾卡 = app 圖示 + 名稱(+ 如果用戶想要的行動呼籲)。
7. 保持同步進行組裝
編寫一個時間軸 JSON(格式見 scripts/assemble.py --help)並執行:
python3 $S/assemble.py timeline.json out.mp4
- 音訊是來源本身的音訊,切割成片段;每個有說話臉部的鏡頭對影片和音訊使用相同的來源時間。在 app 螢幕、廣角鏡頭和結尾卡上,台詞可以作為旁白播放。
- 丟棄空白片段(台詞前的沉默、鏡頭之間的沉默),而不是加速所有內容。
- 人物鏡頭必須從其第一影格開始移動:切勿凍結臉部來填充時間;要延長反應時間,使用影格插值(
minterpolate)對無聲部分進行慢動作,並提供略多於所需的來源片段。 - 疊化使用剪輯點之後的真實影格;app 螢幕可以直接切換。
- 影片和音訊總長度必須一致(工具否則會拒絕)。
8. 像挑剔的觀眾一樣驗證
python3 $S/verify.py out.mp4 --forbid ai.mp4:10.79-17.29 --person 0-3.2 --person 5.2-8.8 --sheet work/sheet.jpg
然後查看演員表、將逐字稿與你的字幕比對,並觀看一次。典型的遺漏:來自下一個鏡頭的邊界影格、凍結 4 個影格的臉孔、在錯誤的臉孔上播放的台詞、已替換螢幕邊緣的假 UI、覆蓋 app 的文字、停留在 app UI 上的鉤子。在展示用戶之前修復並重新驗證。
9. 交付
一個資料夾:最終 mp4、AI 原始輸出、合成結果、時間軸 JSON、含時間軸表格的 README、花費的信用額度,以及開放風險(AI 人物揭露、推薦式措辭、品牌名稱發音錯誤)。當需要獨立審查時,將影格聯繫表、逐字稿和時間軸交給一個全新上下文的審查者,並告訴它要保留哪個結構:一個只被告知「讓它合規且更快」的審查者將會刪除人物和 app 畫面。