【Mac】透過PNG+背景動画からショート動画を自動生成する|Python × FFmpeg
YouTube Shorts、Instagram Reels、TikTok向けの動画を毎回手作業で編集するのが面倒だったので、
背景動画+透過PNG4枚から、15秒の縦型ショート動画を自動生成する仕組み
を作ってみました。
今回の構成では、1本の動画を次の4パートに分けています。
| 時間 | 内容 |
|---|---|
| 0〜3秒 | 仮説 |
| 3〜6秒 | データ |
| 6〜10秒 | 発見 |
| 10〜15秒 | 結論 |
一度テンプレートを作ってしまえば、毎回動画編集ソフトを開いてテロップを配置する必要がありません。
この記事では、MacでPythonとFFmpegを使って自動生成するまでの手順をまとめます。
最終的な流れ
やっていることはシンプルです。
記事・ブログ
↓
内容を4枚の透過PNGにする
↓
背景動画を用意
↓
PythonからFFmpegを実行
↓
15秒のMP4を自動生成
1記事につき、以下の4枚を用意します。
01_仮説.png
02_データ.png
03_発見.png
04_結論.png
この4枚を、歩いている動画などの上に時間指定で重ねます。
フォルダ構成
今回の自動化フォルダは、次のような構成にしました。
short_automation/
│
├── make_shorts.py
├── run_mac.command
├── test_3_mac.command
│
├── backgrounds/
│ ├── walking01.mov
│ ├── walking02.mov
│ └── walking03.mov
│
├── overlays/
│ ├── 001_記事名/
│ │ ├── 01_仮説.png
│ │ ├── 02_データ.png
│ │ ├── 03_発見.png
│ │ └── 04_結論.png
│ │
│ ├── 002_記事名/
│ │ ├── 01_仮説.png
│ │ ├── 02_データ.png
│ │ ├── 03_発見.png
│ │ └── 04_結論.png
│ │
│ └── ...
│
└── outputs/
├── 001_short.mp4
├── 002_short.mp4
└── ...
役割は次の通りです。
backgrounds
→ 背景動画
overlays
→ テロップ用の透過PNG
outputs
→ 自動生成したMP4
ローカルのユーザー名や実際のプロジェクト名は記事には載せず、汎用的な名前に置き換えています。
透過PNGを作る
テロップ画像は、縦動画に合わせて以下の形式にしました。
サイズ:1080 × 1920
背景:完全透過
文字:白
形式:PNG
ポイントは、画像自体に背景を付けず、
文字だけの透過PNGにすること
です。
こうしておけば、
背景動画
+
文字PNG
という構造で簡単に合成できます。
背景動画を変更しても、文字画像はそのまま再利用できます。
FFmpegをインストールする
動画合成にはFFmpegを使います。
MacではHomebrew経由で入れるのが簡単です。
Homebrewがまだ入っていない場合は、公式サイトのインストールコマンドを利用します。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
インストール後に確認します。
brew --version
バージョンが表示されればOKです。
M1 / M2 / M3 / M4 Macか確認する
Apple Silicon搭載Macでは、以下を実行します。
uname -m
Apple Siliconなら、
arm64
と表示されます。
M1、M2、M3、M4などはApple Siliconです。
Intel Macの場合は、
x86_64
と表示されます。
FFmpegを入れる
通常は以下でインストールできます。
brew install ffmpeg
インストール後、
ffmpeg -version
を実行します。
バージョン情報が表示されれば準備完了です。
M1 MacでRosettaエラーが出た場合
自分の環境では、Apple SiliconのMacで以下のエラーが出ました。
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
Apple SiliconのMacなのに、ターミナルがIntel互換環境のRosetta経由で動いていると発生することがあります。
その場合は、ARM側を指定して実行します。
arch -arm64 brew install ffmpeg
再度、
ffmpeg -version
で確認します。
背景動画を用意する
次に、
backgrounds/
へ背景動画を入れます。
例:
backgrounds/
├── walking01.mov
├── walking02.mov
├── walking03.mov
└── walking04.mov
できれば、
字幕やロゴが入っていない元動画
を使う方が扱いやすいです。
すでに文字が焼き込まれた動画へPNGを重ねると、
既存の文字
+
新しいテロップ
となり、画面が見づらくなります。
記事ごとのPNGを配置する
次に、
overlays/
へ、記事ごとの画像フォルダを配置します。
001_記事タイトル/
├── 01_仮説.png
├── 02_データ.png
├── 03_発見.png
└── 04_結論.png
表示時間は今回は次のように固定しました。
| PNG | 表示時間 |
|---|---|
| 01_仮説.png | 0〜3秒 |
| 02_データ.png | 3〜6秒 |
| 03_発見.png | 6〜10秒 |
| 04_結論.png | 10〜15秒 |
毎回構成を固定することで、記事ごとに動画編集をやり直す必要がなくなります。
Pythonから自動生成する
ターミナルで自動化フォルダへ移動します。
以下は例です。
cd ~/Downloads/short_automation
環境によって保存場所は異なるため、自分のフォルダへ読み替えてください。
現在地を確認する場合は、
pwd
を使います。
フォルダ内を確認する場合は、
ls
です。
make_shorts.py が見えていれば、その場所で実行します。
python3 make_shorts.py
処理が完了すると、
outputs/
へMP4が生成されます。
001_short.mp4
002_short.mp4
003_short.mp4
...
最初は3本だけ生成する
大量生成する前に、まず数本だけテストした方が安全です。
今回の構成では、
test_3_mac.command
のようなテスト用ファイルを用意しました。
最初の3本だけ生成して、
- 文字の大きさ
- テロップの位置
- 背景との見やすさ
- 表示時間
- 1080×1920になっているか
- PNGの背景が透過しているか
を確認します。
問題がなければ、
run_mac.command
から全件生成します。
背景動画を複数用意する
同じ背景だけで何十本も作ると、すべて同じ動画に見えやすくなります。
そのため、背景動画を複数用意してローテーションさせます。
記事001 → walking01.mov
記事002 → walking02.mov
記事003 → walking03.mov
記事004 → walking04.mov
記事005 → walking01.mov
動画本体は変わっても、テロップ表示の仕組みは同じです。
素材だけ交換できるようにしておくと管理が楽になります。
元動画が15秒未満でも使える
ショートを15秒にしたいのに、背景素材が10秒しかないこともあります。
その場合はFFmpeg側でループさせれば対応できます。
10秒の動画
↓
10秒 + 冒頭5秒
↓
15秒
逆に30秒の素材なら、
0〜15秒
15〜30秒
のように別区間を切り出すこともできます。
背景素材を毎回15秒ぴったりに編集しておく必要はありません。
なぜ動画編集ソフトではなくFFmpegにしたのか
例えば、ショート動画1本を手作業で編集するのに5分かかるとします。
5分 × 60本
=
300分
これだけで約5時間です。
しかし、毎回やっていることを分解すると、
背景を置く
↓
PNGを4枚置く
↓
表示時間を設定する
↓
縦動画で書き出す
という同じ処理の繰り返しでした。
構造が同じなら、人間が毎回編集ソフトを操作する必要はありません。
素材だけ変えて、同じ処理をプログラムに任せる
方が効率的です。
一番重要だったのは「動画を分解する」こと
今回の自動化で重要だったのは、動画を完成品として考えないことでした。
動画を、
背景
+
文字
+
表示時間
に分解します。
今回なら、
背景
→ 歩いている動画
文字
→ 透過PNG4枚
表示時間
→ 3秒 / 3秒 / 4秒 / 5秒
です。
この3つを分離しておけば、後から背景だけ変えたり、文章だけ変えたりできます。
さらにAIまで組み合わせる
この仕組みは、生成AIと組み合わせるとさらに自動化できます。
例えば、
記事を書く
↓
AIで本文を解析
↓
「仮説・データ・発見・結論」を抽出
↓
4枚のPNGを生成
↓
FFmpegで動画化
↓
MP4完成
という流れです。
動画編集そのものをAIに任せるというより、
AIで素材を作り、決まった処理はPythonとFFmpegに実行させる
という分担の方が安定しました。
毎日複数の記事をSNSへ展開するような用途では、かなり相性がいいと思います。
よく使った確認コマンド
現在のフォルダ:
pwd
フォルダ内を見る:
ls
Apple Siliconか確認:
uname -m
Homebrew:
brew --version
FFmpeg:
ffmpeg -version
Python:
python3 --version
このあたりを覚えておけば、エラーが起きたときも切り分けしやすいです。
まとめ
今回作った仕組みは、
背景動画
+
透過PNG4枚
+
Python
+
FFmpeg
=
15秒のショート動画
という非常にシンプルなものです。
一度テンプレートを作れば、
記事を追加
↓
PNGを追加
↓
コマンドを実行
↓
動画完成
まで持っていけます。
ショート動画を毎回編集するのではなく、
「動画の型を固定して、素材だけ差し替える」
という考え方にすると、自動化しやすくなりました。
AI活用も合わせて勉強したい場合
今回やってみて、PythonやFFmpegそのものより、
「どこをAIに任せて、どこをプログラムで固定するか」
を考える方が重要だと感じました。
ChatGPTの業務活用や、文章生成・情報整理・定型作業の自動化を一通り触りたい場合は、こういった講座も関連分野として参考になります。
自動化を全部一気に作ろうとするより、自分が繰り返している作業を1つ選んで、実際に置き換えてみる方が理解しやすいです。
資格取得についてはこちらにも掲載しています。参考にしてください。
https://note.com/ponpoko_0803/m/mc9909e9f4564
今回のコードはこちらにまとめてあります。
MACのローカルで実行してみてください。
https://github.com/ponpokoken/github_publish_pack_short_automation