ai-video 是做什麼的?
一部影片就是一個 video.json 檔案:包含語音要說的句子,以及針對每個強烈想法,從 16 種場景目錄中選出的一個場景。
scripts/make.mjs 腳本會處理所有其他事情。千萬不要手動撰寫 HTML、CSS 或動畫程式碼。唯一的例外是某個時刻值得一個自訂視覺效果(類型為 html)。
點子 ─► 腳本(句子) ─► video.json ─► make.mjs ─► 連絡表(審閱) ─► --rendu ─► MP4 + 封面 + 貼文文案
JSON 鍵名是法文(
phrases、texte、scene、voix、marque……),場景類型也是如此(titre、chiffre、liste……)。請完全按照此技能中顯示的內容撰寫。語音說的文字可以是任何語言。
第一次製作影片之前(只需一次)
sh <skill>/scripts/install.sh # 檢查 node ≥ 18、ffmpeg、python3;在 <skill>/.venv 中安裝 edge-tts
<skill> 是此檔案所在的資料夾。第一次執行會下載 HyperFrames(透過 npx)、GSAP 和標誌。之後所有內容都會被快取。
工作流程
- 一句話的主題。 如果使用者沒有提供,建議 3 個主題並讓他們選擇。
- 腳本。 閱讀
references/writing.md:有效的鉤子、結構、長度。- 目標是 9 到 14 個句子,以及 110 到 170 個單字。
- 大約每秒 2.7 個字,句子間隔 0.35 秒:130 個字約為 50 秒。
- 檔案。 在使用者的專案中撰寫
videos/<id>.json。格式如下,完整目錄在references/scenes.md。將媒體檔案放在videos/medias/。 - 建構。
node <skill>/scripts/make.mjs videos/<id>.json會產生語音、頁面、檢查和連絡表,但不進行渲染(約 1 分鐘)。 - 審閱。 只開啟一張圖片:
videos/rendus/<id>-planche.jpg。- 它會顯示第一幀,然後是每個場景結束時的畫面(在其所有元素都到達後),最後是片尾卡。
- 修正 JSON 並再次執行命令。語音會被快取:只會重新製作有變更的句子。
- 渲染。 加上
--rendu。45 秒的影片約需 1 分鐘。你會得到:videos/rendus/<id>.mp4;-couverture.jpg,即封面,也就是第一幀;<id>.txt,包含標題、字幕、主題標籤和置頂留言。
- 發布。 閱讀
references/publishing.md,了解依目標國家/地區的發布時間、發布節奏和字幕。未經使用者明確同意,切勿發布任何內容。
節省 token:重要的規則
這個技能很省錢,因為模型每部影片只需撰寫 60 到 120 行 JSON,而不是 250 到 400 行的 HTML 和動畫程式碼。在盲測中,一個全新的代理程式用大約 65,000 個 token(包含閱讀此技能的時間)就完成了一支 60 秒的影片。要保持這樣的效果:
-
不要開啟
make.mjs、lib/*.mjs、style.css或產生的index.html。場景目錄就足夠了。只有在命令失敗且錯誤訊息不足時才開啟程式碼。 -
只在對應的步驟閱讀參考文件:
步驟 參考文件 撰寫腳本 writing.md選擇場景 scenes.md語音、影片素材或螢幕截圖 modes.md發布 publishing.md不要在對話中重複閱讀已經讀過的參考文件。
-
只檢視一張連絡表,而不是螢幕截圖。 檢查影片時,只看一次
<id>-planche.jpg。不要每秒抓取一幀,也不要逐幀檢查 MP4。 -
相信檢查。 命令會執行 HyperFrames 檢查(溢出文字、隱藏文字、執行時期錯誤)並用幾行文字總結。
- "aucun débordement, aucune erreur" 表示一切正常。
- ✗ 行必須總是修正。
- ⚠ 行值得閱讀:如果它影響文字則進行修正。
-
批次處理只需一個命令。 先撰寫好 N 個檔案。然後在背景執行
node make.mjs videos/a.json videos/b.json … --rendu,等待它完成,不要觀看其輸出。 -
原地編輯。 要修正某些東西時,只變更 JSON 中有問題的句子或場景。不要重寫整個檔案。
-
無需尋找素材。 標誌(
logo:bitcoin、logo:metamask……)和 45 個圖示(icone:cle……)都已內建。只有在使用者要求時才在網路上搜尋圖片。
video.json 格式
{
"id": "wallet-key",
"titre": "Your crypto is not in your wallet",
"langue": "en",
"voix": { "nom": "en-US-AndrewMultilingualNeural", "debit": "+4%" },
"marque": { "nom": "BDan", "visuel": "icone:etincelle" },
"prononcer": { "USDT": "U S D T" },
"phrases": [
{ "texte": "Your crypto is not in your *wallet*.",
"scene": { "type": "titre", "lignes": ["Your crypto", "is not in", "your *wallet*"], "visuel": "icone:portefeuille" } },
{ "texte": "The key fits in *twelve words*.",
"scene": { "type": "chiffre", "valeur": "12", "apres": "words", "au": "twelve", "couleur": "accent" } },
{ "texte": "It's called the recovery phrase." }
],
"fin": { "texte": "I'm BDan.", "sous": "Let's talk new tech.", "audio": "medias/signature.wav" },
"publication": { "titre": "…", "legende": "…", "hashtags": ["crypto"], "commentaire": "…" }
}
-
phrases[].texte:語音要說的文字,逐字對應。*word*標記強調詞:它會以彩色斜體顯示,在說話時脈動,並且鏡頭會推進到該詞。- 每個句子最多使用一個。
-
scene:開始一個新場景。- 沒有
scene的句子會延續前一個場景,這會留下閱讀時間。 - 在 filmed 模式中,沒有場景的句子會顯示臉部;在那裡,
"scene": "suite"會延續場景。
- 沒有
-
au(「在」):元素會在句子的那個詞出現,例如"au": "Ledger"。- 沒有
au時,元素會自行平均分佈:當元素數量與句子數量相同時,每個句子一個;否則以均等間隔出現。
- 沒有
-
視覺效果,無論場景使用何種:
"logo:binance"、"icone:cadenas"、"emoji:🔑",或路徑如"medias/screenshot.png"(.svg檔案會被內嵌)。 -
voix:語音。nom是語音名稱,debit是速度。fichier指向你自己的錄音。 -
langue:預設為"fr"。英文設為"en",並搭配一個英文語音。 -
marque:左下角的小品牌膠囊。nom是品牌名稱,visuel是其標誌。 -
prononcer:發音形式。它們會改變語音說某個詞的方式,但絕不會改變螢幕上顯示的文字。 -
fin:片尾卡,包含marque標誌、texte和sous(副標題)。audio會在卡片上播放錄製的結尾語音。- 沒有
audio時,卡片會停留 2 秒,靜音。
-
titre:檔案中影片的名稱。YouTube 標題則放在publication中。 -
可選項:
鍵 效果 musique一個音樂檔案,在語音下方降低音量 couleurs顏色,例如 {"accent": "#2f6bff", "accent2": "#5fa3ff"}sons: false轉場時沒有咻聲 blanc句子之間的靜音時間,預設為 0.35 秒 pause在某個句子之後額外的靜音 sousTitres: false不加字幕 -
句子 1 一定有一個場景。 第一幀是人們在動態消息中看到的封面,所以使用一個簡短、引人入勝的
titre。
16 種場景(參數和範例在 references/scenes.md 中):
| 要展示… | 類型 |
|---|---|
| 鉤子、一句有力話語 | titre |
| 一個數字(價格、紀錄、百分比) | chiffre |
| 2 到 6 個要點、工具或提示 | liste |
| 一個 2 到 5 個步驟的方法 | etapes |
| A 對比 B、前 / 後、迷思 / 事實 | duel |
| 品牌、貨幣、應用程式 | logos |
| 應用程式截圖或螢幕錄影 | telephone |
| 一個網站、一個頁面 | navigateur |
| 一張照片,以卡片或全螢幕顯示 | image |
| 一段對話(AI、客服、詐騙) | chat |
| 一個危險、一個詐騙、一個好消息 | alerte |
| 一個趨勢、一個數字比較 | graphique |
| 一個命令、一個安裝 | terminal |
| 某人的引言 | citation |
| 一個概念及其解釋 | carte |
| 值得一個自創視覺效果的時刻 | html |
變化場景。
- 為每個強烈想法分配一個專屬場景:每部影片 6 到 10 個場景。
- 不要連續兩次使用相同類型,並且從一部影片到下一部要改變類型的順序。
- 固定的風格不能變成模板。如果連續三部影片共享相同的場景序列,觀眾會流失。
三種模式(詳細資訊在 references/modes.md)
- Generated:你只需要 JSON。
- 語音是 edge-tts:免費、無需金鑰、支援多種語言。
- 設定
voix.nom來更換語音或口音。
- Images:你的螢幕截圖和照片會放入
telephone、navigateur或image,從videos/medias/讀取。- 錄製或克隆的語音放在
"voix": { "fichier": "medias/voice.wav" }。 - 它會在本機轉錄(whisper)並與你的句子同步。
- 錄製或克隆的語音放在
- Filmed:設定
"rush": "medias/clip.mp4"。剪輯的音訊就是語音。- 沒有場景的句子會顯示臉部,字幕在底部。
- 場景會在其想法的持續時間內覆蓋整個畫面。
- 根據轉錄稿撰寫句子:技能會逐字同步它們。
渲染前的檢查清單
- 句子 1 清楚地陳述主題,且其標題在一秒內可讀。
- 每個專業術語都在同一個句子或下一個句子中解釋。
- 每個句子最多有一個強調詞,並有 6 到 10 個不同類型的場景。
- 數字來自真實、已驗證的來源。當數字來自他人時,
chiffre場景會帶有source。 - 連絡表已審閱,檢查結果乾淨,且沒有留下「mot introuvable」(找不到單字)的警告。
- 結尾提供一個留下的理由(接下來會發生什麼、一句值得記住的話),而不是一個模糊的問題。
- 展示品牌是為了討論它們,絕非暗示合作關係。
- 虛構對話帶有
"mention": "Exemple fictif",或英文的 "Example"。
當問題發生時
| 訊息 | 處理方式 |
|---|---|
voix : … edge_tts | 執行 sh <skill>/scripts/install.sh |
mot « x » introuvable | au 必須重複其場景句子中的一個詞,且拼寫一致 |
logo « x » introuvable | 提供一個檔案("medias/x.svg"),或試試不帶空格的品牌名稱 |
| 文字溢出 | 縮短文字,或切換到更寬的場景(carte 或 liste 而不是 duel);不要碰 CSS |
| 某個詞發音錯誤 | 將其加入 prononcer,例如 {"Ledger": "Ledjer"} |