含語音與字幕的短影片
Pipeline: 腳本 .txt → make_video.py(edge-tts 逐句朗讀 → 音訊合併 → 根據實際時間長度產生 ASS 字幕 → 使用 ffmpeg 合成背景並燒錄字幕)→ MP4 1080x1920。
已確定的模式:現有語音 → 影片(使用者傳送 mp3 時的預設模式)
使用者於 EverAI 上建立語音(網頁版,速度 0.85),傳送 mp3 + 旁白文字。無需呼叫 API、無需複製語音、無需在本機執行語音模型(VieNeu)。
- 將旁白文字分割成
.txt檔案,每行一個簡短短語(依據逗號/句號/"..."),不要有#開頭的行,也不要[圖示]。 python3 make_video.py kichban.txt ~/Downloads/<ten>.mp4 --audio voice.mp3 --style night --no-wave --bg assets/pho-dem.mp4 --target <長度±5>- 印出每行的時間軸:重新執行上述指令並加上
--print-timing(不進行渲染)。檢查:若有行數與預期長度異常不符(依字數判斷),則合併/分割行後重新渲染。 - 截取 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-fulledge-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。