CapCut 字幕詞組分組工具 是做什麼的?
使用此技能來修復 CapCut 字幕中因 materials.texts[].words 陣列按中文字元拆分,導致像是「逐字顯色粗體 綠」這類範本會以字元片段而非完整詞語來滾動/螢光標示的問題。
此技能會編輯未公開的 CapCut 桌面版草稿 JSON。使用前請務必關閉 CapCut、備份草稿,並在匯出前於 CapCut 預覽中驗證。CapCut 的更新可能會改變草稿結構。
工作流程
- 找出作用中的草稿目錄。
- 若 CapCut 目前有開啟的專案,請優先使用
.locked草稿。 - 否則,使用
~/Movies/CapCut/User Data/Projects/com.lveditor.draft下最新修改的草稿。
- 若 CapCut 目前有開啟的專案,請優先使用
- 在寫入草稿檔案前,請先關閉 CapCut。若編輯器開啟中,CapCut 可能會覆蓋外部編輯的內容。
- 檢查目標字幕:
jq -r '.materials.texts[] | [(.content|fromjson.text), ((.words.text // [])|join("|"))] | @tsv' "$DRAFT/draft_info.json" - 針對草稿執行
scripts/regroup-caption-words.js。 - 重新開啟 CapCut,並以視覺方式檢查至少一個開頭、中間和結尾的字幕。
腳本
使用內附的腳本進行實際修補:
node scripts/regroup-caption-words.js \
--draft "$DRAFT" \
--fillers "呃,嗯,額" \
--backup
該腳本會修補所有找到的作用中草稿副本:
- 根目錄下的
draft_info.json - 根目錄下的
template-2.tmp Timelines/*/draft_info.jsonTimelines/*/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 在手動編輯字幕後,可能會重新產生或重寫字幕元數據。在進行大量字幕編輯後,請重新執行此技能。