Communitygithub.com

Engaging Monologue

從獨自說話的錄製片段中,製作一個 16:9 的 FringeLines「Engaging Monologue」影片 — 帶有推進效果的跳接、演講者縮小為人像子母畫面,同時在紙質畫布上建構襯線動態文字、圖表(金字塔堆疊、比較、路線圖、步驟、大數字)和 B-Roll 卡片,加上提示卡片、下三分之一、標籤、CTA 按鈕和綠色結尾卡片,所有元素皆與語音逐字同步。適用於 YouTube 解說、獨白評論、電子報轉影片以及「一個想法,好好說」的內容。

Engaging Monologue 是什麼?

這個「Engaging Monologue」技能是一個專為 FringeLines 設計系統打造的專業影片製作工具,讓開發者與內容創作者能從單一攝影機錄製的獨白片段中,自動化產出 16:9 的高品質解說影片。它精準複製了 Ali Abdaal 影片中的動作語言,包含約 55% 的固定鏡頭說話畫面搭配每 5 秒一次的跳接和推進效果,以及 35-45% 的紙質畫布佈局,其中演講者會縮小為人像子母畫面,並同步建構動態文字、圖表、比較、路線圖、步驟和大數字等視覺元素。該技能支援 Claude Code 和 Remotion 工作流程,包含兩個主要步驟:`cut` 指令負責使用 Whisper 進行轉錄、移除填充詞與停頓,並產生跳接與推進效果;`render` 指令則根據使用者編寫的 `beats.json` 節奏檔案,逐字同步顯示文字和圖表。最終輸出為標準化至 -14 LUFS 的 MP4 檔案。這個工具特別適合將電子報內容、教學或單一觀點轉化為視覺豐富的 YouTube 影片,無需專業剪輯技能即可產出具有專業節奏、動態圖形和清晰品牌風格的影片。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qdevery/fringe-lines-video/tree/main/.agents/skills/engaging-monologue

在你喜歡的 AI 中提問

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

說明文件

Engaging monologue (16:9)

參考影片:Ali Abdaal, "How I'd Create Content in 2026 (If I Had To Start Over)" (youtu.be/A8PxRHQrLJ8, 16 分鐘, 1080p)。 動作語言複製自該影片。視覺風格使用 FringeLines v2.1 設計系統: My Drive/FringeLines Design System files/Fringe Lines Design system v2_1/ 以及位於 …/handoff/fringelines-tokens.css 的設計 token。

參考影片的運作原理

根據影片測量,取樣頻率為每 2 秒 1 幀,並在轉場附近密集取樣。

  • 約 55% 為純說話畫面。 一台鎖定的攝影機,中景。每約 5 秒一次跳接(中位數):16 分鐘內約 122 次剪接。每次剪接交替使用廣角和推進鏡頭,使剪接看起來是有意為之。
  • 僅兩種佈局,絕不更多:
    1. 全螢幕演講者,上面疊加其他元素:姓名下三分之一、左上角帶有小標籤按鈕的彩色提示卡片、底部的白色襯線句子、頭部附近的小型彩色標籤,以及底部中間的贊助商/CTA 按鈕。
    2. 紙質畫布。 演講者縮小為 人像子母畫面(圓角、白色邊框、右側、約 400×560),同時在一個帶有淺色弧線的暖色米白色頁面上建構圖形。畫布承載動態句子、編號路線圖卡片、橫條圖、金字塔圖,以及螢幕截圖或 B-Roll(以圓角卡片呈現,下方附有說明文字)。
  • 無連續字幕。 螢幕上的文字是 精選 的。一次顯示一句,逐字與語音同步顯現。每個字從模糊開始,然後變清晰。關鍵短語會改變顏色。
  • 圖表隨著每個項目被提及而逐步建構。 橫條圖以輕微的過衝效果彈入。金字塔圖層從上方落下。
  • 攝影機在圖形內部移動。 5 卡路線圖在每個章節重複出現,放大作用中的卡片並模糊其他卡片。
  • 轉場使用模糊淡出而非直接剪接。全螢幕↔子母畫面的轉換是一個約 0.4 秒的緩和變形。
  • 節奏: 每 10–20 秒一個新的視覺想法,每個段落一個強調時刻(黑白畫面),並且在每個人首次出現時顯示下三分之一。
  • 音效: 佈局切換時的柔和咻聲,以及元素落下時的輕微啵聲,音量保持在人聲之下。

如何對應到 FringeLines(請勿偏離此對應)

參考影片FringeLines 版本
暖色襯線字體搭配珊瑚色強調所有顯示文字使用 Instrument Serif。強調為 斜體 短語,在紙上或影片上分別為墨藍色 #1A4F6B 或白色。僅對最重要的數字([7 AM],大數字)使用橘色 #D4622A。
橫條圖中的圓角無襯線字體橫條圖、標籤、列表項目、堆疊標籤使用 Archivo 500–600
小型大寫標籤IBM Plex Mono 600,大寫,+0.14em,≥ 22 px:用於眉題、標籤按鈕、來源、元資料
珊瑚/紅色漸層提示卡片設計系統漸層:綠色(預設)、藍色(第二個想法)、橘色(警告或「錯誤」)
柔和路線圖卡片綠色、藍色和橘色 淡彩,單色數字徽章和虛線橘色連接線
奶油色紙張 + 弧線紙張 #F7F7F5 搭配一條淺綠色淡彩弧線
陰影無。 平面表面,2 px 細線 #E3E5DF,子母畫面上的白色邊框,圓角半徑 16–18
贊助商按鈕白色 CTA 按鈕(fringelines.co / 電子報)搭配橘色單色「Link in description」標籤
頻道結尾綠色結尾卡片,Clip Slides 封面:單色眉題、橘色分隔線、襯線標題(含一個斜體短語)、Archivo 副標、● fringelines.co

設計系統規則仍然適用:

  • 每個畫面一個想法;
  • 每個畫面一個橘色;
  • 綠色為預設,藍色為比較色;
  • 每個大數字都有一個 source;
  • 所有文字不小於 22 px。

組成元件

  • 模板: pipeline/remotion/src/Monologue.tsx,Monologue 合成,解析度 1920×1080 / 30 fps。它重用了 ShortV2.tsx 中的臉部追蹤功能。
  • 建構腳本: pipeline/build_monologue.py,包含兩個步驟:cut 和 render。
  • 工作資料夾: work/monologue/<slug>/ 存放 clip.mp4、props.json、transcript.txt、beats.json 和 faces.json。
  • 輸出: out/monologue/<slug>.mp4,標準化至 −14 LUFS。
  • 範例: work/monologue/morning-loop-test/beats.json,一個來自 10 月 30 日集節目 Quinn 的 62 秒片段。

1. 取得錄製片段

一個單一攝影機的 16:9 錄影,音質良好,一人,長度約 1–15 分鐘。將其放入 inbox/monologue/<slug>/take.mp4。

若要從一集節目中擷取獨白段落,請將攝影機畫面與其錄音室音軌合併。使用 build_short.xml_offsets 從 Descript XML 取得偏移量;請參閱 morning-loop-test 的製作方式:

ffmpeg -ss <t0-videoOffset> -t <dur> -i Quinn.mp4 -ss <t0-audioOffset> -t <dur> -i studio-sound-Quinn.m4a -map 0:v -map 1:a … take.mp4

2. 剪接

~/.shorts-skill/bin/python pipeline/build_monologue.py cut --slug <slug> --src inbox/monologue/<slug>/take.mp4 \
    [--range 12.0:95.5 --range 120:180] [--replace "gtm=>GTM" --replace "quick=>Quick"]

剪接步驟的功能:

  1. 使用 Whisper 轉錄錄製片段(快取於 words-src.json)。
  2. 移除填充詞、口吃和長時間停頓,使用與短影片相同的規劃器。
  3. 每次跳接時,交替使用推進效果(1.0 / 1.12,以臉部為中心)。
  4. 寫入 transcript.txt,內容包含 word@seconds,以剪接後的時間軸為準。

--replace 僅修正用於計時顯現的單字;不會自動加上字幕。

3. 編寫 work/monologue/<slug>/beats.json

閱讀 transcript.txt,並根據它規劃節奏。

{"brand": "FringeLines", "beats": [
  {"type": "title",   "at": 0.2,  "end": 2.0,  "eyebrow": "FringeLines · Monologue", "text": "The *morning loop*"},
  {"type": "name",    "at": 2.1,  "end": 5.4,  "text": "Quinn", "role": "Host · Fringe Lines"},
  {"type": "chips",   "at": 3.0,  "end": 7.4,  "items": [{"text": "GTM loops", "at": 3.1}, {"text": "Coding loops", "at": 5.1, "tone": "blue"}]},
  {"type": "text",    "at": 7.6,  "end": 11.3, "eyebrow": "What's a loop?", "text": "Loop's just a *stated goal* and then it works *autonomously*"},
  {"type": "callout", "at": 11.5, "end": 16.2, "label": "The setup", "tone": "green", "text": "I use Quick Desktop with routines that execute at any time"},
  {"type": "overlay", "at": 16.4, "end": 18.3, "text": "I usually run it at [7 AM]"},
  {"type": "stack",   "at": 22.4, "end": 36.4, "title": "My core team · 4 people", "items": [{"text": "Account executive", "at": 25.6}, {"…"}]},
  {"type": "stat",    "at": 51.2, "end": 55.1, "kicker": "My regular account team", "value": 14, "text": "people I'm interacting with on a regular basis", "source": "Quinn's own count · Fringe Lines, Oct 30 2026"},
  {"type": "end",     "at": 58.4, "end": 61.4, "text": "Building the *morning loop*", "sub": "The full walkthrough is in this week's episode."}
]}

時間

  • 時間單位為剪接後片段的秒數。end(或 hold)結束一個節拍,其轉場會在 0.3 秒內模糊淡出。
  • 文字會逐字與語音同步顯示。text 中的每個單字都會與該節拍視窗內的字幕進行比對。
    • 請逐字引用演講者的話(輕微修剪是可以的),以便同步功能正常運作。
    • 如果文字是改寫過的,則顯示會回退為均勻分佈。請使用 "reveal": "even" 強制此行為。
  • 項目 at 時間預設為均勻交錯。請將其設定為每個項目被說出的時刻,大約在該單字前 0.1 秒。

標記語法

  • *斜體強調*:每個畫面一個短語。
  • [強調數字]:橘色,每個畫面一個,僅限數字。

節拍類型

演講者全螢幕(疊加層):

類型欄位用途
titletext, eyebrow?開場標題,疊加在變暗的畫面上(前 2-3 秒)
nametext, role?人物首次出現時的下三分之一
overlaytext底部白色襯線文字的一句口語句子:你想要被記住的那句話
callouttext, label?, tone?, side?左上角(或右側)的彩色卡片,帶有單色標籤按鈕:例如「錯誤 #1」、「設定」、「規則」
chipsitems[{text, at, tone?}], side?, tone?2-3 個在頭部旁邊彈入的短標籤:內心獨白、名稱、選項
ctatext, sub?底部按鈕:電子報、該集節目或優惠。僅出現一次,通常在影片中段
bw(無)以黑白畫面強調演講者;請與 overlay 搭配使用
media + "full": truesrc, video?, from?滿版 B-Roll,演講者顯示在子母畫面中

紙質畫布(演講者移至子母畫面):

類型欄位用途
texttext, eyebrow?, align?一個動態句子:定義、論點、「最重要的一件事…」等
stackitems[{text, at, tone?}] (底部→頂部), title?金字塔或層次:基礎 → 策略 → 回報、團隊層級
comparetitle?, left{label, items}, right{label, items}, winner?A vs B:興趣 vs 收入、之前 vs 之後。失敗方在接近結尾時變灰
roadmapitems[{text}] (≤6), active?, zoom?影片的章節。在開頭顯示一次,然後每個章節重複使用,並設定 active = 章節索引,zoom = 何時放大
stepsitems[{text, at}], title?帶有細線分隔線的編號列表:專家、工具、步驟
statvalue, prefix?, suffix?, decimals?, kicker?, text, source一個數字,以橘色計數遞增;必須提供 source
mediasrc, title?, meta?, video?, from?圓角卡片中的螢幕截圖或 B-Roll,附有說明文字(標題 + 單色元資料行)。檔案放在工作資料夾中
endtext, eyebrow?, sub?, url?, tone?綠色結尾卡片(2-4 秒)

如果兩個紙質節拍相隔少於 0.7 秒,則保持在子母畫面佈局,以免演講者來回跳動。

節奏規則(來自參考影片)

  • 以前 5 秒內的 title 和 name 開場。
  • 紙質節拍佔總時長的 35–45%。 連續超過約 20 秒沒有視覺變化,且連續停留在紙質畫布上不超過約 15 秒。
  • 交替使用兩種佈局。不要連續使用兩個 callout;在它們之間放入一個 text 或圖表。
  • 每個節拍一個想法。 保持 text 節拍 ≤ 14 字,提示卡片節拍 ≤ 16 字。
  • 圖表項目在說出該單字時落地,絕不一次全部出現。圖表的第一個項目應在節拍開始後約 1 秒內落地;否則節拍應稍後開始。
  • 段落:
    • 在開場介紹結束時顯示一個 roadmap。
    • 在每個段落開始時重複使用它,並設定 active。
    • 以該段落的關鍵句 overlay 結束每個段落,對於最重要的段落搭配 bw。
  • 每 5 分鐘最多一個 cta,且絕不在前 30 秒內。
  • 以 end 卡片結束。它可以延續到最後一句話之後。

誠實原則

  • 螢幕上的數字必須與所說的一致,或來自 source 中指定的來源。
  • 他人內容的螢幕截圖需要在 meta 中標示出處。
  • 不要替演講者添加未說的話:非引用的 overlay 或 text 節拍應解讀為標籤,而非演講內容。

4. 渲染

~/.shorts-skill/bin/python pipeline/build_monologue.py render --slug <slug> [--sfx-db -22]
  • 它會追蹤臉部一次(faces.json;如果重新剪接,請刪除它)。
  • 渲染時間隨影片長度增長;一個 1 分鐘的測試在 Mac mini 上需要幾分鐘。
  • 音效:每次佈局切換時有咻聲,元素落地時有啵聲,以及在標題和結尾卡片處有漸強音。將 --sfx-db 提高到接近 −18 以獲得更多能量感。

5. 品質檢查(務必執行)

for t in 1.5 5 10 20 30 40 50 60; do ffmpeg -v error -y -ss $t -i out/monologue/<slug>.mp4 -frames:v 1 -vf scale=640:-1 /tmp/m_$t.png; done

檢查以下各項:

  • 文字: 沒有文字跑到子母畫面下方(紙質區域結束於 x = 1320)。堆疊標籤適合單行顯示。
  • 強調: 沒有遺留的 * 或 [。每個畫面最多一個橘色。
  • 臉部構圖: 臉部位於子母畫面中央,且推進效果不會切到頭部。
  • 顯示時機: 文字顯示與口語單字對齊。如果某個節拍的淡色文字顯示時間過長,表示其 at 設定過早。
  • 音量: ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:" 讀數約為 −14。

向使用者報告:

  • 影片長度和節拍列表(時間 → 類型 → 文字);
  • 仍需檢查的項目:數字、名稱和螢幕截圖出處;
  • 任何因文字非逐字引用而回退為均勻顯示的節拍。

尚未建構

  • 9:16 版本: 此合成僅為 16:9。若要製作直向影片,請使用 editorial-short 技能製作短影片。
  • 自動規劃: 編寫 beats.json 需進行判斷,因此需手動或由 Claude 根據 transcript.txt 完成。

Individual skills in this repo

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

相關技能