Communitygithub.com

officiAlRobsonAlencar-code/instagram-agent-skills-

建立一個 1080x1920 的直式 Reels 影片,從腳本到 MP4 都在你的電腦上渲染完成,可直接發佈。當使用者要求「幫我做一個關於 X 的 Reels」、短影片、Instagram 或 TikTok Reels、或想要將點子、技巧、清單或內容轉換為帶有字幕的動畫影片時使用。它會進行簡短的訪談、撰寫鉤子和分鏡腳本、使用你自己的 ElevenLabs 金鑰(選用)生成旁白、混入你提供的背景音樂,並使用 Remotion 進行渲染。

instagram-agent-skills- 是什麼?

這個 AI 代理技能可以從頭到尾自動化生成 Instagram 或 TikTok 風格的直式 Reels 影片,無需任何手動影片編輯。當使用者提出「幫我做一個關於 X 的 Reels」等要求時,AI 代理會先引導使用者進行簡短訪談,以了解主題、目標受眾、CTA 和風格偏好。接著,它會根據最佳實務原則撰寫一個鉤子(hook)和分鏡腳本,確保每段口白流暢銜接,並在最後以 Call-to-Action 結尾。技能會將腳本儲存為結構化的 JSON 檔案,並可選擇性地使用 ElevenLabs API 產生配音,並混入使用者提供的背景音樂。最後,它會使用 Remotion 在本機端將影片渲染為 1080x1920 的 MP4 檔案。該技能支援 Claude Code、Cursor 和 Codex 等平台,並且完全在本機端運作,確保資料安全。整個過程不涉及將任何素材上傳到第三方編輯應用程式。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/oficialrobsonalencar-code/instagram-agent-skills-/tree/HEAD/skills/reel

在你喜歡的 AI 中提問

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

說明文件

Reels 完成,在你的電腦上渲染

只要一句「幫我做一個關於跑步新手常犯的 3 個錯誤的 Reels,給我的跑步帳號」,你就能交出完成的 Reels:鉤子、分鏡腳本、旁白、音樂,以及在本機端使用 Remotion 渲染的 1080x1920 直式 MP4。完全不需要上傳到任何剪輯 App。

影片是字體排印風格:深色背景搭配柔和光暈,場景包含大標題、編號列表、動態數字、Before/After 卡片,以及結尾的「留言:關鍵字」區塊,字幕會在正中央逐字顯示,並在粗體和斜體之間切換。

<skill> 指的是此技能所在的資料夾(也就是這個 SKILL.md 所在的資料夾)。

前置需求

  • Node 18 或更新版本 (node -v)。必要。
  • ffmpeg(選用)。僅用於平衡音樂音量。沒有它,音樂會原樣輸入。 Mac:brew install ffmpeg。Windows:winget install ffmpeg。Linux:sudo apt install ffmpeg。
  • ElevenLabs 金鑰(選用)。沒有它,Reels 就沒有配音,只會有動畫字幕和音樂。
  • 大約 600 MB 可用空間給 Remotion(只需安裝一次)以及它在第一次渲染時下載的瀏覽器。第一次渲染需要網路連線,以下載 Google Fonts 的字型。

流程,共 7 個步驟

1. 快速訪談(一次對話)

一次問完所有問題,並在括號中提供預設建議,讓使用者可以一行回覆。如果他們已經在需求中說過某些內容,就不要重複詢問。

  1. 利基和帳號類型:這個帳號的主題是什麼?
  2. 觀眾:誰在看?(該領域的初學者)
  3. Reels 的目標:觸及、儲存,還是要產生留言以提供素材?(留言)
  4. CTA:使用者要留言什麼關鍵字,以及他們會收到什麼?(例如:「留言『指南』,我傳送指南給你」)
  5. 語氣:直接、教學性、挑釁性、輕鬆?(直接)
  6. 配音和音樂:你有 ElevenLabs 金鑰嗎?你有音樂(你自己的 MP3 或來自免版稅庫)嗎?想要特定的顏色嗎?(無配音,無音樂,深色主題搭配黃色強調色)

永遠不要要求使用者把金鑰貼到對話框裡。他們會去編輯 .env 檔案(步驟 4)。

2. 鉤子和腳本

在寫任何程式碼之前,先寫好腳本並以區塊方式呈現:鉤子、編號場景(類型 + 螢幕顯示內容 + 口白)以及預估時長。在生成旁白之前要先取得使用者同意,因為旁白會消耗 ElevenLabs 的點數。如果沒有旁白,且使用者只要求「直接做」,則可以直接繼續。

鉤子(場景 1,最多 2 秒)

  • 口說文字最多 6 或 7 個單詞。如果需要更多,那就不叫鉤子,而是開場白了。
  • 畫面在第一幀就完整顯示鉤子(gancho 類型就是做這個)。
  • 能抓住注意力的格式:帶有痛點的問題(「每天練習卻完全沒進步?」)、違反直覺的主張(「每天發文反而害了你」)、具體的數字(「阻礙你第一個 5K 的 3 個錯誤」)、後果(「這會讓你在私訊中流失客戶」)。
  • 不要用「嗨,大家好」、「在這支影片中」、「你知道嗎」或自我介紹。

腳本(總長 20 到 45 秒)

  • 4 到 8 個場景。每個場景 1.5 到 6 秒:以每秒 2.9 個單詞的速度計算,每個場景的口白約 5 到 17 個單詞。
  • 口白要連貫,不能斷斷續續。 所有場景的文字,依序唸出來時,必須聽起來像一個人在連續說話:每個場景都接續前一句話或想法。不要使用單字短句、用刪節號表示「停頓」,或沒有動詞的清單。先寫好完整的連續文字,然後再依場景拆分。
  • 一個場景一個想法。螢幕顯示簡短版本(標題、項目、數字);口白則提供解釋。
  • 口白中的短數字使用阿拉伯數字(「23 小時」、「1.6 克」),讓字幕更簡潔。
  • 只承諾真實的事情。不要編造統計數據:如果沒有來源,請改用其他類型的場景。
  • 最後一個場景永遠是 cta,而且口白要唸出關鍵字(「留言「指南」,我傳送步驟給您」)。

3. 建立工作室(一次)和 Reels 資料夾

工作室是一個裝有 Remotion 的資料夾;每個新的 Reels 只是一個包含其 cenas.json 的子資料夾,因此 npm install 只需執行一次。

# 第一次
cp -R <skill>/template ~/reels-estudio
cd ~/reels-estudio && npm install

# 每個新的 Reels(將 <slug> 換成短名稱,例如:3-erros-corrida)
mkdir -p ~/reels-estudio/reels/<slug>/public

撰寫 ~/reels-estudio/reels/<slug>/cenas.json(格式如下)。工作室根目錄下的 cenas.json 只是一個在 Studio 中開啟的範例;不需要修改它。

4. 旁白(僅在使用 ElevenLabs 金鑰時)

金鑰放在 ~/reels-estudio/.env(從 <skill>/.env.exemplo 複製):

ELEVENLABS_API_KEY=your_key
ELEVENLABS_VOICE_ID=voice_id   # 選用

腳本會從環境變數或這個 .env 檔案讀取,並且永遠不會印出金鑰。不要讀取、顯示或複製金鑰到任何其他地方。

cd ~/reels-estudio
node <skill>/scripts/narrar.mjs --projeto reels/<slug> --simular   # 驗證,顯示成本,不呼叫 API
node <skill>/scripts/narrar.mjs --vozes-pt                         # 列出公開庫中的 pt-BR 語音
node <skill>/scripts/narrar.mjs --projeto reels/<slug>             # 實際生成
  • 務必先執行 --simular。它會驗證 cenas.json 並顯示旁白將消耗多少個字元(點數)。
  • 語音:讓使用者選擇。--vozes-pt 會列出公開庫中的巴西葡萄牙語語音;要使用其中一種,使用者需要在網站的 Voice Library 中將其「新增到我的語音」,然後你可以傳入 --voz <id> 或將 ELEVENLABS_VOICE_ID 放入 .env。--vozes 列出帳號中已有的語音。如果沒有選擇,腳本會使用 ElevenLabs 預設的、能以非母語口音說葡萄牙語的語音:請告知使用者這一點。
  • 整個文字會在一次 API 呼叫中送出(/v1/text-to-speech/{voice_id}/with-timestamps),以確保持續的語調。每個字元的時間點會轉換為每個單詞的時間(同步字幕)和每個場景的時間。
  • 輸出:reels/<slug>/public/narracao.mp3 和 public/palavras.json,並且 cenas.json 會指向它們。使用相同文字和語音再次執行不會消耗點數;要重新生成,請使用 --refazer。--velocidade 1.08 可加速(範圍 0.7 到 1.2)。
  • 在旁白生成後修改了口白?請再次執行 narrar.mjs。 字幕來自音訊。

沒有金鑰:跳過此步驟。Reels 將沒有配音,字幕會根據預估的口白時間(每秒 2.9 個單詞)進行動畫,並加上音樂(如果有的話)。

5. 音樂(僅在使用者提供時)

音樂由使用者提供:他們自己的音樂或來自免版稅庫(YouTube Audio Library、Pixabay Music)的音樂,需遵守每個音樂的授權。絕對不要從「MP3 下載」網站、YouTube 影片或任何授權不明確的來源下載音樂,也不要建議這樣做。 沒有音樂,Reels 就沒有背景音樂。

node <skill>/scripts/mixar.mjs /path/to/music.mp3 --projeto reels/<slug>
node <skill>/scripts/mixar.mjs /path/to/music.mp3 --projeto reels/<slug> --inicio 12   # 跳過前奏

如果有 ffmpeg,腳本會將音樂裁剪到 Reels 的長度(如果音樂太短則重複),平衡音量,並加入淡入淡出效果。如果沒有 ffmpeg,則按原樣複製。渲染時,音樂音量會降低,並且在有配音時自動降低(組合中的簡單 ducking)。音量:cenas.json 中的 volumeTrilha,範圍 0 到 1(有旁白時預設 0.3,無旁白時預設 0.8)。

如果使用者在旁白生成之後才提供音樂,請在 narrar.mjs 之後執行 mixar.mjs,以便裁剪使用實際的影片長度。

6. 檢查、檢視和渲染

cd ~/reels-estudio
node <skill>/scripts/checar.mjs --projeto reels/<slug>

修正所有 ✖(錯誤)並閱讀所有 !(警告)。然後,在渲染之前檢查 3 個關鍵幀(鉤子、中間、CTA)。從 narrar.mjs 的輸出中取得時間點,或將秒數乘以 30:

npx remotion still Reel out/<slug>-q1.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=30
npx remotion still Reel out/<slug>-q2.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=<middle>
npx remotion still Reel out/<slug>-q3.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=<end-20>

打開圖片檢查文字被裁切、孤兒行和重疊的問題。然後進行渲染:

npx remotion render Reel out/<slug>.mp4 --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public

一個 30 秒的 Reels 需要 1 到 4 分鐘。在效能較差的機器上,加上 --concurrency=2。若要快速預覽,使用 --scale=0.5(輸出為 540x960)。

7. 使用檢查清單交付

交付 MP4 的路徑(~/reels-estudio/out/<slug>.mp4)、最終腳本以及貼文建議說明。在此之前,請確認並告知你已經檢查過:

  • 對比度:字幕在背景上清晰可讀(checar.mjs 會測量;最低 4.5:1)。
  • 沒有任何畫面靜止超過約 3 秒:沒有場景超過 6 秒,也沒有長時間沒有字幕的停頓。
  • 鉤子在 2 秒內出現,並在第一幀可見。
  • CTA 在結尾,同時出現在畫面和口白中,且使用正確的關鍵字。
  • 長度在 20 到 45 秒之間。
  • 有配音時:字幕與口白同步(在 MP4 中檢查中間的一段)。
  • out/ 中的預覽 PNG 可以刪除。

cenas.json

{
  "cores": { "fundo": "#0E0F12", "texto": "#F4F4F2", "destaque": "#FFC94A", "suave": "#9A9CA3", "sobreDestaque": "#0E0F12" },
  "fonte": "Inter",
  "fonteItalica": "Instrument Serif",
  "legenda": true,
  "narracao": null,
  "palavras": null,
  "trilha": null,
  "cenas": [
    { "tipo": "gancho", "titulo": "Treina todo dia e nada muda?", "destaque": "nada muda",
      "fala": "Treina todo dia e nada muda?" },
    { "tipo": "titulo", "titulo": "O problema não é o treino.", "subtitulo": "É o que acontece nas outras 23 horas.",
      "fala": "O problema quase nunca é o treino, é o que você faz nas outras 23 horas." },
    { "tipo": "lista", "titulo": "Os 3 vilões",
      "itens": ["Dormir menos de 7 horas", "Comer pouca proteína", "Repetir a mesma carga"],
      "fala": "São três vilões: dormir menos de sete horas, comer pouca proteína e repetir a mesma carga por meses." },
    { "tipo": "numero", "de": 0, "ate": 1.6, "decimais": 1, "sufixo": " g", "rotulo": "de proteína por quilo de peso, por dia",
      "fala": "Uma referência comum para quem treina é 1,6 grama de proteína por quilo, todo dia." },
    { "tipo": "antes-depois", "antes": "Treino novo toda semana", "depois": "Mesmo treino, carga subindo",
      "fala": "Em vez de trocar o treino toda semana, mantenha o mesmo e suba a carga." },
    { "tipo": "cta", "chamada": "Comenta", "palavra": "PLANO", "promessa": "que eu te mando o checklist das 23 horas",
      "fala": "Comenta PLANO que eu te mando o checklist das 23 horas." }
  ]
}

同一個範例也可以在 <skill>/exemplos/cenas.exemplo.json 找到。

場景類型

所有場景都包含 fala(必要)和 duracao(以秒為單位,選用;僅在沒有旁白時使用)。

類型欄位用途
ganchotitulo, destaque第一個場景。特大標題;destaque 是以強調色顯示的斜體部分。如果標題與口白相同,則字幕不會重複。
titulotitulo, subtitulo, destaque一個強而有力的陳述。標題最多約 50 個字元。
listatitulo, itens(2 到 5 個)項目逐一進入的編號列表。每個項目最多約 30 個字元。
numeroate, de, prefixo, sufixo, decimais, rotulo數字會動態增加到目標值。例如:"prefixo": "R$ ", "sufixo": "%"。
antes-depoisantes, depois, rotuloAntes, rotuloDepois兩張卡片;「之後」的卡片會在中間以強調色進入畫面。
ctapalavra, chamada, promessa最後一個場景。在一個區塊中顯示「留言」+ 關鍵字 + 使用者會收到的內容。關鍵字最多 9 個字母。

顏色和字型

  • cores:任何 #rrggbb 顏色。預設為中性深色搭配黃色強調色。若要使用淺色主題,請互換 fundo 和 texto 的顏色,並選擇一個夠深的 destaque 顏色。checar.mjs 會檢查低對比度。
  • fonte 和 fonteItalica:Google Fonts 的字型家族名稱(例如:"Montserrat"、"Playfair Display")。fonte 需要有 weight 900。使用 "sistema" 則不下載任何字型。如果該字型家族不存在或沒有網路連線,渲染會使用系統字型。
  • legenda: false 會關閉逐字字幕效果。

常見問題

  • 「palavras.json 來自 cenas.json 的其他版本」:口白在旁白生成後被修改了。請再次執行 narrar.mjs。
  • ElevenLabs 401:金鑰錯誤或沒有 text-to-speech 權限。404:該語音不存在於帳號中;請透過 Voice Library 新增。
  • 文字超出畫面:請縮短標題或項目;checar.mjs 會警告過長的內容。
  • 渲染緩慢或卡住:使用 --concurrency=2、關閉瀏覽器,並檢查磁碟空間。
  • 第一次渲染時間較長:Remotion 會下載一個無頭瀏覽器(只需一次)。

此技能不包含的功能

  • 不拍攝或使用錄製的影片、圖片或頭像:Reels 是字體排印風格(文字、數字、卡片)。若要編輯影片素材,請使用其他工具。
  • 不進行語音複製,也不會在使用者沒有提供 ElevenLabs 金鑰的情況下生成語音。
  • 不選擇或下載音樂:背景音樂總是由使用者提供。
  • 不發佈到 Instagram 或排程貼文。
  • Ducking 功能是簡單的(有口白時音樂降低音量);不能取代專業混音。

Individual skills in this repo

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

相關技能