/fabrica-videos-corte — 自動剪輯
代理影片工廠的技能。清理口語錄製:去除靜音、錯誤、口吃和重複鏡頭,只保留每個句子的最佳版本。原始檔案永遠不會被修改。
你是影片剪輯師。請在專案根目錄使用終端命令。TRABALHO = trabalho 資料夾。
何時使用
- 客戶發送錄製內容並說「清理」、「剪掉停頓」、「去除錯誤」。
- 在
fabrica-videos-rapido和fabrica-videos-reels技能內部,在同步動畫之前使用。
運作方式
停頓會自動去除:腳本透過音訊檢測靜音。錯誤或重複鏡頭則由你(閱讀文字的人)決定。客戶將透過報告和聽取結果來確認。
逐步操作
- 工作室格式的錄製內容。 如果來自手機:將原始檔案複製到
TRABALHO\originais\,然後執行npm run converter -- "<original>" <slug>(會生成TRABALHO\public\gravacao-<slug>.mp4)。也適用於非 4K HDR 的錄製內容:轉換器會將影片旋轉為縱向,裁剪為 1080×1920,並轉為 30 fps。從轉換後的檔案和原始檔案中各提取一個畫面(ffmpeg -ss 20 -i <arquivo> -frames:v 1 ...)並進行比較:旋轉和顏色必須一致。 - 轉錄:
npm run legendar -- "trabalho\public\gravacao-<slug>.mp4"(背景執行;錄製 2 分鐘約需 1 分鐘)。 - 分析:
npm run cortar -- analisar "trabalho\public\gravacao-<slug>.mp4"→ 產生cortes\gravacao-<slug>.cortes.json和cortes\gravacao-<slug>.falas.md(將錄製內容以表格形式呈現,包含時間、停頓和「似乎在第 N 句重複」的提示)。 - 決定要移除的內容。 閱讀整個語句表格,並填寫
.cortes.json中的remover列表:- 重複鏡頭:保留最後一個完整的鏡頭(當他出錯時會重新開始);之前的鏡頭移除:
{ "falas": [2, 3], "motivo": "errou e recomeçou" }; - 同一句話完整說了兩次,中間有長時間停頓(在實際錄製中可能是最後的 CTA):他不喜歡第一次所以重複了。保留最後一次,並在給他的訊息中說明哪一次被刪除,以便他可以替換;
- 開始前的熱身(「來吧」、「好」、「聊天」)以及 CTA 之後的所有內容:移除;
- 一句話中間的口吃或單個詞:
npm run cortar -- palavras cortes\gravacao-<slug>.cortes.json <nº>會逐字顯示時間;使用{ "de": 12.30, "ate": 13.10, "motivo": "gaguejou" }; - 腳本外的評論(「不,等等」、「再來」、「停」):移除;
- 有意的停頓(數字前的懸念):放入
manter,例如:{ "de": 20.1, "ate": 21.4 }; - 如果存在腳本(
roteiros\<slug>.md),進行比較:保留的鏡頭是說出腳本文字的那個,或者如果他改變了台詞,則是最完整的那個。 如果在兩個都說了不同內容的好鏡頭之間猶豫,不要剪:去問他。
- 重複鏡頭:保留最後一個完整的鏡頭(當他出錯時會重新開始);之前的鏡頭移除:
- 套用:
npm run cortar -- aplicar cortes\gravacao-<slug>.cortes.json→ 產生TRABALHO\public\gravacao-<slug>-limpa.mp4和cortes\gravacao-<slug>.relatorio.md(移除了什麼、時長、原因以及原本的文字)。 - 無需聽取即可確認: 轉錄乾淨的影片(
npm run legendar -- "<...-limpa.mp4>"),然後閱讀npm run falas -- legendas\gravacao-<slug>-limpa.json。三件事要檢查:- 文字必須是他想說的,沒有單詞被從中間切斷,也沒有錯誤遺留(在第一次實際處理時,遺留了一個「好。」的熱身內容:缺陷就是這樣出現的);
- 「之後的停頓」列不能有任何大於約 0.8 秒的內容:乾淨影片中的長停頓是兩個剪輯之間遺留的部分;
- 開頭和結尾:從乾淨影片中提取一張畫面拼貼(
ffmpeg -i <limpa> -vf "fps=1/2.5,scale=180:-1,tile=7x2" -frames:v 1 <folha.jpg>),並檢查他是否在畫面內且從第一幀到最後一幀都在說話。 如果有遺留,調整remover並重新套用;如果缺陷來自腳本,修正cortar.mjs並在此處記錄。
- 展示給他: 發送乾淨的影片以及報告摘要:剪輯前後的時長、剪輯次數、你決定移除的語句(非停頓)、以及乾淨影片中每個接合點的位置(從
.cortes.json的resultado.fica中加總保留片段的時長)。聽覺確認由他負責。
調整(在 .cortes.json 的 config 中修改,然後重新套用)
| 欄位 | 預設值 | 功能 |
|---|---|---|
pausaMin | 0.5 秒 | 從此大小的靜音開始被剪掉。數值越大,聽起來越自然,剪輯越少。 |
folga | 0.12 秒 | 每次剪輯前後保留的呼吸空間。如果語句聽起來太連貫,調高到 0.18。 |
folgaFinal | 0.35 秒 | 影片結尾保留的靜音。 |
ruidoDb | 自動 | 判定為靜音的門檻。房間嘈雜時,在命令結尾用更高的數值重新執行 analisar(例如:-32)。 |
腳本如何進行剪輯(根據第一次實際錄製進行審查)
- 停頓: 根據音訊中測量的靜音。同一停頓中被最多 0.1 秒的爆音分開的部分會合併為一個停頓。
- 開頭和結尾: 第一個單詞之前和最後一個單詞之後的所有內容(他調整姿態、走出畫面)會被移除,開頭保留 0.12 秒,結尾保留
folgaFinal。 - 標記在
remover中的語句: 剪輯從保留的最後一個單詞之後的第一個停頓開始,到保留的下一個單詞之前的最後一個停頓結束。主導的是音訊的靜音,而不是 Whisper 的時間。
已知限制
- Whisper 的時間戳記:在實際錄製中,長時間停頓後的語句開頭可能延遲約 0.4 秒,而單詞結尾可能有 ±0.25 秒的誤差。剪掉整個語句會接觸到靜音,不受此影響。但是,在句子中間(口吃,兩側都沒有靜音)的剪輯僅依賴 Whisper 的時間:需更仔細檢查這些點,並請他聆聽。這種情況在實際錄製中尚未出現。
- 小於
pausaMin的停頓會保留(這是句子之間自然的呼吸)。 - 畫面中的生硬剪輯:在分割畫面中這是正常的。如果跳躍令人困擾,直接告訴他,而不是發明轉場。
- 單次處理超過 150 個片段時,腳本會拒絕:請提高
pausaMin。