Communitygithub.com

数字人视频生成

用一张照片、一段声音样本和一份文案,生成一段本人出镜的竖屏口播短视频。整合 Fish Audio 声音克隆、Seedance 2.0-mini 音频驱动口型、Suno 背景音乐、WhisperX 字幕与 ffmpeg 合成,全程调用公开 API,可被任何智能体直接执行。

数字人视频生成 是什麼?

本技能自动构建一条完整的「数字人口播视频」流水线。用户只需提供文案、形象照和 15-30 秒的声音样本——如果用户没有合适的照片,可以用 GPT Image 2 生成。系统会先克隆声音(Fish Audio s2.1-pro-free 免费层),再让 Seedance 2.0-mini 根据音频驱动照片中人物的口型,同时用 Suno 生成背景音乐、用 WhisperX 进行语音转写并制作带关键词高亮和卡拉OK 推进效果的 ASS 字幕,最后用 ffmpeg 将各部分合成 1080×1920 竖屏视频。 该技能在 WorkBuddy、豆包、GPT、Codex、Claude Code 等任何能运行 Python 和 ffmpeg 的 AI 代理上均可执行。完整流程分为五个阶段(声音 → 视频 → BGM → 字幕 → 合成),每阶段都有门禁检查,状态存储于 output/state.json 以实现断点续跑。整条流水线的参数和陷阱均经过真实项目验证(见 references/),并严格遵循安全边界:只连接四个文档化端点,API Key 仅存于进程内存且退出即清除。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/dqtx760/digital-human-video-skill/tree/main

在你喜歡的 AI 中提問

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

說明文件

數字人影片生成

這個技能做什麼

輸入三樣東西——一份文案、一張形象照、一段聲音樣本——產出一條本人出鏡的直式口播影片: 克隆本人的聲音唸文案,用 Seedance 2.0-mini 讓照片中的人物按音訊對嘴型,配 Suno 產生的 BGM, 燒錄含關鍵字高亮與卡拉OK 推進的豐富樣式字幕,最後 ffmpeg 合成。全程只呼叫文件化的公開 API, 任何能跑 Python 和 ffmpeg 的智慧體都能按本技能執行,不依賴特定客戶端。

整條管線的每個參數、每個陷阱都在真實專案中驗證過(見 references/),不是紙上方案。

開始前必須向使用者要齊的輸入

  1. 文案:存為專案根目錄 script.md,每句一行,格式為「1. 台詞」「2. 台詞」。句子是分段 產生的單位,一句太長(超過 15 秒)就拆成兩句。
  2. 形象照:assets/ 下的照片,直式 9:16 最佳(例如 1152×2048)。照片品質直接決定 成品品質:正臉、光線勻、不戴墨鏡口罩。使用者沒有合適照片時,用 GPT Image 2 產生 (見 references/api-reference.md),並要求使用者確認形象後再進入影片階段。
  3. 聲音樣本:assets/ 下 15–30 秒乾淨人聲(無背景音樂、無殘響),用於 Fish Audio 克隆。
  4. 兩個 API Key:Fish Audio 和 APIMART 各一個。用環境變數傳入,禁止寫入任何檔案、 禁止出現在命令回顯裡。腳本從環境變數讀取,缺 key 時給出提示並退出,不會落盤。

成本與帳號

組成部分模式成本(元)模型來源備註邀請連結
人物GPT image 20.1APIMART API僅無照片時產生https://apimart.ai/register?aff=QVui
影片Seedance 2.0-mini10APIMART API720x1280,按秒計費https://apimart.ai/register?aff=QVui
BGMSuno0.35APIMART API純音樂模式,一次兩首
聲音克隆s2.1-pro-free0Fish Audio API免費層,voice_id 永久復用https://fish.audio/?aff=X7QT3YAX3N4Q4
字幕whisperx small0本地執行一次性裝好環境

實測口徑:Seedance 2.0-mini 720p 約 0.039 美元/秒,一條 30 秒影片約 12 元;Fish Audio 克隆需帳號有餘額(0/0 額度會回傳 403),TTS 走免費層不收費;Suno 每首 0.05 美元。 一條完整影片的現實成本約 10–13 元。

五階段流程

每個階段有門禁:不滿足就不進入下一階段。狀態存 output/state.json,腳本可斷點續跑。

Stage A 聲音(Fish Audio)

  1. python scripts/avatar_voice.py clone:上傳聲音樣本建私有克隆模型,拿回 voice_id。
  2. python scripts/avatar_voice.py tts:按 script.md 逐句合成 WAV。
  3. python scripts/avatar_voice.py fixwav:修復串流 WAV 檔案頭(Fish 回傳的頭宣告長度 大於實際,不修復部分解碼器會截斷音訊)。
  4. python scripts/avatar_voice.py qc:逐句檢查時長、平均音量、削頂。

門禁:全部句子音量不低於 -30dBFS、無削頂。預估時長只是參考,不拿它當硬目標—— 為湊時長做變速是明確禁止的(見鐵律)。使用者試聽確認音色像不像本人,才算過。

Stage B 影片(Seedance 2.0-mini)

  1. python scripts/avatar_video.py upload-image:形象圖傳到 APIMART 拿公開網址。
  2. python scripts/avatar_video.py host-audio:每句 WAV 經 tmpfiles.org 托管,解析出 /dl/ 真實直連(APIMART 沒有音訊上傳端點;直連 60 分鐘過期,傳完立即提交)。
  3. python scripts/avatar_video.py submit:逐句提交,核心參數 generate_audio=False (影片靜音,嘴型由外掛音訊驅動——這是數字人路線的開關)。duration 按音訊時長向上 取整,單段費用估算超過 1 美元自動熔斷。
  4. python scripts/avatar_video.py poll + download:輪詢下載。

門禁:抽偵檢查人物不崩、不換臉;嘴部有張合。換了音訊必須重跑本階段——舊影片的 嘴型是對著舊音訊驅動的,直接換音軌不等於同步。

Stage C BGM(Suno)

  1. 讀文案寫音樂 brief(風格/情緒/BPM/能量曲線/避免項),範式見 references/prompts.md。
  2. python scripts/avatar_bgm.py generate:instrumental 純音樂模式出兩首候選。
  3. python scripts/avatar_bgm.py mix:裁剪、淡入淡出、壓到人聲下約 -16dB、 sidechaincompress 側鏈閃避,混進成片。
  4. 使用者試聽選一首。音樂審美是主觀的,自動化到「出合格候選」為止,選曲留給人。

Stage D 字幕(ASS 豐富樣式,本地零成本)

不依賴任何線上服務,用 ASS/libass 實現一套接近專業剪輯軟體的字幕效果。avatar_caption.py 的六種能力(每一項都逐偵抽像素驗證過,不是紙上說明):

能力怎麼配說明
Cue 分組script.md 台詞裡寫 `
關鍵字高亮spec.keywords例如 AI→青色、5000人→金色,跨中西文的詞整體命中
卡拉OK 逐字推進spec.karaoke.enabled讀到哪個字亮到哪個字,讀過的不回退
Dual Textspec.dual_text說「十塊」畫面顯示「10塊」,口語與書面分離
時間窗換樣式spec.emphasis指定 3–6 秒用更大字型/別的顏色,做重點句
中英雙軌 + 排版動效spec.points中文主軌 + 英文要點軌,帶 \fad 淡入、\t 縮放彈出
python scripts/avatar_caption.py spec    # 寫出 output/caption-spec.json 模板
python scripts/avatar_caption.py all     # 產生 ASS + 燒錄成 digital-human-captioned.mp4

字幕文案來源優先級:--srt 指定 > whisperx 的 output/digital-human.srt > voice/qc.json 時長 + script.md 原文。有台詞原文時優先使用原文(加 --prefer-script), 它比 ASR 轉寫準,且不需要安裝 whisperx。

兩個必須知道的 libass 約定(都踩過坑,見 references/pitfalls.md):卡拉OK 的未讀色是 SecondaryColour、讀過切 PrimaryColour 並保持;\k 的單位是釐秒且總和必須等於該條 Cue 的時長,寫成百分比會讓卡拉OK 在一秒內跑完。

使用者用剪映等工具配字幕時,本階段可跳過,但要在交付說明裡講清楚。

Stage E 合成與品檢

四段影片按音訊時長 trim 對齊,縮放 1080×1920,30fps,音軌用 Stage A 的 TTS (影片自帶音軌丟棄),ffmpeg 合成。合成命令模板在 references/prompts.md。 品檢:總時長與各段之和一致、波形與人聲零偏移、無削頂、完整解碼。

鐵律(每條都用真實教訓換來的)

  1. 禁止用 atempo 等後處理拉伸音訊湊時長。拉伸會讓語速驟降、聽感拖沓。要調整語速, 用 Fish TTS 原生的 prosody.speed 參數重錄(例如 s3=0.85、s4=0.9),或接受自然時長。
  2. API Key 只進行程記憶體。環境變數傳入,腳本 atexit 清除,輸出裡出現 key 形態的字串 一律替換為佔位符。專案檔案、報告、日誌裡不得出現 key。
  3. 同一操作標籤連續失敗兩次即停止,寫報告說明原因,不無限重試。HTTP 401 立即停止 (key 問題)。單段影片費用估算超過 1 美元熔斷。
  4. 預估時長是參考不是指標。給執行者的 QC 標準不能是「湊數型」的。
  5. 使用者聽感優先於自動統計。時長、音量、削頂全過,不代表聽感沒問題;使用者說第 10 秒 起不對勁,那就是有問題,從那個時間點倒查。
  6. 未通過人工驗收的不能叫成品。交付時明確列出哪些項已驗、哪些沒驗。

環境陷阱速查

Windows 上跑本管線有四個已證實的坑,動手前讀 references/pitfalls.md: Python 請求必須 trust_env=False 否則連錯代理、沙箱與真實檔案系統是兩套檢視、tmpfiles 直連要解析檢視頁、Fish 串流 WAV 頭要修。每個坑裡有根因和修法。

腳本使用

export APIMART_API_KEY=... FISH_API_KEY=...   # 或讓腳本提示時輸入
python scripts/avatar_voice.py all     # Stage A 全流程
python scripts/avatar_video.py all     # Stage B 全流程
python scripts/avatar_bgm.py all       # Stage C
python scripts/avatar_caption.py all   # Stage D(不需要 key)
腳本階段是否需要 key作用
avatar_voice.pyAFish Audio聲音克隆、逐句 TTS、修 WAV 頭、品檢
avatar_video.pyBAPIMART傳圖、托管音訊、提交嘴型影片、輪詢下載
avatar_bgm.pyCAPIMART(generate 要,mix 不要)Suno 出 BGM 候選、側鏈閃避混音
avatar_caption.pyD否豐富樣式字幕產生與燒錄
avatar_compose.pyE否拼接、縮放、轉寫、終檢

腳本從目前目錄讀 script.md 和 assets/,產出到 output/,狀態存 output/state.json, 中斷後重跑同一命令即續跑。每個腳本支援 --help 查看子命令。

安全邊界(分發給他人的承諾)

  • 腳本只連接四個文件化端點:api.fish.audio、api.apimart.ai、tmpfiles.org,以及本地 ffmpeg/whisperx。沒有任何遙測、自動更新、匿名統計。
  • 不讀寫專案目錄之外的任何路徑。
  • API Key 只在行程記憶體,退出即清除;所有落盤文字經過 key 形態過濾。
  • 整包可全文審計:SKILL.md 加 references/ 加 scripts/,無二進位、無可執行安裝步驟。

相關技能