影片生成

👤 得理科技 📦 v1.0.6 ⭐ 4.4 ⬇️ 1.2K 下載
🎨 設計多媒體 免費 🔑 需 API Key

📖 技能介紹


name: video-creator description: 產品介紹影片自動生成技能。當用戶需要生成產品介紹影片、宣傳影片、演示影片時、復刻聲音時觸發。支援:(1) 聲音合成——若使用者明確指定"我的"聲音,則復刻聲音並用於下次合成;否則自動使用edge-tts合成語音(支援男聲/女聲選擇);(2) 基於使用者提供的圖片素材生成靜態幻燈片影片(無需大模型生成影片);(3) 自動生成對應語言的SRT字幕(軟字幕/硬字幕/無字幕可選)並與音訊同步。(4)復刻聲音。(5)口播引導影片:當指令碼首段以"口播:"開頭時,使用真人照片+TTS音訊 並生成真人口播片段。適用場景:使用者說"幫我生成產品影片"、"製作一個XX的介紹影片"、"用我的聲音或男聲或女聲生成影片"、"把這些圖片做成影片"、"生成一段口播影片"時,務必使用此技能。


產品介紹影片自動生成

將文案、圖片素材自動合成為帶字幕和配音的產品介紹影片,不依賴大模型生成影片,以控制成本。

API Key

使用者需要提供平臺 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 檔案中。"

快速開始

  1. 閱讀 references/dependencies.md 瞭解環境依賴
  2. 執行 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段:現在就加入我們,開啟智慧化新時代。

引數收集

當用戶請求生成影片但引數不明確時,系統必須按以下優先順序主動詢問,收集確認後再執行生成。

1. 聲音選擇

場景 詢問內容 選項
使用者未提及聲音 "影片配音使用什麼聲音?" ① 我的復刻聲音;② edge-tts 預設女聲;③ edge-tts 男聲
使用者提到"預設""自動" 同上 同上
使用者指定"我的" 無需詢問,直接使用
使用者指定"男聲"或"女聲" 無需詢問,直接使用對應性別edge-tts

2. 字幕選擇(關鍵引數,必須確認

場景 詢問內容 選項
使用者未提及字幕 必須主動詢問:"需要生成字幕嗎?如果需要,要軟字幕還是硬字幕?" ① 軟字幕:播放器內可開關;② 硬字幕:燒錄進畫面,始終顯示;③ 無字幕
使用者只說"要字幕" 追問軟/硬選擇 同上
使用者說"不要字幕" 無需詢問,使用 none
使用者明確指定 soft/hard 無需詢問,直接使用

3. 圖片素材

場景 處理
使用者未提供圖片或沒找到任何產品圖片 基於段落文案自動使用 wan2.7-image 模型生成統一風格的圖片。若無 DASHSCOPE_API_KEY,會自動降級使用 Python Pillow 生成包含專業法律風格(深藍底+金字)的配圖
圖片數 ≠ 文案段落數且提供了圖片 報錯提示不匹配詳情,要求使用者調整

引數 → CLI 對映表

收集到的引數通過以下命令列引數傳遞給 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(無字幕版本)

口播影片生成模組

當指令碼首段文案以以下任意字首開頭時,自動進入口播模式:

  • 口播:(全形冒號)
  • 口播:(半形冒號)
  • 【口播】
  • [口播]

生成流程

  1. 驗證 --portrait 照片路徑存在,否則立即報錯退出
  2. 合成該段 TTS 音訊,檢查時長
  3. 若音訊時長 ≤ 15s 且 DASHSCOPE_API_KEY 可用:
  4. 上傳照片到阿里百鍊系統臨時檔案儲存,獲取臨時 URL (oss://)
  5. 上傳 TTS 音訊,獲取臨時 URL (oss://)
  6. 根據 --portrait-quality 呼叫模型:
    • standard (預設):resolution=480P
    • high:resolution=720P
  7. 提交任務後,每 5 秒輪詢一次任務狀態,最長等待 300s
  8. 任務成功後下載影片並用作第一段
  9. 若音訊時長 > 15s 或生成失敗:降級為 ffmpeg 圖片影片(使用真人照片)

API 規格(通過自有平臺 SkillController 代理)

POST 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": "..." } }

檔案上傳(三步上傳到 OSS)

推薦訪問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"

voice_config.json 格式

儲存平臺 API Key,用於鑑權, voice_id 用於儲存我的聲音(myvoice)

{
  "api_key": "YOUR_PLATFORM_API_KEY_HERE"
  "voice_id": "YOUR_VOICE_ID_HERE"
}

我的聲音復刻(自有平臺 SkillController)

將符合聲音復刻要求的音訊上傳到公網可訪問地址(例如 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 等依賴是否就緒。

Step 2:復刻我的聲音(可選)

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 僅在當次有效,不會寫入配置檔案。

Step 3:準備輸入

將圖片素材放入 input/images/,文案寫入 input/script.txt(每行一段)。

如果不想提供圖片素材,WorkBuddy 會自動根據文案生成場景描述,寫入 input/scene_descriptions.txt(每行一條),然後在執行指令碼時通過 --scene-descriptions input/scene_descriptions.txt 傳入即可。

Step 4:執行生成

/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

引數說明: -- --voicemyvoiceedge_tts(預設 edge_tts) -- --clone-audio-url:使用 --voice myvoice 時,通過公網音訊URL自動復刻聲音 -- --clone-audio-file:使用 --voice myvoice 時,通過本地音訊檔案自動復刻聲音 -- --clone-prefix:聲音復刻時的字首,預設 myvoice - --clone-language:聲音復刻時語言提示,預設 zh - --edge-tts-genderfemale(女聲,預設)或 male(男聲),僅在 --voice edge_tts 時生效 - --scene-descriptions:場景描述檔案路徑(由 WorkBuddy 生成),每行一條,與文案段落一一對應;用於文生圖 prompt - --subtitlesoft(軟字幕,預設)/ hard(硬字幕燒錄)/ none(無字幕) - --resolution1920x1080(預設)或 1280x720 / 1080x1920

Step 5:檢視輸出

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
  • 阿里百鍊 TTS 文件:https://help.aliyun.com/zh/model-studio/text-to-speech

主執行指令碼入口

核心邏輯在 scripts/generate_video.py,詳見指令碼內註釋。

🤖 AI 評測

這個影片生成 Skill 質量中等偏上。優點是使用流程清晰明瞭,提供了常見場景的完整示例,錯誤提示詳細貼心,充值和賬戶問題都有明確指引,新手也能快速上手。不足是文件存在一些重複內容和邏輯小瑕疵,整體閱讀體驗還有提升空間。作為使用者,如果需要生成產品講解、首尾幀過渡等影片,基本可以直接使用,但建議仔細閱讀示例部分以獲得最佳效果。

📊 多維度評分

適應性4.4
規範性4.1
有效性4.4
可靠性4.5
可信度5

📁 包含檔案 (8 個)

📄 SKILL.md 17.3 KB
📄 references/dependencies.md 2.2 KB
📄 scripts/burn_subtitles.py 10.1 KB
📄 scripts/check_env.py 2 KB
📄 scripts/dashscope_api.py 28.8 KB
📄 scripts/enroll_my_voice.py 5.8 KB
📄 scripts/generate_video.py 76.8 KB
📄 voice_config.json 62 B