## 流れ
入力の動画は背景色を単一色にしておくこと。[[Google Veo 3.1]]をであればプロンプトで指定するとそのようにしてくれる。被写体に使われていない色がオススメ。
以下の3ステップを踏む。
1. **[[ffmpeg]]** で動画の再生速度調整 + 静止画への変換を行う
- [[動画の再生速度を変更 (ffmpeg)|動画の再生速度を変更]]
- [[動画をコマごとの静止画に変換 (ffmpeg)|動画をコマごとの静止画に変換]]
2. **[[ImageMagick]]** でコマ送り静止画から背景色を透過する
- [[特定の色を透過 (ImageMagick)|特定の色を透過]]
3. **[[Gifski]]** で静止画から[[GIF]]を作成する
- [[静止画からgifを生成 (Gifski)|静止画からgifを生成]]
## 具体的なコマンド
### 前提
- **入力:** `input.mp4`
- **動画の背景色:** `#009E19`
### 動画を静止画に変換
```console
ffmpeg -i input.mp4 \
-vf "setpts=PTS/2,scale=iw/2:ih/2,crop=480:320:30:0" \
frames/%05d.png
```
| 項目 | 内容 | 関連設定 |
| ----------- | ---------------------- | ------------------- |
| 再生速度 | 2倍 | `setpts=PTS/2` |
| リサイズ(拡大/縮小) | 縦横 1/2 | `scale=iw/2:ih/2` |
| トリミング | x:30, y:0 から w480xh320 | `crop=480:320:30:0` |
静止画は `frames` 配下に0埋め5桁の連番で生成される。
```
frames
├── 00001.png
├── 00002.png
.
.
├── 00409.png
└── 00410.png
```
### 静止画から背景色を透過
```console
magick mogrify -fuzz 25% -transparent "#009E19" frames/*.png
```
| 項目 | 内容 | 関連設定 |
| ---------- | ------------- | ------------------------ |
| 色の一致判定許容誤差 | 25%以内の誤差ならマッチ | `-fuzz 25%` |
| 透明色にする色 | `#009E19` | `-transparent "#009E19"` |
`-fuzz` は小さすぎると背景が透過されない。`25%` くらいが安定するが、それよりも下げられるなら小さいにこしたことはない。
### 静止画から[[GIF]]を生成
```console
gifski -o out.gif frames/*.png
```
こだわりがなければこれだけでOK。こだわりがある場合はオプションを指定する。
```console
gifski --fps 30 --repeat -1 -o out.gif frames/*.png
```
| 項目 | 内容 | 関連設定 |
| ------- | --------- | ------------- |
| [[fps]] | [[fps]]の値 | `--fps 30` |
| ループ回数 | ループしない | `--repeat -1` |
### 確認
[[ターミナル]]上だと[[chafa]]で確認できる。
```console
chafa out.gif
```
ループ回数を0にしていても、[[chafa]]だと無限再生されるので実際には以下のコマンドを使う。サイズは必要に応じて。
```console
chafa --duration 0 --size 40x32 out.gif
```