/fabrica-videos-reels — 從腳本到 MP4
Fábrica de Vídeos Agêntica 的技能(請參閱 fabrica-videos 技能)。這是「腳本優先」的路徑:客戶在錄製前先批准腳本和分鏡。如果客戶在沒有腳本的情況下已經錄製,請使用 fabrica-videos-rapido 技能。
請使用簡單的葡萄牙語溝通(請求製作影片的人通常不會程式設計)。透過渲染的預覽畫面顯示進度,而不是程式碼。
在撰寫 Remotion 程式碼之前,請先閱讀 CLAUDE.md(設計系統規則、每個檔案的位置和指令),如果已安裝官方的 Remotion 技能,也請閱讀 remotion-best-practices。
完整且已獲批准的範例是 Exemplo 影片:roteiros/exemplo*.{md,json} + src/videos/Exemplo.tsx。請複製其結構。
所有指令都在終端機中執行,位於專案根目錄。在以下表格中,TRABALHO 指的是 trabalho 資料夾(位於 git 之外)。
0. 找出影片處於哪個階段
選擇一個簡短的 slug(例如:minha-ideia),然後查看已存在的內容:
| 存在… | 那麼前往 |
|---|---|
| 無 | 1. 腳本 |
roteiros/<slug>.md 已批准,沒有 -animacoes.md | 2. 分鏡 |
分鏡,沒有 src/videos/<Nome>.tsx | 3. 建構 |
| 組合就緒 + 新的錄製檔案(他會告知儲存位置) | 4. 錄製 |
TRABALHO\out\<slug>-final.mp4 | 5. 交付 |
用一句話說明目前所處的階段,然後繼續。階段 1 和 2 是對話:提出方案、聆聽、修改;只有在他批准後才能繼續。
1. 腳本 → roteiros/<slug>.md
- 在此處構建腳本,與客戶進行對話。詢問:主題(或參考連結/影片)、支柱(品牌的主題之一)、目標時長(30–60 秒 ≈ 2.5 字/秒)。
- 結構與
roteiros/exemplo.md相同:包含估計開始時間、口白、卡片的區塊;如果觀眾是門外漢,則需附上類比字典;供錄製用的連續文字;需要的截圖;已附上連結的事實查核。 - 語調(根據對象調整;對象的規則由品牌方提供):第一人稱、短句、具體數字;前 3 秒必須有鉤子;永遠不要使用「革命性」/「未來已來」;結尾以提問加上 CTA。警報應轉化為提問,而非陳述。不要捏造新聞。
2. 分鏡 → roteiros/<slug>-animacoes.md + roteiros/<slug>.ancoras.json
- 按拍點(每 2–3 秒一個視覺變化):時間、短語、上方區域顯示的內容(1080×960 區域)。
- 在建立新的零件之前,先重複使用
src/pecas/中的零件:RedeNeural+Bisturi(AI 的「大腦」)、GradeConexoes、LoopPensando、Lupa、ContadorBarra、TrocaPrints、TextoRiscado(模式riscar/somar)、OlhoRiscado、LinhaVersoes;輔助工具TituloCena、Halo、RotuloMono、aparece在util.tsx中。 ancoras.json:{ "cena": "該場景中說的第一句話" }按照說話的順序。避免在錨點中使用專有名詞(Whisper 會出錯:"Qwen"→"quen", "Claude"→"clou", "OpenAPI"→"OpenAI", 以及 "Vercel", "MCP", "JSON")。場景內部的拍點(例如:劃掉的時機)也應作為錨點。
3. 建構 → src/videos/<Nome>.tsx
- 複製
Exemplo.tsx的骨架:zod schema(pilar, video, enquadramento, mostrarGuia, nome, cargo, prints, encerramento,tempos)、外層的TelaDividida、每個場景一個<Sequence>+<Cena>(6 幀淡入)、結尾 2 秒的Encerramento。在src/videos/index.tsx中註冊,放在<Folder name="Videos">內,並加上calculateMetadata(時長 =duracaoFala+ 2 秒)。 - 每個場景是一個獨立的組件,呼叫
useCurrentFrame()(絕對不要在父組件的物件/陣列函數中呼叫 hooks:幀數會出錯)。從src\relogio.tsx導入useCurrentFrame、useVideoConfig和Sequence,而不是從remotion導入:幀是以 30 幀/秒寫入的,而時鐘會在影片以 60 幀/秒輸出時處理其餘部分。 - 新零件應放在
src/pecas/中(通用,帶 props),遵循src/animacoes/tema.ts中的 tokens。 - 作品中的截圖和圖像(小檔案):儲存在
public\<slug>\此資料夾中,然後執行npm run preparar。 - 在實際錄製前用於測試的暫時口白:將連續文字錄製到
roteiros\<slug>.fala.txt(UTF-8)中,然後執行npm run fala -- <slug> roteiros\<slug>.fala.txt→TRABALHO\public\previa\fala-<slug>.mp4(系統語音,1080×960)。 然後執行npm run legendar+npm run batidas(第 4 節)以產生src/videos/<slug>.tempos.json,並將 propvideo設為"previa/fala-<slug>.mp4"。 - 驗證:執行
npx tsc並檢查開啟了指南的聯絡表:npm run folha -- <Id> src\videos\<slug>.tempos.json→TRABALHO\out\folha-<Id>.jpg(每個場景結束時的一個幀)。 檢查圖片:紅色區域內無任何內容(頂部 270,底部 320,側邊 96,右側按鈕),無重疊,文字可容納。 - 渲染預覽:
npm run renderizar -- <Id> "trabalho\out\previa-<slug>.mp4" previa(輕量,540×960;告知這是預覽)並發送給他。
4. 實際錄製 → 同步和構圖
- 找到新的錄製檔案(詢問他儲存在哪裡)。複製原始檔案到
TRABALHO\originais\(絕不移動或修改)並轉換:npm run converter -- "trabalho\originais\<arquivo>" <slug>→TRABALHO\public\gravacao-<slug>.mp4(直立,H.264,標準色彩,保持錄製的解析度和幀率:4K 60fps 仍然保持 4K 60fps,最終影片也以此規格輸出。HDR 是例外:會轉換為 SDR,轉換器會發出警告。在指令末尾加上ate=12,則只轉換前 12 秒,用於快速測試)。 轉換器會用ffprobe檢查檔案,如果是 4K HDR(最新的 iPhone),則使用zscale+tonemap處理 HDR(否則顏色會變淡)。 在每次會話的第一次 HDR 錄製中,從轉換後的影片中抽取一個幀並展示給他以與手機進行比較。 npm run legendar -- "trabalho\public\gravacao-<slug>.mp4"(背景執行,約 1–2 分鐘) →legendas/gravacao-<slug>.json。 如果錄製過程中有長時間停頓、錯誤或重複拍攝,請先清理(使用fabrica-videos-corte技能):之後的影片將是gravacao-<slug>-limpa.mp4,轉錄內容也是清理後的影片的。npm run batidas -- legendas\gravacao-<slug>.json roteiros\<slug>.ancoras.json src\videos\<slug>.tempos.json "<vídeo>"。 如果缺少錨點,請閱讀轉錄內容並調整短語。如果他改變了口白的含義,請調整動畫(例如:「不只由一個人」 → 使用TextoRiscado modo="somar"而不是劃掉)並告知他。duracaoFala≤ 影片時長(否則底部會有一段沒有圖像的瞬間):如果上述指令末尾有影片,batidas會自行限制;如果沒有,請手動修正。- 構圖(臉部需要保持在字幕帶區域 y 985–1125 和下方區域 y 1600 之間):在約 12 個時刻測試裁切,使用
ffmpeg -ss <t> -i <video> -frames:v 1 -vf "crop=1080:960:0:<offset>" "trabalho\out\enq-<t>.png"並檢查每個圖像。enquadramento="50% <offset/960*100>%"(用於 1080×1920 來源)。 整個影片中頭部必須完整出現在畫面中。 下巴可以碰到下方區域;但嘴唇永遠不能。 也要測試他靠近鏡頭的情況,並使用頭頂從未離開的最大 offset。 - 檢查名牌:如果遮住了臉,它會放在上半部分(
TelaDividida的預設行為)。 - 在背景中進行最終渲染:
npm run renderizar -- <Id> "trabalho\out\<slug>-final.mp4";使用ffprobe檢查時長/解析度,然後發送影片。- 進入的品質就是輸出的品質。
renderizar會讀取錄製的解析度和幀率,最終輸出也與之相同:如果以 4K 60fps 錄製,則輸出為 2160×3840 60fps。不要在最終渲染時直接使用npx remotion render:它總是輸出 1080×1920 30fps。 - 僅在帶參數時降低品質,且僅當他在呼叫技能時要求(例如:
/fabrica-videos-reels <slug> 1080p):1080p降低解析度,30fps降低幀率(npm run renderizar -- <Id> "<saída>.mp4" 1080p 30fps)。沒有參數就不要降低。 - HDR 不在此規則中: Remotion 只繪製標準色彩。如果錄製內容是 HDR,請告知他最終輸出會是 SDR。
- 以 4K 60fps 渲染需要繪製的圖像數量是 1080p 30fps 的八倍。請提前告知他這需要時間。
- 進入的品質就是輸出的品質。
5. 交付
- 使用
fabrica-videos-entrega技能完成(技術檢查、封面、幀聯絡表和NOTAS.md)。以下幾點是此流程特有的。 - 如果他稍後要在編輯應用程式中加入字幕,請解釋字幕應放在哪裡:就在分隔線下方(使用支柱的顏色)(指南的綠色帶狀區域),最多 2 行。如果他希望字幕直接內嵌在影片中,請參閱
fabrica-videos-legendas技能(使用LegendaQueimada組件,位置faixa)。 - 告知轉錄經常會出錯的名稱。
- 貼文描述:如果他要求,請在
NOTAS.md中撰寫一個建議(鉤子、2–3 句包含確切數字的句子、一個提問加上相同的口說 CTA、來源、最多 3 個表情符號、4–6 個主題標籤,不要誇大研究無法支持的內容)。 - 記錄保存在
entregas\AAAA-MM-DD-<slug>\:NOTAS.md(組合 ID、使用的指令、錄製檔和最終檔案的路徑、時長、構圖、他口白中的變更)、capa.jpg和聯絡表。最終影片保留在TRABALHO\out\中。 - 批准後,將錄製檔從
TRABALHO\public\中移除,並存放到trabalho\arquivo\AAAA-MM-DD-<slug>\中(Remotion 每次渲染都會複製整個public資料夾;資料夾過大導致速度變慢)。在NOTAS.md中記錄新路徑。 - 絕不發佈、排程或發送。 發佈是客戶的事情。
已解決的陷阱(不要再犯)
- Halo:使用
<Halo>(帶filter: blur的 div),不要在透明元素上使用box-shadow(會變成深色「藥丸」形狀)。 - 多個單詞的強調:
*10 tarefas*需要作為一個片段處理,而不是逐字處理(請參閱TextoImpacto/Destaque)。 - 居中於點(例如:
v1)的標籤需要額外的邊距,以免侵入 96 px 邊界。 - PowerShell:直接在
--props='{...}'中使用 JSON 會丢失引號。請寫入檔案並使用--props=arquivo.json。 - 專案內的錄製檔或影片會進入儲存庫:始終放在
TRABALHO中。 - Studio 的埠號是 3210。
系列(關於同一主題的多個 Reels)
- 每集一個 slug(
<serie>-<n>-<tema>),如果客戶要求,每集一個工作階段。並行的工作階段共用同一個資料夾: 每個工作階段只操作其 slug 的檔案;在src/videos/index.tsx中,編輯前先重新讀取,只新增自己的<Composition>;不要修改共享的零件。 - 適用於所有集數的事實和決策(已更改的數字、CTA、支柱)需要立即傳達給所有工作階段。否則,每個影片都會有不同的規則。
- 系列的最終畫面:使用
src/pecas/TelaFinalReels.tsx代替Encerramento,在口白結束後 4 秒(時長 =duracaoFala+telaFinalSeg)。 兩個 9:16 的空白位置(400×711),由他在編輯應用程式中用 Reels 覆蓋:一個用於下一集(最後一集回到第一集),另一個用於引發該系列的 Reels。
音效(可選,僅當他要求或已批准時)
- 在
public內的一個音效資料夾中放置四個短音效(帶入你自己的音效,並有明確授權:儲存庫不包含音效):abertura.mp3(鉤子處的 riser,音量約 0.35)、tecla.mp3(每個項目進入時,約 0.3)、whoosh.mp3(轉場/縮放時,約 0.2)、blip.mp3(當數字或最終答案出現時,約 0.3)。 - 每個音效是一個短的
<Sequence>,包含來自@remotion/media的<Audio>,綁定到與場景相同的時間點;路徑和音量放在 schema 的 props 中(空字串表示關閉)。 - 渲染後,使用
ffmpeg -i <video> -af volumedetect -vn -f null -測量峰值(應低於 0 dB,且音效低於語音)。你無法聽到:請告知他聽覺檢查是他的責任。
錄製經驗教訓
- 沒有腳本錄製的人通常會一句一句地說話,有長時間停頓,在開始前熱身,重複他們不喜歡的句子,並在結尾時離開畫面。
fabrica-videos-corte技能可以解決所有這些問題。 - 人們在錄製時常常會改變口白。在依賴錨點之前,請完整閱讀轉錄內容,並根據實際說出的內容調整畫面和貼文字幕。
- 當口白比腳本短時,從腳本中刪除的細節和數字會顯示在畫面上。
- 當更改一個事實(例如:已更新的數字)時,請在所有地方進行更改:口白、畫面、標題、貼文字幕和封面。