聲音
腳本路徑相對於此 SKILL.md,而 speak.py 從影片資料夾執行。此步驟為選用:來自其他工具的音訊或錄音也可以直接使用。將它們放在 audio/voice/<台詞 ID>.wav,或在台詞上設定 file 欄位。
用對方的語言與他們交談。
設定金鑰(僅需一次)
費用由使用者自己承擔。請要求他們在自己的終端機中執行以下指令:
python <dula-start 資料夾>/scripts/configure.py
在 Claude Code 中,他們可以輸入 ! python <路徑>/configure.py。
絕對不要在對話中索取金鑰,也不要讀取或列印 ~/.dula-craft/config.env。 若要檢查是否已設定金鑰,請使用 configure.py --status。如果有人將金鑰貼到對話中,請告訴他們在控制台撤銷該金鑰並建立一個新的。
設計聲音
在 config/film.json 的頂層加入 voices:
"voices": {
"mochi": {"desc": "一個約八歲的男孩,聰明活潑,語速快,呼吸輕盈"},
"gran": {"desc": "一位七十歲的婦女,溫暖略帶沙啞,語速慢,咬字非常清晰"}
}
台詞可以包含 delivery 欄位:
{"id": "l03", "who": "mochi", "text": "真、真的嗎?", "delivery": "又驚又喜,第一個字顫抖,結尾上揚"}
可選的聲音欄位:lang 設定語言(預設為台詞的語言);speaker 設定官方的火山引擎聲音 ID;reference 指向使用者有權使用的參考音訊。
請使用英文或台詞的語言來撰寫 desc 和 delivery。描述聲音本身:年齡、緊繃感、氣息、節奏和重量。僅寫「快樂」無法改變聲音。不要寫「聽起來像某個演員或角色」,也不要選擇模仿知名角色或真人的聲音。聲音也存在肖像權和版權風險。
生成
python <此資料夾>/scripts/speak.py --dry-run # 在不花費任何費用的情況下預覽提示
python <此資料夾>/scripts/speak.py
每個角色的第一句台詞會成為該角色後續台詞的聲音參考,因此請先聆聽第一句台詞。如果聽起來不對,請修改 desc 並重新生成。修改第一句台詞後,請使用 --only 重新生成該角色的後續台詞,使其跟隨新的聲音。
當你修改台詞或聲音並再次執行時,只有變更的部分會被重新生成。
環境音與音效
python <此資料夾>/scripts/speak.py --sound "一個安靜的老房間,偶爾遠處有鳥叫" --seconds 10 --out audio/sfx/room.wav
務必提供 --seconds。 計費取決於長度,若未指定,一段音訊可能長達 30 秒或更久。這只是一個近似值,非常短的請求往往會生成較長的結果。生成的音訊剪輯通常音量偏低,因此請在 film.json 中為故事音效設定 level_db(請參閱 film.json 參考)。
一次只生成一種內容。不要在同一個提示中要求同時生成對話、音效和音樂,否則你無法分別調整音量,而且口型也會對不上。
檢查結果
- 如果可以,請聆聽。如果無法聆聽,請告訴使用者「這段音訊尚未經人耳檢查」。
- 你可以自行檢查的事項:確認長度合理(一句短台詞長達 5 秒就是有問題)。如果有可用的語音轉文字工具(如 Whisper),請將其文字與劇本比對。非常輕微的詞語可能會遺漏,這是需要重新生成的跡象。
delivery只是一個請求,並非精確的控制。尤其是停頓長度不可靠,因此如果節奏不對,請縮短台詞或重新生成。- 相同的提示每次都會產生不同的結果,因此出現錯誤時請重新生成。
常見問題
| 症狀 | 解決方法 |
|---|---|
金鑰被拒絕,或未啟用 Audio Generation 1.0 | 檢查該服務是否已啟用。金鑰必須來自語音控制台,Ark 金鑰無效 |
| 某個詞被誤讀 | 重新生成,或修改該句台詞 |
| 多句台詞聽起來不像同一個人 | 確認第一句台詞是正確的,然後使用 --only 重新生成後續台詞,或設定 speaker |
| 台詞結尾被截斷 | 要求更慢的 delivery,或重新生成 |