剪輯靜音(管線智能體 1)
自動編輯的第一步。取得原始錄影及其逐字稿,僅移除靜音:第一個字詞前和最後一個字詞後的空白,以及字詞間超過閾值的停頓(修剪至自然呼吸長度,絕不產生硬性零間隙)。它不會觸動說話者的字詞——錯誤開頭、重錄和口吃是「剪輯錯誤」智能體(智能體 2)的工作。
此智能體是確定性的且由逐字稿驅動,因此其輸出(*.silence-transcript.json)可乾淨地饋入後續智能體及節拍同步驗證器。
使用時機
- "剪掉靜音"、"修剪停頓"、"移除死氣沉沉的空隙"、"收緊節奏"
- 作為主編輯工作流程的第一階段,緊接在轉錄之後。
前置條件
一個逐字稿 JSON。可以是 ElevenLabs Scribe 格式
({ words: [{ text, start, end, type }], audio_duration_secs })或通用格式
{ words: [{ text, start, end }] }。使用工作區轉錄工具產生:
node scripts/transcribe-elevenlabs.mjs path/to/raw.mp4 # -> path/to/raw.json
使用方法
# 1) 僅規劃 — 計算剪輯,寫入 EDL + 重新對齊時間的逐字稿(不觸及影片)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--out-dir video-projects/<slug>/assets
# 2) 搭配影片 — 同時寫入 ffmpeg 指令(仍不執行渲染)
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --out-dir video-projects/<slug>/assets
# 3) 渲染剪輯後影片(本機 ffmpeg,重新編碼,音視頻保持同步)
# 加上 --apply 以實際執行 ffmpeg
node .agents/skills/cut-silences/scripts/cut-silences.mjs <transcript.json> \
--video video-projects/<slug>/assets/raw.mp4 --apply \
--output video-projects/<slug>/assets/edited-silenced.mp4
選項
| 標誌 | 預設值 | 說明 |
|---|---|---|
--video <path> | — | 來源影片;啟用 ffmpeg 指令/渲染 |
--out-dir <dir> | 逐字稿所在目錄 | 輸出檔案的寫入位置 |
--output <path> | <video-stem>.silenced.mp4 | 剪輯後影片路徑 |
--gap <s> | 0.55 | 視為可修剪靜音的最小停頓 |
--head-pad <s> | 0.22 | 第一個字詞前保留的靜音長度 |
--tail-pad <s> | 0.34 | 最後一個字詞後保留的靜音長度 |
--apply | 關閉 | 實際執行 ffmpeg 渲染剪輯影片 |
決策規則(靜音規則)
- 低於
--gap(0.55 秒)的停頓保留下來——這是自然的說話節奏。 - 對於被修剪的停頓,會保留自然呼吸長度,並根據上下文調整:長停頓(≥2 秒)保留 0.24 秒,句子結束符(
. ! ?)後保留 0.20 秒,其他情況保留 0.14 秒。保留的呼吸會稍微偏向上一句的結尾。 - 開頭/結尾的空白會被修剪至
--head-pad/--tail-pad。 - 刪除區間會被合併;保留區間是其補集。剪輯透過 ffmpeg 的
trim/atrim+concat濾鏡圖來渲染(寫入*.silence-filter.txt腳本並透過-/filter_complex傳遞),因此影片和音訊會保持同步。
輸出(寫入 --out-dir)
| 檔案 | 用途 |
|---|---|
<stem>.silence-edl.json | 保留/刪除區間、時長、參數——編輯決策表 |
<stem>.silence-transcript.json | 重新對齊到編輯時間軸的逐字稿(饋入智能體 2 + 節拍) |
<stem>.silence-decisions.md | 人類可讀的摘要 + 最大的修剪停頓 |
<stem>.silence-filter.txt | ffmpeg 濾鏡圖(僅在指定 --video 時產生) |
<video-stem>.silenced.mp4 | 剪輯後影片(僅在指定 --apply 時產生) |
輸出到標準輸出的 JSON 摘要包含 removed、removedPct、區間計數和輸出路徑——有助於主工作流程進行記錄和串接。
調校備註
- 談話頭 YouTube 預設值(
--gap 0.55)會從典型的原始錄影中移除約 15-20% 的純靜音。降低--gap可得到更緊湊、節奏更快的剪輯;提高則可保留更多自然的呼吸空間。 - 如果剪輯在句子邊界感覺過於激進,請提高句子斷句的呼吸長度,或提高
--gap。
交接給下一個智能體
將 <stem>.silence-transcript.json(以及已渲染的 silenced.mp4,若有渲染)傳遞給「剪輯錯誤」智能體。由於時間戳已位於編輯後的時間軸上,下游的節拍計時和 scripts/validate-beat-sync.mjs 無需額外調整即可運作。