Communitygithub.com

xiaocong3/ecommerce-video-skills

使用 ffmpeg 自動將 storyboard.json(商品圖/影片片段 + 旁白稿)組合成帶配音、字幕花字、轉場、BGM 自動閃避、響度標準化的 9:16 MP4,純本機執行。

ecommerce-video-skills 是什麼?

這是一個專為電子商務短片生產設計的 AI 技能,基於 ffmpeg 和 edge-tts,能從一份結構化的 `storyboard.json` 自動生成完整的商品宣傳影片。使用者只需提供商品圖片或影片片段、旁白稿,並在 storyboard 中指定每鏡的 Ken Burns 動態、轉場效果、字幕樣式與行動呼籲按鈕,即可一鍵渲染出 9:16 MP4 檔案。技能支援自動配音(edge-tts)、免版權 BGM 合成或自訂音樂、響度標準化(-14 LUFS 兩遍 loudnorm),並輸出對應的 .srt 字幕檔。所有處理均在本機完成,無需依賴雲端 API,適合批量生產無需專業剪輯師的短影片。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/xiaocong3/ecommerce-video-skills/tree/HEAD/skills/ffmpeg-auto-assemble

在你喜歡的 AI 中提問

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

說明文件

ffmpeg 自動拼接成片 · Auto-assemble with ffmpeg

storyboard.json → 配音(edge-tts)→ 每鏡 Ken Burns / 影片裁切 → xfade 轉場 → ASS 字幕花字 → BGM 閃避混音 → 兩遍 loudnorm(-14 LUFS)→ out/video.mp4 + .srt。

屬於 ecommerce-video-skills 一部分 · 腳本都在本目錄 scripts/:assemble.py(主程式)· tts_edge.py · make_subs.py · make_bgm.py(免版權合成 BGM)· make_cards.py(PIL 商品卡/結尾卡)

輸入 Inputs

  • storyboard.json(可由 selling-point-storyboard 生成),素材路徑相對於該檔案
  • 環境:Python 3.9+,pip install pillow numpy edge-tts,ffmpeg(含 libass),CJK 字型

快速開始 Quick start

pip install pillow numpy edge-tts
python scripts/assemble.py examples/aura-bottle/storyboard.json -o out/aura.mp4       # 倉庫自帶範例,約 30 秒渲染完
python scripts/assemble.py storyboard.json --tts none -o out/preview.mp4             # 離線預覽(無配音,按字數估時)
python scripts/assemble.py storyboard.json --size 1080x1080 -o out/main-1x1.mp4      # 主圖影片 1:1
python scripts/assemble.py storyboard.json --bgm music.mp3                           # 用你有版權的音樂

storyboard 欄位 Fields

欄位說明
頂層 voice / rate / pitchedge-tts 音色、語速(如 +10%)、音調
頂層 bgm"auto"(內建合成,免版權)/ 音樂檔案路徑 / null
頂層 tag全程左上角貼紙(品牌/型號/「演示」)
image 或 video (+start)素材;影片從 start 秒截取本鏡時長
line配音文本;鏡頭時長 = 配音 + 0.15s 前導 + pad
sub字幕(預設同 line);"" 表示本鏡不出字幕;**高亮**、`
title / cta花字 / 行動呼籲按鈕
motionzoom_in zoom_out pan_left pan_right pan_up pan_down punch static
fitauto(比例接近則裁滿,否則模糊填充)/ cover / blur
transition進入下一鏡的 xfade 名:fade slideleft slideup smoothleft circleopen wipeleft …
min / duration / pad最短時長 / 固定時長 / 句後留白(秒)

步驟 Steps

  1. 檢查素材都存在、比例合適(商品圖 ≥ 1000px);缺結尾卡就用 make_cards.py 產生: python scripts/make_cards.py --image main.png --name "商品名" --points "賣點一|賣點二|賣點三" -o assets/end-card.png
  2. 先 --tts none 跑一遍看畫面節奏,再正式渲染。
  3. 渲染後抽幀檢查:ffmpeg -ss 3 -i out/video.mp4 -frames:v 1 check.png
  4. 交給 platform-spec-export 導出各平台版本;用 cover-title-ab 做封面。

流水線細節 How it works

  • Ken Burns:逐幀 scale(eval=frame)+crop,比 zoompan 抖動小;punch = 0.35 秒快速推近(鉤子專用)。
  • 轉場:每鏡多渲染半個轉場長度,xfade 居中在鏡頭分界,配音起點不被轉場吃掉。
  • 混音:配音按鏡頭起點放置;BGM 預設 -20 dB,有人聲時再壓 10 dB(平滑閃避);先壓縮/限幅再兩遍 loudnorm 到約 -14 LUFS、TP -1.5 dB。
  • 字幕:用真實配音時長產生 build/timing.json → make_subs.py → libass 燒錄,同時導出 .srt。

檢查清單 Checklist

  • 成片時長、解析度、幀率正確(ffprobe out/video.mp4)
  • 抽 3 幀:字幕不壓商品、不進底部 UI 區
  • 聽一遍:配音清楚、BGM 不搶、開頭無爆音
  • BGM 有商用授權(auto 合成音樂可放心用)
  • 素材(圖片/影片/字型)有使用授權

常見問題與修復 Failure fixes

問題修復
ffmpeg failed看腳本印出的 stderr 末尾;常見是路徑錯誤或 ffmpeg 缺 libass/libx264
畫面邊緣糊素材解析度太低;換 ≥1080px 圖片或減小 motion 幅度(改 static)
商品被裁掉該鏡設 "fit": "blur"
轉場處聲音被切不會發生(配音按鏡頭起點對齊);若自訂了 duration 過短,加長即可
渲染慢預設已用 veryfast 中間檔案;最終編碼可把 -preset medium 改為 fast
想要 1:1 / 16:9--size 1080x1080 / --size 1920x1080,字幕字型大小自動按比例

參考與致謝:思路受 MoneyPrinterTurbo(MIT)「腳本→配音→字幕→合成」流水線啟發,本實作為獨立編寫的純 ffmpeg 版本,未複製其程式碼。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能