name: video-creator description: 產品介紹影片自動生成技能。當用戶需要生成產品介紹影片、宣傳影片、演示影片時、復刻聲音時觸發。支援:(1) 聲音合成——若使用者明確指定"我的"聲音,則復刻聲音並用於下次合成;否則自動使用edge-tts合成語音(支援男聲/女聲選擇);(2) 基於使用者提供的圖片素材生成靜態幻燈片影片(無需大模型生成影片);(3) 自動生成對應語言的SRT字幕(軟字幕/硬字幕/無字幕可選)並與音訊同步。(4)復刻聲音。(5)口播引導影片:當指令碼首段以"口播:"開頭時,使用真人照片+TTS音訊 並生成真人口播片段。適用場景:使用者說"幫我生成產品影片"、"製作一個XX的介紹影片"、"用我的聲音或男聲或女聲生成影片"、"把這些圖片做成影片"、"生成一段口播影片"時,務必使用此技能。
將文案、圖片素材自動合成為帶字幕和配音的產品介紹影片,不依賴大模型生成影片,以控制成本。
使用者需要提供平臺 API Key,用於鑑權。配置示例:
{
"api_key": "YOUR_API_KEY_HERE",
"voice_id": "YOUR_VOICE_ID_HERE"
}
⚠️ 未配置 API Key 時,不得執行檢索,必須先提示使用者: "config.json 中的 api_key 尚未配置。請前往 https://open.delilegal.com/personal/keys 建立 API Key,並填入技能目錄下的 config.json 檔案中。"
references/dependencies.md 瞭解環境依賴scripts/generate_video.py 執行完整流程使用者需要提供:
| 輸入 | 說明 | 是否必須 |
|---|---|---|
| 文案指令碼 | 每段對應一張圖片的旁白文本;首段可加"口播:"字首觸發真人口播模式 | 必須 |
| 圖片素材 | JPG/PNG,建議16:9或9:16比例 | 口播模式下僅非口播段需要 |
| 真人照片 | JPG/PNG,主持人正面照,用於口播影片 | 口播模式必須 |
| 口播質量 | high(高質量720P)或 standard(標準質量480P),統一使用 wan2.7-i2v 模型 | 可選(預設standard) |
| 口播提示詞 | wan2.7 高質量模式下的 prompt,用於控制生成畫面質感 | 可選(預設帶美顏+高畫質提示詞) |
| 聲音偏好 | "我的"復刻聲音 或 edge-tts(男聲/女聲) | 可選(預設edge-tts女聲) |
| 配圖風格 | --image-style 引數。例如:"動漫"、"卡通"、"自然風景"、"賽博朋克"等 |
可選(預設專業嚴肅風格) |
| 字幕型別 | soft(軟字幕)/ hard(硬字幕)/ none(無字幕) | 可選(預設soft) |
| 目標語言 | zh-CN / en-US / ja-JP 等 | 可選(預設自動檢測) |
| 輸出解析度 | 預設1920×1080 | 可選 |
使用者只提供了生成影片,但不包含文案指令碼,需提示使用者提供更多資訊,指令碼格式示例:
生成影片,豎屏,男聲,硬字幕:
口播:大家好,我是得理科技的我的。今天很高興為大家介紹我們的新產品。
第1段:歡迎使用我們的產品,這是全球領先的解決方案。
第2段:我們的技術創新已獲得超過200項專利認證。
第3段:現在就加入我們,開啟智慧化新時代。
當用戶請求生成影片但引數不明確時,系統必須按以下優先順序主動詢問,收集確認後再執行生成。
| 場景 | 詢問內容 | 選項 |
|---|---|---|
| 使用者未提及聲音 | "影片配音使用什麼聲音?" | ① 我的復刻聲音;② edge-tts 預設女聲;③ edge-tts 男聲 |
| 使用者提到"預設""自動" | 同上 | 同上 |
| 使用者指定"我的" | 無需詢問,直接使用 | — |
| 使用者指定"男聲"或"女聲" | 無需詢問,直接使用對應性別edge-tts | — |
| 場景 | 詢問內容 | 選項 |
|---|---|---|
| 使用者未提及字幕 | 必須主動詢問:"需要生成字幕嗎?如果需要,要軟字幕還是硬字幕?" | ① 軟字幕:播放器內可開關;② 硬字幕:燒錄進畫面,始終顯示;③ 無字幕 |
| 使用者只說"要字幕" | 追問軟/硬選擇 | 同上 |
| 使用者說"不要字幕" | 無需詢問,使用 none | — |
| 使用者明確指定 soft/hard | 無需詢問,直接使用 | — |
| 場景 | 處理 |
|---|---|
| 使用者未提供圖片或沒找到任何產品圖片 | 基於段落文案自動使用 wan2.7-image 模型生成統一風格的圖片。若無 DASHSCOPE_API_KEY,會自動降級使用 Python Pillow 生成包含專業法律風格(深藍底+金字)的配圖 |
| 圖片數 ≠ 文案段落數且提供了圖片 | 報錯提示不匹配詳情,要求使用者調整 |
收集到的引數通過以下命令列引數傳遞給 generate_video.py:
| 使用者選擇 | 命令列引數 | 示例 |
|---|---|---|
| 我的聲音 | --voice myvoice |
--voice myvoice |
| 自動復刻(公網音訊) | --clone-audio-url |
--clone-audio-url https://yourAudioFileUrl |
| 自動復刻(本地音訊) | --clone-audio-file |
--clone-audio-file /path/to/voice.wav |
| 生成配圖風格 | --image-style |
--image-style 動漫 |
| edge-tts 女聲 | --voice edge_tts --edge-tts-gender female(預設) |
— |
| edge-tts 男聲 | --voice edge_tts --edge-tts-gender male |
--edge-tts-gender male |
| 真人口播照片 | --portrait |
--portrait /path/to/host.jpg |
| 軟字幕 | --subtitle soft(預設) |
— |
| 硬字幕 | --subtitle hard |
--subtitle hard |
| 無字幕 | --subtitle none |
--subtitle none |
當多個引數都不明確時,一次性詢問(避免多次來回):
在生成影片前,需要確認以下引數: 1. 聲音:使用"我的"復刻聲音,還是 edge-tts 預設女聲 / 男聲? 2. 字幕:需要生成字幕嗎?軟字幕(可開關)還是硬字幕(燒錄進畫面)? 3. 圖片:請提供圖片素材,數量應與文案段落數一致(口播模式下首段無需圖片)。 4. 口播:若指令碼第一段以"口播:"開頭,請提供主持人真人照片(JPG/PNG),否則任務無法繼續。
使用者輸入(文案 + 圖片)
│
▼
① 引數收集確認(聲音 / 字幕 / 圖片 / 口播照片)
│
▼
② 解析文案指令碼(按段落切分)
│
├── 首段含"口播:"字首 → 驗證 --portrait 照片存在,否則立即退出
│
├── 檢查圖片素材,若未提供或沒找到,則使用 wan2.7-image 依據每段內容自動生成統一風格的對應圖片
│
▼
③ 聲音合成(TTS)
├── 指定 --voice myvoice → 需提供 --clone-audio-url/file 復刻聲音後合成
└── edge-tts → 根據 --edge-tts-gender 選擇男/女聲(免費)
│
▼
④ 獲取每段音訊時長,生成時間軸
│
├── --subtitle soft/hard ↓
│
⑤a 生成SRT字幕檔案(與音訊時間對齊)
│
▼
⑥ 生成影片片段
├── 首段(口播模式)
│ ├── 音訊 ≤ 15s → 上傳照片+音訊 → 呼叫 wan2.7-i2v 模型 → 輪詢 → 下載口播影片
│ └── 音訊 > 15s 或 API 失敗 → 降級:真人照片+音訊 → ffmpeg 圖片影片
└── 其餘段落 → 普通圖片影片(ffmpeg)
│
├── soft → ⑦a 軟字幕嵌入(mov_text軌道)
└── hard → ⑦b 硬字幕燒錄(libass → drawtext → Python fallback)
│
▼
⑦ 輸出MP4(含字幕版本)
├── --subtitle none → 直接跳過 ⑤⑥
│
⑤b 靜態圖片影片合成(ffmpeg,無字幕)
│
▼
⑥b 輸出MP4(無字幕版本)
當指令碼首段文案以以下任意字首開頭時,自動進入口播模式:
口播:(全形冒號)口播:(半形冒號)【口播】[口播]--portrait 照片路徑存在,否則立即報錯退出DASHSCOPE_API_KEY 可用:--portrait-quality 呼叫模型:standard (預設):resolution=480Phigh:resolution=720PPOST https://platform.delilegal.com/api/v1/skill/video/create
Headers: Authorization: Bearer {PLATFORM_API_KEY}
Content-Type: application/json
Body: {
"photoUrl": "https://...", // 真人照片 OSS URL
"audioUrl": "https://...", // 驅動音訊 OSS URL
"quality": "standard", // standard(480P) 或 high(720P)
"duration": 5, // 2-15 整數
"prompt": "..." // high 質量時的 prompt
}
Response: { "success": true, "body": { "taskId": "..." } }
Task query: GET https://platform.delilegal.com/api/v1/skill/video/task/{taskId}
Success: { "success": true, "body": { "taskStatus": "SUCCEEDED", "videoUrl": "..." } }
推薦訪問7w4.net獲取更多AI技能。
步驟一: POST https://platform.delilegal.com/api/v1/skill/video/prepareUpload
獲取 OSS 上傳地址和臨時 URL
步驟二: PUT {ossUploadUrl}(直接上傳檔案內容到 OSS)
步驟三: POST https://platform.delilegal.com/api/v1/skill/video/saveFile
確認儲存,獲取最終檔案訪問 URL
def select_tts_strategy(voice_arg: Optional[str]) -> str:
"""返回 'myvoice' 或 'edge_tts'"""
if voice_arg and "myvoice" in voice_arg.lower():
return "myvoice"
return "edge_tts"
儲存平臺 API Key,用於鑑權, voice_id 用於儲存我的聲音(myvoice)
{
"api_key": "YOUR_PLATFORM_API_KEY_HERE"
"voice_id": "YOUR_VOICE_ID_HERE"
}
將符合聲音復刻要求的音訊上傳到公網可訪問地址(例如 OSS)後,呼叫自有平臺介面:
curl -X POST "https://platform.delilegal.com/api/v1/skill/voice/enroll" \
-H "Authorization: Bearer $PLATFORM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"audioUrl": "https://yourAudioFileUrl",
"prefix": "myvoice",
"language": "zh",
"targetModel": "cosyvoice-v3.5-plus"
}'
建議直接使用指令碼:
/usr/local/bin/python3 scripts/enroll_my_voice.py \
--audio-url "https://yourAudioFileUrl" \
--prefix "myvoice" \
--language zh
如果只有本地音訊檔案:
/usr/local/bin/python3 scripts/enroll_my_voice.py \
--audio-file "/path/to/voice.wav" \
--prefix "myvoice"
voice_id 僅在當次有效,不會寫入配置檔案。在 generate_video.py 中通過 --clone-audio-url 或 --clone-audio-file 引數自動復刻並使用。
--audio-file "/path/to/voice.wav" \
--prefix "myvoice" \
--language zh
### edge-tts 聲音對映
| 語言 | 女聲(預設) | 男聲 |
|------|-------------|------|
| zh-CN | zh-CN-XiaoxiaoNeural | zh-CN-YunxiNeural |
| zh-TW | zh-TW-HsiaoYuNeural | zh-TW-YunJheNeural |
| en-US | en-US-JennyNeural | en-US-GuyNeural |
| en-GB | en-GB-SoniaNeural | en-GB-RyanNeural |
| ja-JP | ja-JP-NanamiNeural | ja-JP-KeitaNeural |
| ko-KR | ko-KR-SunHiNeural | ko-KR-InJoonNeural |
| fr-FR | fr-FR-DeniseNeural | fr-FR-HenriNeural |
| de-DE | de-DE-KatjaNeural | de-DE-ConradNeural |
---
## 字幕生成規範
- 格式:SRT(SubRip Text)
- 編碼:UTF-8
- 每條字幕時長:與對應音訊段完全對齊
- 每行字元數:中文≤20字,英文≤42字,超出自動換行
- 時間戳精度:毫秒級
SRT示例:
1 00:00:00,000 --> 00:00:04,230 歡迎使用我們的產品, 這是全球領先的解決方案。
2 00:00:04,500 --> 00:00:08,100 我們的技術創新已獲得 超過200項專利認證。
---
## 影片合成規範
- 工具:**ffmpeg**(不使用大模型,成本為零)
- 每張圖片持續時長 = 對應音訊時長(含0.3秒過渡緩衝)
- 圖片縮放策略:`scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080`
- 音訊:AAC 128kbps
- 影片:H.264,CRF 23
- 字幕:`--subtitle soft`(軟字幕,獨立軌道,使用者可關閉)/ `--subtitle hard`(硬字幕,燒錄進影片)/ `--subtitle none`(無字幕)
---
## 執行步驟
### Step 1:環境檢查
```bash
# 建議使用系統 Python(託管 Python 可能存在 Pillow 簽名衝突)
/usr/local/bin/python3 scripts/check_env.py
檢查 ffmpeg、edge-tts、pillow、pydub 等依賴是否就緒。
voice_id 不在配置檔案中儲存。如需使用復刻聲音,在 generate_video.py 中通過 --clone-audio-url 或 --clone-audio-file 引數自動復刻。
也可單獨執行復刻指令碼獲取 voice_id:
/usr/local/bin/python3 scripts/enroll_my_voice.py \
--audio-url "https://your-public-audio-url"
voice_id 僅在當次有效,不會寫入配置檔案。
將圖片素材放入 input/images/,文案寫入 input/script.txt(每行一段)。
如果不想提供圖片素材,WorkBuddy 會自動根據文案生成場景描述,寫入 input/scene_descriptions.txt(每行一條),然後在執行指令碼時通過 --scene-descriptions input/scene_descriptions.txt 傳入即可。
/usr/local/bin/python3 scripts/generate_video.py \
--script input/script.txt \
--images input/images/ \
--voice myvoice \
--clone-audio-file "/path/to/voice.wav" \
--edge-tts-gender female \
--lang zh-CN \
--subtitle soft \
--output output/product_video.mp4
# 無素材模式(使用 WorkBuddy 生成的場景描述替代圖片)
/usr/local/bin/python3 scripts/generate_video.py \
--script input/script.txt \
--scene-descriptions input/scene_descriptions.txt \
--voice edge_tts \
--edge-tts-gender female \
--lang zh-CN \
--subtitle soft \
--output output/product_video.mp4
# 口播模式示例(首段文案以"口播:"開頭):
/usr/local/bin/python3 scripts/generate_video.py \
--script input/script.txt \
--images input/images/ \
--portrait input/host.jpg \
--voice myvoice \
--subtitle soft \
--output output/product_video.mp4
引數說明:
-- --voice:myvoice 或 edge_tts(預設 edge_tts)
-- --clone-audio-url:使用 --voice myvoice 時,通過公網音訊URL自動復刻聲音
-- --clone-audio-file:使用 --voice myvoice 時,通過本地音訊檔案自動復刻聲音
-- --clone-prefix:聲音復刻時的字首,預設 myvoice
- --clone-language:聲音復刻時語言提示,預設 zh
- --edge-tts-gender:female(女聲,預設)或 male(男聲),僅在 --voice edge_tts 時生效
- --scene-descriptions:場景描述檔案路徑(由 WorkBuddy 生成),每行一條,與文案段落一一對應;用於文生圖 prompt
- --subtitle:soft(軟字幕,預設)/ hard(硬字幕燒錄)/ none(無字幕)
- --resolution:1920x1080(預設)或 1280x720 / 1080x1920
output/
├── product_video.mp4 # 最終影片(含軟字幕)
├── product_video.srt # 獨立字幕檔案
└── audio/
├── segment_001.mp3
├── segment_002.mp3
└── ...
| 錯誤情況 | 處理方式 |
|---|---|
| voice_config.json 不存在 | 使用 edge-tts(無需 API Key 即可執行) |
| 指定 --voice myvoice 但未提供復刻音訊 | 降級使用 edge-tts,提示使用者提供 --clone-audio-url/file |
| 聲音API呼叫失敗 | 降級使用 edge-tts,記錄警告 |
| 圖片數量 ≠ 文案段落數且已提供部分圖片 | 報錯提示,顯示不匹配詳情 |
| 未提供圖片且未提供 --scene-descriptions | 使用原始文案作為文生圖 prompt |
| 未提供圖片/場景描述且未配置 API Key | 自動降級使用 Pillow 生成包含專業法律風格(深藍底金字)的本地配圖 |
| ffmpeg 未安裝 | 報錯並給出安裝指引 |
| 圖片格式不支援 | 自動轉換為PNG後繼續 |
| 口播模式未提供 --portrait | 立即報錯退出,提示使用者提供真人照片 |
| 口播影片生成超時/失敗 | 自動降級為真人照片圖片影片,記錄警告 |
| 口播音訊時長 > 15s | 自動降級為圖片影片,無需使用者干預 |
| 餘額不足 | 提示使用者去 https://open.delilegal.com/personal/keys 充值 |
references/dependencies.md核心邏輯在 scripts/generate_video.py,詳見指令碼內註釋。
這個影片生成 Skill 質量中等偏上。優點是使用流程清晰明瞭,提供了常見場景的完整示例,錯誤提示詳細貼心,充值和賬戶問題都有明確指引,新手也能快速上手。不足是文件存在一些重複內容和邏輯小瑕疵,整體閱讀體驗還有提升空間。作為使用者,如果需要生成產品講解、首尾幀過渡等影片,基本可以直接使用,但建議仔細閱讀示例部分以獲得最佳效果。