video-to-giflisted
Install: claude install-skill Kewton/CommandMate
# video-to-gif
録画済みの動画を GIF にする。`to-gif.sh` 一発で、**バイト予算に収まる GIF** が出る。
```bash
.claude/skills/video-to-gif/scripts/to-gif.sh demo.mp4 # demo.gif を隣に出す
.claude/skills/video-to-gif/scripts/to-gif.sh *.mp4 --out docs/images/features
.claude/skills/video-to-gif/scripts/to-gif.sh clip.mp4 --max-bytes 500k
.claude/skills/video-to-gif/scripts/to-gif.sh --ladder # 再試行の段取りだけ表示(ffmpeg 不要)
.claude/skills/video-to-gif/scripts/to-gif.sh --report docs/images/features/*.gif
.claude/skills/video-to-gif/scripts/to-gif.sh --check # 依存確認のみ
```
## なぜ GIF なのか
GitHub の **markdown ビューアは `<video>` を描画しない**。HTML 許可リストに含まれておらず、
動画添付が再生されるのは issue / PR / discussion の**コメント**だけである。リポジトリ内の
`.md` に貼って動く動画は GIF しかない。
例外は **GitHub Pages**(`website/`)で、そちらは素の HTML がそのまま配信されるので
`<video>` が使える。LP に置���なら GIF ではなく mp4 の方が軽い(実測 GIF 1.02MB に対し
mp4 0.56MB)。**GIF が要るのは docs 配下の markdown だけ**。
## なぜ demo-video の `compose.sh --gif` と別なのか
`compose.sh --gif` は合成パイプラインの途中でしか発火せず、720px / 12fps / `sierra2_4a` を
ハードコードしている。docs に載せるときに要るのは「**完成済みの mp4 から**、**リポジトリが
背負えるサイズの** GIF を作る」ことで、しかも収まったかどうかは**測って**判断する必要がある。
この 2 点は合成の関心事ではないので別スキルにした。
## 設計判断: dither は既定で切る
同一素材(20 秒 / 1280x800 の UI キャプチャ)を、無劣化リファレンスに対する SSIM で実測した。
| 設定 | バイト数 | SSIM (All) |
|------|---------|-----------|
| `colors=256 dither=none` ← **既定** | 1,073,725 | **0.99653** |
| `colors=128 dither=none` | 883,912 | 0.99439 |
| `colors=128 dither=sierra2_4a` | 1,271,671 | 0.99160 |
| `colors=128 d