## 流れ 入力の動画は背景色を単一色にしておくこと。[[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 ```