Editar criativo
工具箱位於 kit/(與此檔案同一層)。所有腳本均使用 Python 3.10+ 並依賴 ffmpeg/ffprobe。
在 Windows 上請使用 python(而非 python3)。如果 ffmpeg 不在工作階段的 PATH 中,腳本會自動從使用者 PATH 中尋找。
KIT = <此 SKILL.md 所在目錄>/kit
1. Offer 與目錄
確定 offer 名稱(若使用者未提供則詢問)。預設根目錄:~/Documents/Ofertas(Windows 上為 %USERPROFILE%\Documents\Ofertas)。
python "$KIT/criar_oferta.py" "聖誕蠟燭"
建立(或補全,不刪除任何內容)以下結構:
| 目錄 | 內容 |
|---|---|
_work | 暫存檔(完成後清除) |
01_prontos | 最終成品 .mp4 + lote_XX_resumo.csv |
02_brutos | B-roll 與參考影片 |
03_apresentadora | UGC / 主持人錄影 |
04_imagens | 產品照片、頁面截圖 |
05_audios | 配音(<id>.mp3 + <id>.palavras.json) |
06_efeitos | 工具箱中的 9 種音效 + 可選的 musica*.mp3(背景音樂) |
07_roteiros | 腳本批次 .json |
08_validados | 已證明能賣的廣告素材(作為模擬/變體的基礎) |
讀取 oferta.json。如果 produto/publico/promessa 為空,請詢問使用者(或如果使用者提供連結則讀取銷售頁面)並填入——腳本依賴這些資訊。
2. 四個問題(透過一次 AskUserQuestion 完成)
- 模式——「我們要做什麼?」
- 全新廣告素材——測試新角度和新腳本
- 模擬廣告素材——從零開始,依據已銷售/擴展的廣告素材結構製作影片 (來自使用者自身或市場)
- 已驗證素材的變體——重用使用者已驗證的影片,僅更換鉤子
注意——「改善這個已驗證素材並創造變體」: 當使用者提供一個已銷售的影片並要求變體/更好的版本時,預設為模擬模式(全新影片,新的腳本和影像,僅將驗證素材作為結構參考)。僅在使用者明確要求保留原始影片時,才使用「已驗證素材的變體」(重用所傳送影片的影像和音訊)。
-
數量——「要多少個變體?」 5 / 10 / 20 / 50
-
字幕——「要哪種字幕風格?」
- 兩者交替(推薦)——在變體之間交替使用紫色框和黃色字
- 紫色框——正在說的詞彙顯示在紫色框內
- 黃色字——正在說的詞彙以黃色顯示,無背景
-
配音——「我們要如何為新的鉤子和主體進行配音?」
- 使用免費語音生成(推薦)——葡萄牙語神經語音,無需費用
- 使用 ElevenLabs 生成——使用使用者帳號及消耗額度
- 我已有配音——我將音訊放入 05_audios
如果使用者已在請求中回答了某些問題,則不要再次詢問。
ElevenLabs: API 金鑰位於 ~/.config/editar-criativo/.env(ELEVENLABS_API_KEY= 和可選的 ELEVENLABS_VOICE_ID=)。如果缺少,請提議在記事本中開啟檔案讓使用者貼上。切勿顯示金鑰或將其放入 Shell 命令中。
3. 視覺素材
列出 02_brutos、03_apresentadora 和 04_imagens。素材來源,按優先順序排列:
- 使用者自身的素材(產品照片/影片、頁面錄影):永遠是最好的選擇。
- 免費素材庫(Pexels + Pixabay)——輔助 B-roll,允許商業用途:
python "$KIT/buscar_midias.py" "<offer_目錄>" "candle making" --qtd 6 python "$KIT/buscar_midias.py" "<offer_目錄>" "christmas candle" --tipo foto --qtd 4- 使用英文關鍵字進行 3–5 次搜尋,覆蓋配音中展示的內容(過程、原料、結果、使用場景、情感)。加上
--listar可在下載前預覽。 - 優先使用本地庫: 所有下載都儲存在
~/Documents/Ofertas/_biblioteca(videos/、fotos/、包含庫標籤和已搜尋關鍵字的indice.json)。每次搜尋都會先查詢本地庫,僅下載缺少的內容——節省 API 請求。檔案透過硬連結(hardlink)加入 offer(不佔用重複空間)。--sem-api僅使用本地庫;--forcar-api忽略本地庫。 因此請在各個 offer 之間使用一致的英文關鍵字("stretching"、"back pain"、"yoga mat"……)。 - 預設:偏好直向影片,以橫向影片補足(工具箱會進行裁剪),影片長度不超過 40 秒,每種
--qtd項目為新內容。影片放入02_brutos/,照片放入04_imagens/,歸屬資訊放入02_brutos/creditos.csv(origem欄位:本地庫或素材庫)。 - 下載後,為每個廣告素材選擇合適的媒體(
midias/midias_baixo),而不是隨機分配——與語音匹配的 B-roll 轉換率更高。 - 不要使用素材庫圖像模擬證詞:可識別的人不應看起來像在推薦產品。
- 免費 API 金鑰位於
~/.config/editar-criativo/.env(PEXELS_API_KEY、PIXABAY_API_KEY)。如果缺少,腳本會發出警告;提議在記事本中開啟檔案讓使用者貼上。僅使用一個金鑰也可運作。 (截至 2026 年 11 月,Pexels 暫停發放新金鑰;使用者只能使用 Pixabay 直到重新開放。)
- 使用英文關鍵字進行 3–5 次搜尋,覆蓋配音中展示的內容(過程、原料、結果、使用場景、情感)。加上
- 社群媒體參考資料(用於模擬/變體),附上使用者批准的連結:
python "$KIT/baixar.py" "<offer_目錄>" <url1> <url2> ... --pasta 08_validados。 僅使用使用者有權使用的素材。
Web 應用程式/頁面的螢幕錄影:使用者自行錄製(Win+Alt+R)並儲存在 02_brutos。
4. 依模式編寫腳本
使用巴西葡萄牙語(如果 offer 是葡萄牙語則使用葡萄牙葡萄牙語),UGC 口吻,短句。
- 鉤子(hook):1 句,6–14 個詞彙,口語長度 ≤ 3 秒。打破常規、引發好奇、痛苦或結果。
- 螢幕鉤子(gancho_tela):紅色橫幅文字,≤ 7 個詞彙,補充(不重複)鉤子。
- 主體(body):15–35 秒口語(約 40–90 個詞彙):問題 → 機制/示範 → 證明 → 行動呼籲。
- 螢幕行動呼籲(cta_tela)(可選):最後 3 秒的綠色橫幅簡短文字("連結在描述中")。
- 在批次中變化角度:痛苦、好奇、前後對比、社會證明、異議、示範、價格/定錨、季節性緊迫感、「常見錯誤」、清單。不要重複相同的開場。
- 遵守廣告政策:不得承諾治癒、保證收入,或「你是[個人屬性]」。
全新廣告素材: N 個不同角度的腳本。
模擬廣告素材: 參考廣告素材位於 08_validados(或透過連結下載)。轉錄:
python "$KIT/transcrever.py" "<檔案>"——如果視覺部分很重要,請使用 watch 技能觀看。
分析其結構(鉤子類型、每個區塊的時長、行動呼籲),然後針對此 offer 編寫 N 個結構相同的腳本。不要複製文字。參考影片的任何畫面或音訊都不會進入新影片。
模擬檢查清單(記錄在批次中的 estrutura_modelada):
- 口語時長和區塊——例如:鉤子 0–3.5 秒 → 介紹產品 → 優點 → 含價格的行動呼籲。
- 視覺格式——全螢幕或分割畫面;一直顯示的內容(示範、主持人、螢幕)。
- 有助銷售的固定元素——使用工具箱複製:
- 固定在頂部的名稱+價格橫幅 →
faixa_fixa(在鉤子之後加入,避免在第 1 秒看起來像廣告); - 運動/步驟上的計數器("12 reps"、"8 x lado")→
rotulos; - 字幕風格和語音性別 → 與驗證素材相同的
legenda和voz。
- 固定在頂部的名稱+價格橫幅 →
- 價格和優惠 與驗證素材完全相同(這是它賣得好的原因),除非另有要求。
- 如果驗證素材點擊率低但銷售良好: 主體有效,開場未能吸引人。保留主體結構,專注於鉤子:緊張感、測試("試著讓手碰到地板……")、數字/計數("117 個練習,不到 R$ 10")、打破信念。鉤子橫幅從 0 秒開始,鉤子專用圖像放在
midias_gancho(硬幣、骨骼、健身房),每隔約 1.8 秒剪輯,當 B-roll 為全螢幕橫向時使用encaixe: "desfoque"。
已驗證素材的變體(僅在使用者想保留原始影片時):轉錄已銷售的廣告素材,找到原始鉤子結束的位置(第 1 句的結尾,通常 2–5 秒),編寫 N 個新鉤子。每個廣告素材僅包含 hook(無 body)和 "base": {"video": "08_validados/arquivo.mp4", "a_partir_de": <秒數>}——工具箱會組合新配音的鉤子 + 原始主體音訊。
- 在
a_partir_de處剪輯,即鉤子後第一個詞之前(跳過靜音——例如:鉤子結束於 3.56 秒,下一個詞在 4.16 秒 → 4.05)。使用transcrever.py取得每個詞的時間戳。 - 使用與原始配音相同性別的語音(更換語音時拼接會顯得奇怪),以及與驗證素材相同的字幕風格(如果有的話)。工具箱會自動將新鉤子的音量調整為與驗證素材相同(LUFS)。
- 點擊率低但銷售良好 = 主體有銷售力,開場未能吸引人:僅更換前 3–6 秒(鉤子帶緊張感/測試/數字,從 0 秒開始的鉤子橫幅,每隔約 1.3 秒剪輯,
"ritmo": 1.3)。
5. 腳本批次
儲存在 <offer>/07_roteiros/lote_NN.json(下一個可用序號):
{
"modo": "novos",
"legenda": "variar",
"narracao": {"motor": "edge", "voz": "pt-BR-AntonioNeural", "velocidade": "+8%"},
"criativos": [
{
"id": "c01",
"angulo": "curiosidade",
"layout": "dividida",
"hook": "沒有人相信這根蠟燭是在家裡製作的。",
"gancho_tela": "沒有人相信是在家裡做的",
"body": "我從一個普通鍋子和一個玻璃罐開始……",
"cta_tela": "連結在個人簡介",
"midias": ["02_brutos/x.mp4", "04_imagens/y.jpg"],
"midias_baixo": ["02_brutos/z.mp4"]
}
]
}
欄位:
legenda:variar|caixa_roxa|palavra_amarela(每個廣告素材也可接受legenda)。narracao.motor:edge(免費)|eleven|existente(讀取05_audios/<id>.mp3並轉錄)。 Edge 語音:pt-BR-AntonioNeural、pt-BR-FranciscaNeural、pt-BR-ThalitaMultilingualNeural、pt-PT-DuarteNeural、pt-PT-RaquelNeural。在廣告素材之間交替使用男性/女性語音,可在廣告素材內使用"voz"。layout:dividida(帶紅線的分割畫面,預設)|cheia。midias/midias_baixo:可選。如果未指定,工具箱會從02_brutos、04_imagens、03_apresentadora隨機選取(一半在上方,一半在下方)。當有與語音匹配的媒體時,請手動選擇。ritmo:每次剪輯的秒數(預設 2.2)。sfx:false 關閉音效。musica:false 關閉背景音樂。gancho_duracao:強制鉤子橫幅在螢幕上顯示的時間(預設:直到鉤子口語結束)。midias_gancho(全螢幕):僅在鉤子期間使用的媒體;主體僅使用midias。避免鉤子的衝擊圖像(硬幣、骨骼)在影片中間再次出現。工具箱總是在鉤子結束時剪輯。faixa_fixa:{"texto": "117 個 活動度與穩定性練習 僅需 R$ 9,90", "cor": "#F97316", "cor_texto": "#111111", "desde": "fim_hook", "y": 0.07, "tamanho": 66, "caixa_alta": false}——從鉤子結束到結束(或直到fechamento)顯示的橫幅。\n換行;僅texto為必填。rotulos:["12 reps", "8 x lado", "30 seg"]——在鉤子之後的每個剪輯上顯示的小標籤,循環顯示。encaixe:corte(預設,裁剪中心)|desfoque——在全螢幕模式下,橫向影片顯示在一個寬條上,背景為自身模糊版本,不會失去運動感(適用於示範練習)。
ID:全新廣告素材使用 c01…cNN,模擬使用 m01…,變體使用 v01…——在整個 offer 中唯一,因為 05_audios/<id> 和 01_prontos/<id>.mp4 使用 ID。在新批次中繼續編號。
向使用者顯示一個簡短表格(ID、角度、鉤子),然後進行渲染,除非使用者要求事先審查。
6. 渲染
python "$KIT/montar.py" "<offer>/07_roteiros/lote_NN.json"
網路: 免費語音(edge)和 ElevenLabs 需要網際網路。如果 Shell 在沙箱中且配音因 getaddrinfo failed / ClientConnectorDNSError 失敗,請在沙箱外執行命令。免費語音會間歇性失敗;工具箱會重試 5 次,然後才放棄該廣告素材(其餘廣告素材會繼續)。
為尚未配音的內容配音,並將所有內容組裝成 01_prontos/<id>.mp4(1080x1920、30 fps、H.264 + AAC),以及 01_prontos/lote_NN_resumo.csv。大批次需要一段時間(每個廣告素材約 20–60 秒):請在背景執行。--ids c03,c07 僅重新製作部分;narrar.py --refazer --ids c03 重新生成語音。
7. 檢查與交付
從 2–3 個廣告素材中提取 1 幀並使用 Read 檢視:
ffmpeg -ss 1.5 -i "01_prontos/c01.mp4" -frames:v 1 "_work/check_c01.jpg"
檢查:鉤子橫幅清晰可讀、字幕同步且在畫面內、剪輯無黑畫面。
交付:01_prontos 目錄、數量,以及用於在管理工具中命名廣告的 CSV 檔案。