Communitygithub.com

CapCut 字幕詞組分組工具

重新組織 CapCut 範本支援的字幕詞時間軸元數據,並移除 CapCut 桌面版草稿 JSON 中的填充詞。適用於中文字幕、自動捲動字幕、卡拉 OK/螢光標示範本或逐字效果將實際詞語拆散、顯示為字元級別區塊,或需要移除「呃」這類填充詞,同時保留緊湊的文字範本軌道。

CapCut 字幕詞組分組工具 是什麼?

此技能旨在修復 CapCut 字幕中 `materials.texts[].words` 陣列按中文字元拆分所引起的問題。當使用如「逐字顯色粗體 綠」這類範本時,會導致滾動/螢光標示顯示的是字元片段而非完整詞語。 此技能會編輯 CapCut 桌面版草稿 JSON。使用前請務必關閉 CapCut、備份草稿,並在匯出前於 CapCut 預覽中驗證。CapCut 的更新可能會改變草稿結構。 工作流程包括:找到作用中的草稿目錄(優先使用 `.locked` 草稿),然後執行 `scripts/regroup-caption-words.js` 腳本,可選用 `--fillers` 參數移除填充詞(如「呃」、「嗯」、「額」),並使用 `--groups-file` 參數提供自訂分組對應檔,以進行更精細的編輯控制。 驗證步驟包括使用 `jq` 檢查 JSON 語法、使用 `grep` 確保填充詞已被移除,以及確認合併後的詞組與顯示文字一致。此技能支援 macOS 和 Windows 的 CapCut 桌面版。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cinnabarhorse/capcut-skills/tree/main/skills/capcut-caption-word-groups

在你喜歡的 AI 中提問

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

說明文件

CapCut 字幕詞組分組工具 是做什麼的?

使用此技能來修復 CapCut 字幕中因 materials.texts[].words 陣列按中文字元拆分,導致像是「逐字顯色粗體 綠」這類範本會以字元片段而非完整詞語來滾動/螢光標示的問題。

此技能會編輯未公開的 CapCut 桌面版草稿 JSON。使用前請務必關閉 CapCut、備份草稿,並在匯出前於 CapCut 預覽中驗證。CapCut 的更新可能會改變草稿結構。

工作流程

  1. 找出作用中的草稿目錄。
    • 若 CapCut 目前有開啟的專案,請優先使用 .locked 草稿。
    • 否則,使用 ~/Movies/CapCut/User Data/Projects/com.lveditor.draft 下最新修改的草稿。
  2. 在寫入草稿檔案前,請先關閉 CapCut。若編輯器開啟中,CapCut 可能會覆蓋外部編輯的內容。
  3. 檢查目標字幕:
    jq -r '.materials.texts[] | [(.content|fromjson.text), ((.words.text // [])|join("|"))] | @tsv' "$DRAFT/draft_info.json"
    
  4. 針對草稿執行 scripts/regroup-caption-words.js。
  5. 重新開啟 CapCut,並以視覺方式檢查至少一個開頭、中間和結尾的字幕。

腳本

使用內附的腳本進行實際修補:

node scripts/regroup-caption-words.js \
  --draft "$DRAFT" \
  --fillers "呃,嗯,額" \
  --backup

該腳本會修補所有找到的作用中草稿副本:

  • 根目錄下的 draft_info.json
  • 根目錄下的 template-2.tmp
  • Timelines/*/draft_info.json
  • Timelines/*/template-2.tmp

它會同時更新 materials.texts[].words 和 extra_info.subtitle_fragment_info_list[].subtitle_cache_info。

手動分組對應

為了更好的編輯控制,可以傳遞一個 JSON 映射檔,將顯示的文字對應到想要的詞組:

{
  "你會擔心AI就是呃奪走你的工作嗎": ["你會", "擔心", "AI", "就是", "奪走", "你的", "工作", "嗎"],
  "以及他的呃知識庫比我們都要多": ["以及", "他的", "知識庫", "比", "我們", "都要", "多"]
}

然後執行:

node scripts/regroup-caption-words.js \
  --draft "$DRAFT" \
  --groups-file groups.json \
  --fillers "呃,嗯,額" \
  --backup

映射檔可以使用移除填充詞前的原始文字。每個詞組列表串接後必須等於移除填充詞後的清理過的字幕文字。

驗證

修補後,請驗證:

jq empty "$DRAFT/draft_info.json" "$DRAFT/template-2.tmp" "$DRAFT"/Timelines/*/draft_info.json "$DRAFT"/Timelines/*/template-2.tmp
rg '呃|嗯|額' "$DRAFT/draft_info.json" "$DRAFT/template-2.tmp" "$DRAFT"/Timelines/*/draft_info.json "$DRAFT"/Timelines/*/template-2.tmp

同時驗證合併後的詞組是否等於顯示文字:

jq -r '.materials.texts[] | [(.content|fromjson.text), ((.words.text // [])|join("|"))] | @tsv' "$DRAFT/draft_info.json"

備註

  • 保留範本結構。不要將字幕扁平化為逐詞或逐字片段。
  • 移除填充詞會改變顯示文字,但不會影響影片/音訊的時間。
  • 自動分詞使用 Intl.Segmenter("zh", { granularity: "word" });若字幕很重要,請務必檢查結果。
  • 範本渲染器的修補(例如將 wordCountPerPageLimit(3) 改為 2)只會改變每頁顯示的元數據條目數量,無法修復字元層級的詞元數據。
  • CapCut 在手動編輯字幕後,可能會重新產生或重寫字幕元數據。在進行大量字幕編輯後,請重新執行此技能。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能