旁白與文字轉語音(TTS)
旁白驅動時間軸。請在製作視覺素材前先生成旁白。
選擇引擎
| 引擎 | 位置 | 優點 | 注意事項 |
|---|---|---|---|
| ElevenLabs | 雲端 API | 最佳自然度、語音克隆 | 付費;僅克隆你已獲得同意的聲音 |
| OpenAI TTS | 雲端 API | 簡單、穩定 | 聲音選擇有限 |
| Kokoro | 本機 | 免費、品質佳、離線可用 | 需要 Python 設定 |
| Piper | 本機 | 快速、可在 CPU 上執行 | 表現力較弱 |
| 錄製的人聲 | 麥克風 | 最真實 | 需要清理 |
請將 API 金鑰儲存在環境變數或已加入 .gitignore 的 .env 檔案中。切勿列印或提交它們。
準備文字稿以利語音合成
- 將數字、單位和縮寫寫成口語形式,例如:"twenty twenty-six"、"A P I"(如果要逐字母拼讀)、"gigabytes"。
- 加入逗號以表示換氣;使用句號表示停頓;避免使用括號。
- 將難以發音的名稱放入發音清單,並先以簡短樣本測試。
- 將內容拆分為每個場景一個檔案(
audio/scene-01.mp3)。每個場景的獨立檔案讓你可以重新錄製單行,並保持時間上的靈活性。
生成(以 ElevenLabs REST API 為例)
import os, requests, pathlib
def tts(text: str, voice_id: str, out: pathlib.Path) -> None:
r = requests.post(
f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}",
headers={"xi-api-key": os.environ["ELEVENLABS_API_KEY"], "Accept": "audio/mpeg"},
json={"text": text, "model_id": "eleven_multilingual_v2",
"voice_settings": {"stability": 0.5, "similarity_boost": 0.75}},
timeout=120,
)
r.raise_for_status()
out.write_bytes(r.content)
模型名稱和端點會變更。使用前請與供應商的最新文件確認。
測量與調整節奏
ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 audio/scene-01.mp3
- 目標速度為每分鐘 140 到 160 字(字數 / 秒數 * 60)。如果某個場景超過每分鐘 180 字,請以稍有不同的語調重新生成或刪減文字;否則聽起來會很急促。
- 不要將語音時間拉伸超過約 10%;這會聽起來不自然。請改用重寫的方式。
清理錄製的聲音
# 高通濾波、輕量降噪、壓縮、音量標準化
ffmpeg -i raw.wav -af "highpass=f=80,afftdn=nf=-25,acompressor=threshold=-18dB:ratio=3:attack=5:release=80,loudnorm=I=-16:TP=-1.5:LRA=11" -ar 48000 clean.wav
去除開頭和結尾的靜音:
ffmpeg -i in.wav -af "silenceremove=start_periods=1:start_threshold=-45dB,areverse,silenceremove=start_periods=1:start_threshold=-45dB,areverse" out.wav
組裝
# 以 0.4 秒間隔連接場景檔案
python - <<'PY'
import subprocess, pathlib
files = sorted(pathlib.Path("audio").glob("scene-*.mp3"))
parts = []
for i, f in enumerate(files):
parts += ["-i", str(f)]
n = len(files)
filt = "".join(f"[{i}:a]apad=pad_dur=0.4[a{i}];" for i in range(n)) + "".join(f"[a{i}]" for i in range(n)) + f"concat=n={n}:v=0:a=1[out]"
subprocess.run(["ffmpeg", "-y", *parts, "-filter_complex", filt, "-map", "[out]", "voiceover.mp3"], check=True)
PY
接著,在 audio-mixing 中與音樂混合,並使用 captions-subtitles 加入字幕。
倫理與權利
- 僅在獲得說話者明確同意後才能克隆其聲音。
- 在平台規則或法律要求時,揭露合成語音的使用。
- 檢查 TTS 供應商的授權條款,確認是否允許商業用途。