編輯 Reel
處理一支直式影片(人物面對鏡頭說話,已剪輯完成:無靜音或不良鏡頭),讓它可以直接上傳。不會修改說話內容:只在上面疊加編輯層。
範本位於 plantilla/(Remotion)。所有螢幕上顯示的內容都在 plantilla/public/plan.json 中描述;你的工作是根據準則編寫該計畫,而不是進行程式設計。
前置要求(開始前請先檢查)
ffmpeg和whisper-cli(whisper.cpp)。Mac:brew install ffmpeg whisper-cpp。Windows:winget install Gyan.FFmpeg以及從 https://github.com/ggml-org/whisper.cpp/releases 下載 whisper.cpp 的壓縮檔(將whisper-cli.exe放在 PATH 中)。- Node 18 或更新版本(Windows:
winget install OpenJS.NodeJS),並已安裝 Google Chrome。 - 如果缺少任何項目,請在獲得使用者許可後自行安裝;如果安裝程式要求使用者密碼,請讓使用者自行輸入。不要半途而廢。
- 在 Windows 中,
.sh腳本在 Git Bash 中執行(Windows 上的 Claude Code 會使用它)。如果bash不可用,請使用其等效命令。
步驟
1. 準備 Reel 資料夾
cp -R <此技能>/plantilla ~/reels/<reel-名稱>
cd ~/reels/<reel-名稱> && npm install
cp <使用者影片> public/video.mp4
影片必須是 1080×1920 直式(如果來源是 4K 直式,請使用 ffmpeg -i in.mov -vf scale=1080:1920 -c:a copy public/video.mp4 降低解析度;切勿為了放大臉部而裁切:人們更喜歡看到自己周圍有空間)。
2. 轉錄並尋找剪輯點
bash <此技能>/scripts/transcribir.sh public/video.mp4 public
bash <此技能>/scripts/cortes.sh public/video.mp4
transcribir.sh會產生public/palabras.json(每個單字及其對應秒數)並輸出文字。請完整閱讀它。 Whisper 可能會誤辨識專有名詞(例如 "Cloud" 而非 "Claude"):請使用correcciones.json進行修正,並執行python3 <此技能>/scripts/palabras.py public/tokens.json public/palabras.json correcciones.json。如果某個單字無法理解,請詢問使用者;不要猜測。cortes.sh會輸出鏡頭切換的秒數。這些將放入計畫中的cortes_s。
3. 定位臉部
隨機選取 6-8 幀,檢查臉部的高度(以像素為單位,相對於 1920):
for t in 1 5 10 15 20 25; do ffmpeg -y -v error -ss $t -i public/video.mp4 -frames:v 1 /tmp/cara_$t.jpg; done
cara_y = 眼睛或鼻子的高度(通常:700-900)。縮放將以該處為中心,標題則放在頭頂上方:同時記錄在臉部最高的那幀中,頭頂的位置。如果頭頂位於 y=450 附近,則上方無法放置標題:請減少標題數量。
4. 撰寫計畫
複製 plantilla/public/plan.json 的格式(這是一個完整的範例)。如果沒有其他影片或截圖,請刪除 split 和 pantallazos:它們指向範例檔案,但這些檔案並未隨專案一起提供。cortes_s 必須按順序且不重複。規則:
節奏
- 每個鏡頭一個縮放(
zooms,每個剪輯區間一個),交替使用不同比例:1.0 → 1.16 → 1.0 → 1.26……在剪輯點切換比例可以掩蓋跳動。切勿超過 1.3:會導致畫面模糊。 - 每 3-5 秒在螢幕上顯示新內容,但一次只呈現一個概念:切勿同時顯示標題和對話框。
開場鉤子(前 2 秒決定一切)
gancho.linea從第一幀開始可見,無進入動畫:它也是封面。- 不要重複說話內容。 如果聲音說「有 300 萬人看過這個」,文字應該寫其他令人震驚的內容(例如「我的 AI 做的」)。如果重複,它就只是一個字幕,白白浪費了。
- 第一幀的最佳選擇是動態效果:一個
split,上方顯示結果(病毒式影片、前後對比),下方顯示人物,並在第一句話結束時關閉。
每個元素在對應的詞語出現時
- 在
palabras.json中找出該事物被提及的詞語的精確秒數,並讓元素在該詞語前 0.15-0.3 秒 開始出現。在詞語之後才出現的標題會讓人感覺延遲。 lista[].filas[].marcar_s= 使用者提到該行的秒數。
何時使用何種元素
| 說話內容 | 元素 |
|---|---|
| 簡短的點子("秘訣:skills") | titulos(大寫的短 kicker + 文字;*詞語* 會被強調) |
| 使用者請 AI 做事 | chat,必須是完全一樣的訊息(如果你沒有,請問使用者) |
| 具體名稱:資料夾、檔案、工具、步驟 | lista(最多 7 行) |
| "看看結果" | pantallazos(最多 3 張實際結果的截圖)或內含影片的 split |
| 結尾 "追蹤我" | cierre,包含使用者的帳號 |
誠實原則(不可協商): 螢幕上只能顯示真實的內容。對話框必須顯示實際輸入的訊息;數字必須是真實的數字。如果你不確定,請詢問或不顯示。
安全區域: 範本已將所有內容放置在 x 110-900 和 y 250-1290 之間,遠離 Instagram 的按鈕和說明文字區域。不要將元素移出此範圍。
5. 在完整渲染前檢查單張幀
npx remotion still Reel out/f0.png --frame=0
為每個元素取一幀(在該秒數 × 30 的位置)並檢查它們。確認:臉部從未被遮擋(清單和截圖會刻意讓背景變暗,但文字不應遮擋臉部),文字沒有被裁切,鉤子在幀 0 時可讀。
如果渲染卡在 "Waiting for root component to load",請使用系統的 Chrome:--browser-executable="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"(Mac)或 --browser-executable="C:\Program Files\Google\Chrome\Application\chrome.exe"(Windows)。
6. 渲染與最終檢查
npx remotion render Reel out/reel.mp4
ffmpeg -v error -i out/reel.mp4 -f null - && echo "檔案正常"
ffmpeg -y -v error -i out/reel.mp4 -vf "fps=1,scale=216:384,tile=10x3" -frames:v 1 out/hoja.jpg
檢查 out/hoja.jpg(每秒一幀的拼貼圖)。如果有幀顯示為「馬賽克」或黑色(Remotion 中的影片有時會發生此情況),請使用 remotion still 單獨渲染該幀,然後用以下命令貼上:ffmpeg -i out/reel.mp4 -i fix.png -filter_complex "[0:v][1:v]overlay=enable='eq(n,N)'" -c:a copy out/reel_ok.mp4。
之後,將影片傳遞給 sonido-reel 技能來處理音樂、特效和最終音量。
已知問題
- 字幕出現單字黏在一起("Yesto"):
<span>之間的空白在渲染時會遺失。範本已使用邊距分隔;如果你逐詞添加文字,請使用相同方法。 - 不要在影片上使用
filter: blur()或backdropFilter:會導致黑色或馬賽克幀。若要變暗,請在頂部放置一層半透明顏色層。 - Split 中的上方影片可能有自己的文字:調整
recorte_y以顯示乾淨的區域,或使用broll_desde_s選擇另一個秒數。