Communitygithub.com

LeAnhTuanIT/short-video

為各種主題建立 9:16 直式短影片(TikTok/Reels/Shorts),支援越南語(或其他語言)語音與硬編字幕,從 Claude 自行編寫或使用者提供的腳本開始。適用於使用者想要製作短影片、TikTok/Reels/Shorts 影片、含字幕/語音的影片、為現有語音 mp3 檔案(例如來自 EverAI)配上字幕,或輸入 /short-video 指令。

short-video 是什麼?

此技能提供一個完整的自動化流程,用於從文字腳本生成 9:16 直式短影片。其核心 Pipeline 擷取 `.txt` 腳本,使用 edge-tts 生成語音,將音訊與字幕逐一對齊,並透過 ffmpeg 合成最終影片。它支援兩種模式:從腳本合成語音(使用 edge-tts 或 FPT.AI),以及將使用者的現有語音檔案(mp3)與文字腳本同步,無需額外 API 呼叫即可建立影片。此技能專為 TikTok、Reels 和 Shorts 等平台設計,內建多種視覺風格,包括仿夜間城市街道的「night」風格和科技教學的「ui」風格,並提供字型、音樂和背景等參數供進階使用者調整。它支援 macOS、Ubuntu/Debian 系統,Windows 可透過 WSL 執行,並已內建必要的依賴項安裝腳本。使用者只需提供腳本內容或主題,AI 即可自動完成從腳本寫作到最終影片渲染的所有步驟。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/LeAnhTuanIT/short-video-skill/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

含語音與字幕的短影片

Pipeline: 腳本 .txt → make_video.py(edge-tts 逐句朗讀 → 音訊合併 → 根據實際時間長度產生 ASS 字幕 → 使用 ffmpeg 合成背景並燒錄字幕)→ MP4 1080x1920。

已確定的模式:現有語音 → 影片(使用者傳送 mp3 時的預設模式)

使用者於 EverAI 上建立語音(網頁版,速度 0.85),傳送 mp3 + 旁白文字。無需呼叫 API、無需複製語音、無需在本機執行語音模型(VieNeu)。

  1. 將旁白文字分割成 .txt 檔案,每行一個簡短短語(依據逗號/句號/"..."),不要有 # 開頭的行,也不要 [圖示]。
  2. python3 make_video.py kichban.txt ~/Downloads/<ten>.mp4 --audio voice.mp3 --style night --no-wave --bg assets/pho-dem.mp4 --target <長度±5>
  3. 印出每行的時間軸:重新執行上述指令並加上 --print-timing(不進行渲染)。檢查:若有行數與預期長度異常不符(依字數判斷),則合併/分割行後重新渲染。
  4. 截取 1–2 個畫面檢查字幕,並回報檔案路徑與長度。如果聽不到聲音,通常是由於 Mac 將音訊輸出至 AirPods。 給使用者的說明:HUONG-DAN.md。

在其他機器上安裝

將整個目錄 ~/.claude/skills/short-video/ 複製到新機器(保持相同路徑),然後執行 bash ~/.claude/skills/short-video/setup.sh。支援 macOS 和 Ubuntu/Debian;Windows 可透過 WSL 使用。預設提供的夜間城市背景:assets/pho-dem.mp4(來自 Mixkit 的庫存素材,可商用)。

需求(已在此機器上安裝)

  • ffmpeg-full(需要 subtitles/libass 濾鏡):brew install ffmpeg-full
  • edge-tts:pipx install edge-tts(若網路錯誤則自動切換至 say -v Linh 語音)

步驟 1 — 確認簡報

根據要求取得;若缺乏則使用預設值,僅在主題完全不明確時才提問:

  • 主題/觀點 — 若無特定觀點,則自行選擇一個吸引人且具體的角度。
  • 時長 — 預設為 45–60 秒。
  • 語音 — 預設女聲 vi-VN-HoaiMyNeural;男聲 vi-VN-NamMinhNeural。其他語言:edge-tts --list-voices | grep <代碼>(例如 en-US-AriaNeural)。
  • 背景/音樂 — 使用者提供的圖片/影片,若無則使用預設漸層背景。

步驟 2 — 編寫腳本

儲存為 .txt 檔案,第一行為標題,其後每行為一句朗讀內容:

# 顯示在畫面頂端的短標題(≤ 6 個字)
一個引發好奇心的鉤子句,≤ 12 個字。
內容句子...
結尾句 + 行動呼籲。

規則:

  • 越南語長度:~2.3 字/秒(實際測量:155 字約 65 秒)。45–60 秒 → 110–140 字;30 秒 → ~65 字;15 秒 → ~30 字。
  • 每行一個句子,8–20 字。前 3 秒為鉤子(提問/驚訝事實)。中間:3–5 個具體、易記的點。結尾:CTA(儲存、追蹤、留言)。
  • 事實必須準確;健康/金融/法律主題:不進行診斷,不提供專家式的具體建議,必要時建議諮詢專家。
  • 數字/符號若容易讀錯則使用文字表示(「四 - 七 - 八」代替「4-7-8」,「百分比」代替「%」)。避免表情符號、{} \ 字元。

讓使用者在渲染前審閱腳本,除非他們已提供內容或指示直接處理。

步驟 3 — 渲染

python3 ~/.claude/skills/short-video/make_video.py kichban.txt out.mp4 \
  [--voice vi-VN-HoaiMyNeural] [--rate -5%] [--target 45-60] \
  [--bg 背景圖片或影片] [--music 背景音樂.mp3] [--gap 0.35] \
  [--pitch -8Hz] [--style default|night]
  • 現有語音: --audio voice.mp3 跳過 TTS。腳本必須與朗讀內容完全相符,每行一個簡短短語(依據逗號/句號分割);句子時間軸應對齊停頓處。使用 --print-timing 印出時間軸(通常約 12–16 字元/秒),若句子過長或過短則合併/分割行後重新渲染。
  • FPT.AI: --engine fpt --voice leminh(北部男聲;還有 banmai、thuminh 北部女聲,lannhi、linhsan 南部女聲,myan 中部女聲,giahuy 中部男聲)。需要 export FPT_API_KEY=...(金鑰在 console.fpt.ai 取得,Free Tier 每月 100,000 字元)。由於沒有每個字的時間軸,卡拉 OK 字幕會根據文字長度分配;--rate 透過 atempo 套用。切勿將金鑰寫入技能檔案中。
  • 所有引擎都產生自然的人聲節奏(每個句子速度/音高略有差異,問句後停頓較長),並進行溫暖化、壓縮、輕微迴聲處理。腳本應模仿口語,使用「...」和句中的句點來建立停頓點。
  • 北部男聲低沉、成熟(edge):--voice vi-VN-NamMinhNeural --pitch=-8Hz --rate=-10%(NamMinh 是唯一的邊緣男聲)。
  • --style night --no-wave + 腳本中無 # 行、無 [icon] 標籤 → 僅留背景與字幕。
  • --style night(「夜城」風格 Reel):標題為全大寫、字距放大、青色加底線,圖示為細線霓虹風格,字幕為全大寫逐字卡拉 OK(時間軸來自 edge-tts 的真實時間),音波為條狀。在句子開頭加上 [icon] 可替換該句的圖示:sun hourglass gift heart leaf book star eye。背景建議使用真實的夜城影片:來自 Mixkit 的免費庫存素材(https://mixkit.co/free-stock-video/night-city-street/,連結 assets.mixkit.co/videos/<id>/<id>-1080.mp4),拼接多個片段、垂直裁切,使用 setpts=1.4*PTS 放慢。
  • --style ui(科技教學影片):深色網格背景,系列標題列(# 標題)+步驟 1..n 區塊,模擬應用程式視窗,終端機鍵盤輸入,橘色標記的 *關鍵字* 字幕框。句子開頭標籤:[step:步驟名稱](進入新步驟),[card:標題|項目1|項目2](視窗,保持至下一场景),[term:指令]。朗讀快捷鍵時使用文字(「Command、Shift、三」),但在卡片中寫成「Command + Shift + 3」。範例:語音 vi-VN-NamMinhNeural --pitch=-4Hz --rate=+15% --gap 0.25。
  • 若無 --bg → 使用深藍紫色緩慢移動的漸層背景(適合柔和主題;活潑主題則應索取背景圖片/影片)。圖片 → 緩慢縮放效果。影片 → 自動循環。
  • --music 音量降至 12%,結尾淡出。
  • 腳本會印出實際時長,若超出 --target 則發出警告 → 增減句子或調整 --rate 後重新渲染。

步驟 4 — 檢查

截取一個畫面檢查字幕是否斷行或溢出: ffmpeg -v error -y -ss 5 -i out.mp4 -frames:v 1 frame.jpg 然後讀取 frame.jpg。向使用者回報影片的絕對路徑和時長。

腳本範例:技能目錄中的 example-sleep.txt。

相關技能