Desi Lyric Film (印度風格動態歌詞影片) 是做什麼的?
將一首歌(使用者自己的音檔)轉換成一部 16:9 的動態歌詞影片,風格統一為手繪感: 一個插畫角色承載每句歌詞的情感、每個副歌都有一個眼神特寫、歌詞逐字以梵文(Devanagari)呈現並在下方附上羅馬拼音(Roman)對應、每一個剪輯都落在歌詞的某個音節上、整體如同逐格動畫(二次繪製、沸騰墨線、紙片剪貼)。
template/ 是一個完整且經過測試的 Remotion 專案,內含資料驅動引擎。你永遠不需要手動編寫影片:你只需要產出三個 JSON 檔案,引擎就會負責渲染。
| 檔案 | 內容 | 由誰產生 |
|---|---|---|
src/lyrics.json | 每一句歌詞:{t0, t1, dev[], rom[], times[]} | tools/transcribe_lyrics.py → tools/build_lyrics.py |
src/character.json | 表情組 + 眼睛錨點、眼部特寫圖板、外觀卡片、旋轉動作 | Atlabs MCP + tools/register_frames.py, eye_anchor.py, cu_plates.py, make_cards.py |
src/film.json | 鏡頭列表(種類、開始時間、歌詞槽位、背景、轉場、選項) | tools/plan_shots.py,然後你根據含義修改 |
請在進行每個步驟時閱讀對應的參考文件:
references/atlabs-mcp.md · references/character.md · references/lyrics-and-timing.md ·
references/shot-design.md · references/style-guide.md(精確色板、字體、動態規範) ·
references/render-deliver.md。
0. 鐵則——必須先連接 Atlabs MCP
所有角色圖像(基礎設計、表情、眼部特寫、服裝/色彩外觀)都透過 Atlabs MCP 生成。沒有替代方案:如果它沒有連線,請立即停止,直到它連線為止。
檢查:使用 ToolSearch 搜尋 atlabs generate_image get_result start_upload get_account(工具名稱皆為 mcp__atlabs__… 或 mcp__<id>__…,且經常是延遲載入的),然後呼叫 get_account——它會回傳餘額。
如果工具缺失或 get_account 失敗,請回覆以下確切步驟並等待:
此技能需要使用 Atlabs MCP 製作角色圖像,因此需要先連線(約一分鐘):
- 還沒有 Atlabs 帳號? 請在 https://app.atlabs.ai 註冊(圖片生成會消耗 Atlabs 點數;一部完整的影片大約需要 25–40 點)。
- 連線:
- Claude Code(以外掛安裝): Atlabs 已整合——輸入
/mcp,選擇 atlabs,然後登入。- Claude Code(終端機): 執行
claude mcp add --transport http atlabs https://mcp.atlabs.ai/mcp,然後/mcp→ atlabs → 登入。- Claude Desktop / claude.ai: 設定 → 連接器 → 新增自訂連接器 → 名稱輸入
Atlabs,網址輸入https://mcp.atlabs.ai/mcp→ 新增 → 連線 → 登入,然後在該對話中啟用它。- 連線完成後告訴我,我就會開始。
1. 簡報——提問,而非假設
使用 AskUserQuestion(只問一輪,然後根據合理的預設值繼續):
- 歌曲:使用者自己擁有的音檔(mp3/wav/m4a)。切勿自行下載音樂。
- 選取片段:「幫我選重點段落」(預設,30–60 秒)或使用者給予的時間戳記,或提供參考片段來比對(
tools/locate.py可在歌曲內找到片段)。 - 角色——提供選項:
- 「使用我的參考圖片」——使用者自己的照片、經他人同意的照片、或使用者擁有版權的角色圖。 使用者可以提供多張(不同服裝、不同底色背景、不同表情);每張都有用。請勿在未經同意的情況下將名人或任何真人風格化——改提供原創角色。
- 「設計一個原創角色」——可選用風格參考圖片和簡短描述(外觀、服裝風格)。
- 風格關鍵詞(選擇性):例如「印度壞女孩 Z 世代」、「溫柔浪漫」、「節慶感」、「心碎」。預設:現代印度風帶印度元素。
如果使用者在對話中分享的圖片並非磁碟上的檔案,請要求他們將圖片儲存到 refs/cards/(或提供路徑)——上傳到 Atlabs 需要檔案路徑。
2. 建立專案
cp -R <skill 目錄>/template <專案名稱> && cd <專案名稱>
npm install
uv venv -q --python 3.12 .venv && uv pip install --python .venv/bin/python numpy scipy pillow faster-whisper
mkdir -p refs && cp <歌曲檔案> refs/song.mp3
(python3.12 -m venv .venv 也可以。)在專案根目錄下,以 .venv/bin/python -I tools/<工具>.py … 執行所有 Python 工具。
該模板附帶一個示範角色、道具和示範資料,因此 npx remotion studio src/index.ts 可立即執行。
3. 讀取歌曲、選取片段、剪輯音檔——references/lyrics-and-timing.md
.venv/bin/python -I tools/beatgrid.py refs/song.mp3 --bpm-min 60 --bpm-max 180 # 節奏、節拍相位、音量條
.venv/bin/python -I tools/structure.py refs/song.mp3 # 重複段落 = 副歌
.venv/bin/python -I tools/vocal_onsets.py refs/song.mp3 --from 0 --to <長度> --json refs/onsets.json
tools/cut_audio.sh refs/song.mp3 <開始> <結束> # → public/audio/song_cut.wav
選取重複最多、能量最強的人聲段落(副歌就在那裡)。在該段落第一句人聲之前 2–4 拍的下拍開始,在下一個段落前的呼吸點結束。記下 start——影片時間 = 歌曲時間 − start。
4. 歌詞——自動化,完全來自使用者的音檔
.venv/bin/python -I tools/transcribe_lyrics.py refs/song.mp3 --from <開始> --to <結束> --lang hi --onsets refs/onsets.json
.venv/bin/python -I tools/build_lyrics.py --transcript refs/transcript.json --slice <開始> <結束> --onsets refs/onsets.json
--lang hi會輸出梵文,--lang en會輸出羅馬化的 Hinglish;build_lyrics.py會同時寫入兩種文字。- 如果轉錄工具回報無法辨識的唱段(例如速度極快、多層人聲),請詢問使用者是否有純文字歌詞或時間戳表格;如果有,則使用
build_lyrics.py --table lyrics.txt …(或--text)。如果沒有,則繼續:那些歌詞片段會保持無文字,規劃工具會為它們安排純視覺鏡頭。 - 歌詞只能來自使用者的音檔經轉錄工具,或來自使用者提供的文字。 絕對不要自己輸入歌詞、不要靠記憶填空,也不要將歌詞文字回覆在對話中——只需回報數量與時間點。
5. 角色——Atlabs MCP——references/character.md
一個基礎繪圖,所有其他圖片都是該基礎圖的編輯版本,因此角色永遠不會走樣。預設模型:
Nano Banana 2.1(nano_banana_2_1)用於從參考圖生成基礎圖和所有編輯(一致性最佳);
GPT Image 2.5 Sunburst(gpt_image_2_5_sunburst)用於照片需更強風格化處理時;
Seedream 5 Pro(seedream_5_pro)用於新道具或全景圖板。
- 基礎圖:乾淨的上半身、純奶油色背景、符合指定風格(參考圖或原創)。
- 表情(基礎圖的編輯版本):
正面, 側面, 閉眼, 痛苦, 釋懷, 害羞, 夢幻, 感動(加上基礎圖作為「中性」/ 側目)。register_frames.py將它們排列在同一畫布上;eye_anchor.py --set main …找到角色的眼睛位置。 - 可選第二種造型(例如較暗的服裝)配上
正面, 側面, 閉眼, 痛苦, 釋懷, 夢幻→ 用於沉重情緒。 - 眼部特寫帶 + 編輯版本
半開, 閉眼, 淚水, 凝視, 魅惑→cu_plates.py,然後eye_anchor.py --closeup。 - 4–6 張外觀卡片:同一個角色、不同的現代服裝 + 色板中的純色背景 + 塗鴉,
每張都有一個閉眼編輯版本 →
make_cards.py。 - 全身旋轉動畫 →
keyout.py。 獨立生成任務請平行提交;使用sheet.py製作聯絡表,確認後再繼續。告知使用者所使用的模型和花費的點數。
6. 規劃影片——references/shot-design.md
.venv/bin/python -I tools/plan_shots.py --bpm <BPM> --beat0 <第一個下拍,影片時間秒> --duration <長度秒> --audio audio/song_cut.wav
然後閱讀每句歌詞的意義(從檔案中讀取,不要將歌詞貼到對話中),並修改 src/film.json:
- 每個副歌都是一個眼神特寫(角色的眼部特寫,每次用不同的視線,或使用眼睛道具);連續兩次不能相同
- 痛苦表現在角色臉上(裂痕、變暗的地面),而釋懷發生在治癒的詞語上——永遠不要出現真實的傷口
- 觸碰 / 感受是「感動」(花朵盛開、漣漪),而不是手放在心上;快節奏歌詞則用外觀卡片快速切換
- 每個鏡頭的背景都不同(使用外觀卡片的顏色),畫框永不改變;轉場方式要多樣
保持一個連貫的故事:她是主角,她的眼睛是核心意象。
7. 檢查,然後渲染——references/render-deliver.md
node tools/stills.mjs out/st 0.5 <影格編號…> && .venv/bin/python -I tools/sheet.py out/st.jpg out/st/*.jpg
./tools/make_film.sh <名稱> # → out/<名稱>.mp4 (1920×1080, 24 fps)
檢查每句歌詞第一個字的靜止幀:歌詞清晰可見且在畫面內、副歌時眼睛是睜開的、表情符合歌詞、沒有空白鏡頭。修正後重新渲染變更的影格,然後渲染整部影片(約 4–6 分鐘)。將結果複製到使用者的「下載」資料夾並發送。提醒一句:商業歌曲在某些平台上可能會被靜音;使用者有責任確保擁有發布此影片的權利。
常見陷阱(來自實際執行經驗)
- feTurbulence 將種子 0 和 1 視為相同的圖案——沸騰 / 顆粒效果的種子從 1 開始(已在
kit.tsx中修正);否則開場會卡住 4 個影格後才跳動。 - Whisper 會漏掉非常快速的歌唱;但音節起始點仍然能夠為那些段落提供時間點——切勿猜測歌詞。
- Remotion 的內建 headless shell 可能在 macOS 上崩潰;
remotion.config.ts使用已安裝的 Chrome。並行數保持為 6。 - 註冊的編輯版本必須來自同一個基礎圖片;如果某個編輯版本走樣(不同的姿勢/裁切),請重新生成它,不要強行使用。
- 深色背景上的文字會自動切換成奶油色/桃色字體——請根據情緒選擇背景顏色,而不是根據文字。