字幕
目標:讓觀眾毫不費力就能閱讀的字幕。每個字幕都是一個簡短、完整的語意片段,精確對應到每個字詞的發音時間,並固定在影片的同一位置。
這是編輯順序中的第五步:A-roll 剪輯、B-roll、框架、標題、字幕。它是在已經過框架處理和標題添加的影片上運行的,因此字幕可以避開標題。
此技能專為 Claude Code 和 Runneth 設計。
開始之前:工具
在 Runneth 中,所有工具都已安裝完畢:請跳過此部分。
在 Claude Code 中,此技能需要 video-editing-setup 技能安裝的免費影片工具。請安靜地檢查 ~/.video-editing-tools/bin/ffmpeg -version 是否可以執行。如果可以,請在此技能所有提及 ffmpeg、ffprobe 或 python3 的地方使用 ~/.video-editing-tools/bin 中的工具(ffmpeg、ffprobe、python),然後繼續。如果無法執行,請先遵循 video-editing-setup 技能,然後再回到此處。
字體: Figtree Bold,此技能使用的唯一字體。這是一個免費的 Google 字體。請安靜地檢查它是否已安裝在電腦上或專案旁的 fonts 資料夾中。如果沒有,請詢問:「這會用到 Figtree,一個免費的 Google 字體。要我幫你下載嗎?」如果回答是,請從 Google Fonts (fonts.google.com/specimen/Figtree) 下載 Figtree Bold 檔案到專案旁的 fonts 資料夾中,然後繼續。此檢查也適用於 Runneth。
所需資訊
- 已完成框架處理並包含標題(或其時間軸)的影片。
- 腳本(如果有),以確保人名和產品名稱拼寫正確。
- 標題出現在螢幕上的時間及其位置。
第 0 步:先詢問樣式
逐一詢問以下問題,等待每個回答:
- 「你想要逐字字幕,還是一次顯示幾個字?」
- 僅在選擇一次顯示幾個字時:「你希望正在講的那個詞以不同顏色亮起嗎?」
- 僅在回答「是」時:「你想要哪種顏色?」提供亮黃色 (#FFFF3A) 作為預設選項,或使用他們的品牌顏色。
第 1 步:取得每個字及其時間點
- 使用音檔轉寫功能(faster-whisper
base,word_timestamps=True,vad_filter=False)來轉寫影片自身聲音,並取得每個字的時間點。時間點必須來自這個確切的影片,因為每次剪輯都會改變時間。 - 對於人名、品牌和產品名稱,使用腳本中的拼寫,並保留轉寫結果的時間點。
- 每個說出來的字都有一個字幕。沒有說出來的字就不會有字幕。
第 2 步:按語意分割成塊(僅限一次顯示幾個字模式)
- 通常每個區塊 1 到 3 個字,最多約 5 個字,當這樣能保持一個短語的完整性且仍適合寬度時。
- 保持在一起: 名詞與其修飾詞(「a sleep drink」)、名稱(「Claude skill」)、動詞與其附屬詞(「go to bed」)以及簡短的完整想法(「but that's how I felt」)。
- 每個區塊以一個承載意義的詞結尾。 小詞(the, a, of, to, and, because, that, I)則開始下一個區塊。
- 每個區塊從其第一個字開始顯示,直到下一個區塊開始,這樣螢幕永遠不會在句子中間出現空白閃爍。
- 像觀眾一樣從頭到尾閱讀整個列表,修正任何讀起來不順暢的分割。
第 3 步:外觀
每個字幕都使用 Figtree Bold、白色字體、黑色描邊。沒有背景框、沒有陰影、沒有彈入或彈跳效果:字幕只需出現即可。主要使用小寫字母,I、人名和品牌名稱大寫,結尾沒有句號或逗號。
- 逐字模式: 約 140px,6px 描邊,一次只顯示一個字。每個字會停留在螢幕上,直到下一個字出現。長字會縮小以適合約 720px 的寬度。跳過第 2 步的分割。
- 一次顯示幾個字模式: 約 60px,3px 描邊,使用第 2 步產生的區塊。
- 啟用單詞亮色標記: 正在說的詞在區塊內變為所選顏色,類似卡拉 OK 效果。
- 未啟用: 整個區塊保持白色。
第 4 步:放置位置
- 置中,位於胸部高度, 在 1080x1920 的影片中大約 y 1260 到 1305:低於下巴,高於應用程式的字幕和按鈕。
- 在安全區域內: 安全區域來自 post-preview 技能:在 1080x1920 的畫面上,將所有內容保持在 x 100 到 880,y 290 到 1340 的範圍內(這是 Reels、Stories、Feed、TikTok 和 Facebook 都安全的唯一框)。當某個元素靠近邊緣時,請查閱 post-preview 以了解該位置確切的遮蓋區域。因此,置中的字幕需要將每個字母(包括描邊)保持在 x 200 到 880(約 680px 寬)以及 y 1340 以內。測量每個區塊的寬度;太寬的區塊需要再次分割。
- 避開標題。 當標題顯示在螢幕上時,字幕應位於其下方並保持清晰的間距;當標題位置較低時,字幕應在安全區域內向下移動,而不是與之重疊。
- 整個影片保持在同一個位置, 這樣視線總知道該往哪裡看。
- 字幕位於嘴巴下方,絕不跨越臉部。 每個字幕都要避開眼睛、鼻子和嘴巴。如果臉部位置過低,導致字幕位置會遮蓋到臉部,那表示框架有問題:將其送回框架步驟進行修正(或在修正期間將字幕向下移動至安全區域內)。
第 5 步:生成與嵌入
- 將字幕寫入一個 ASS 字幕檔案。在啟用單詞亮色標記時,每個單詞使用一個事件,以便顏色隨語音移動。字距通過內聯的
\fsp標籤設定。 - 將渲染器指向一個僅包含 Figtree Bold 檔案的字體資料夾,以確保使用正確的字重:
ass=captions.ass:fontsdir=fonts。 - 從全畫質影片進行一次性嵌入(x264, slow, crf 14 到 18),音訊原樣複製。
第 6 步:在任何人看到之前進行檢查
- 每個單詞出現一次且準時: 將字幕列表與轉寫結果逐字比對。
- 每個區塊的一個畫面: 檢查是否在安全區域內,沒有被截斷,沒有與標題重疊,且整個字幕位於嘴巴下方。使用人臉偵測器或逐幀檢查;任何字幕部分遮蓋臉部都視為檢查失敗。
- 啟用單詞亮色標記時,顏色應準確落在正在說的詞上, 在影片中的幾個時間點進行檢查。
第 7 步:向編輯學習
當編輯者更改了分割、單詞或外觀時,詢問原因(除非他們主動說明)。將原因作為一條規則寫入下方的「來自編輯的字幕規則」中,措辭應描述應該為真的情況。你自己推斷出的原因需標記為「(AI)」,並且永遠不會更改規則。
來自編輯的字幕規則
(初始為空。每次編輯給出規則時添加。)