Communitygithub.com

xiaocong3/ecommerce-video-skills

ffmpeg で自動編集:storyboard.json(商品画像/動画クリップ + ナレーション原稿)から、ナレーション、字幕、テロップ、トランジション、BGM自動ダッキング、ラウドネスノーマライゼーションを施した9:16 MP4をワンコマンドでレンダリング。完全ローカル実行。

ecommerce-video-skills とは?

このスキルは、商品紹介動画の制作プロセスを自動化する一連のPythonスクリプトです。`storyboard.json`という設定ファイルを入力として、ffmpegを駆使し、edge-ttsによる音声合成、Ken Burns効果、クロスフェードトランジション、ASS字幕/テロップの焼き込み、BGMの自動ダッキング(音声に合わせてBGMを自動で下げる処理)、-14 LUFSへのラウドネスノーマライゼーションを経て、9:16または指定アスペクト比のMP4動画を出力します。販売促進用動画をバッチ生成したい開発者や動画編集者にとって非常に有用で、コマンドラインから完全に自動化されたワークフローを提供します。このツールはPython 3.9+、ffmpeg (libass対応)、および`edge-tts`に依存し、全てローカル環境で動作するため、プライバシーと高速な処理を実現します。具体的には、`assemble.py`を実行するだけで、画像や動画クリップを自動で結合し、ナレーション、字幕、BGMを追加した完成品を得ることができます。また、`--tts none`オプションで音声なしのプレビューを作成したり、`--size`オプションで出力サイズを変更したりと、柔軟なカスタマイズが可能です。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ffmpeg 自動編集・動画アセンブル · Auto-assemble with ffmpeg

storyboard.json → ナレーション(edge-tts)→ 各シーンに Ken Burns / 動画トリミング → xfade トランジション → ASS 字幕・テロップ → BGM ダッキングミックス → 2パス 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.15秒の先行 + 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 "売り文句1|売り文句2|売り文句3" -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 抑制(スムーズなダッキング);まずコンプレッサー/リミッターを適用し、その後2パスの 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.

関連スキル