## 経緯
[[WebP]]を[[Minerva]]の標準フォーマットとして導入しようとしているので、その下調べの一環。
## コマンド
### gifに変換
```console
ffmpeg -i input.mp4 output.gif
```
### webpに変換
```console
ffmpeg -i input.png output.webp
```
### jpegに変換
```console
ffmpeg -i input.png output.jpg
```
### pngに変換
```console
ffmpeg -i input.jpg output.png
```
### mp4に変換
圧縮目的。
```console
ffmpeg -i input.mp4 output.mp4
```
## 実験1
対象画像は以下の`png`ファイル。[[DALL-E]]によって作成されたもの。
| 項目 | 値 |
| ------ | --------- |
| 大きさ | 1024x1024 |
| サイズ | 1.13MB |
![[neovim-chan.png]]
### Screenpressoで圧縮
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1024x1024 |
| サイズ | 235KB |
拡大すると髪の毛のグラデーションのところに劣化が見られる。[[Screenpresso]]で圧縮した際は顕著に出るところ。
![[neovim-chan-screenpresso.png]]
### ffmpegでjpegに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1024x1024 |
| サイズ | 110KB |
見た目の劣化はほぼなさそうに見える。[[Screenpresso]]の圧縮よりさらに半分以上サイズが削減される。
![[neovim-chan.jpg]]
### ffmpegでwebpに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1024x1024 |
| サイズ | 76.8KB |
こちらも劣化はなさそうに見える。[[JPEG]]よりもさらにサイズが削減されている。
![[neovim-chan.webp]]
## 実験2
対象画像は以下の`png`ファイル。[[DALL-E]]によって作成されたもの。背景透過済。
| 項目 | 値 |
| ------ | --------- |
| 大きさ | 1024x1024 |
| サイズ | 707KB |
![[carnelian.png]]
### Screenpressoで圧縮
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1024x1024 |
| サイズ | 174KB |
![[carnelian-screenpresso.png]]
### ffmpegでjpegに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1024x1024 |
| サイズ | 84KB |
サイズと画質は問題ないが、[[JPEG]]は背景を透過することはできないのがネック。
![[carnelian.jpg]]
### ffmpegでwebpに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1024x1024 |
| サイズ | 78.4KB |
[[JPEG]]より更に小さいサイズで背景も透過できる。
![[carnelian.webp]]
## 実験3
対象画像は以下の`png`ファイル。[[DALL-E]]によって作成されたもの。
| 項目 | 値 |
| ------ | --------- |
| 大きさ | 1280x731 |
| サイズ | 2.17MB |
![[neovim-girl-1280.png]]
### Screenpressoで圧縮
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x731 |
| サイズ | 517KB |
肌の塗りがはっきりと崩れる。
![[neovim-girl-1280-screenpresso.png]]
### ffmpegでjpegに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x731 |
| サイズ | 150KB |
[[PNG]]とは微妙に塗りが違うが、通常は気にならないレベル。
![[neovim-girl-1280.jpg]]
### ffmpegでwebpに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x731 |
| サイズ | 134KB |
![[neovim-girl-1280.webp]]
## 実験4
対象画像は以下の`jpg`ファイル。[[📚O-DAN]]から取得したもの。
| 項目 | 値 |
| ------ | --------- |
| 大きさ | 1280x853 |
| サイズ | 437KB |
![[kinkakuji.jpg]]
### ffmpegでpngに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x853 |
| サイズ | 2.6MB |
![[kinkakuji.png]]
### Screenpressoでpngを圧縮
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x853 |
| サイズ | 692KB |
風景だとそこまで劣化は目立たないかも?
![[kinkakuji-screenpresso.png]]
### ffmpegでjpegに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x853 |
| サイズ | 144KB |
元の画像を[[ffmpeg]]で更に変換したもの。クオリティが異なるので更に削減される。
![[kinkakuji2.jpg]]
### ffmpegでwebpに変換
| 項目 | 値 |
| ---- | ---- |
| 大きさ | 1280x853 |
| サイズ | 204KB |
今回のケースでは[[JPEG]]の方が軽いが、サイズとしては大差がない。
![[kinkakuji.webp]]
## 実験5
対象画像は以下の`mp4`ファイル。[[Screenpresso]]で録画。
| 項目 | 値 |
| ---------- | --------- |
| 大きさ | 1172x756 |
| フレーム率 | 24/秒 |
| データ速度 | 304kbps |
| サイズ | 300KB |
![[leap.nvim.mp4]]
### ffmpegでgifに変換
| 項目 | 値 |
| ---------- | --------- |
| 大きさ | 1172x756 |
| サイズ | 281KB |
[[MP4]]よりもサイズは下回るが劣化が激しい。
![[leap.nvim.gif]]
### ffmpegでgifに変換 (最適化)
流石に画質が使い物にならないのでパレットを最適化したバージョンも比較する。
```console
ffmpeg -y -i leap.nvim.mp4 -filter_complex "[0:v] split [a][b];[a] palettegen [p];[b][p] paletteuse" leap.nvim2.gif
```
| 項目 | 値 |
| ---------- | --------- |
| 大きさ | 1172x756 |
| サイズ | 718KB |
キレイにはなったがサイズは2~3倍に。
![[leap.nvim2.gif]]
### ffmpegでwebpに変換
| 項目 | 値 |
| ---------- | --------- |
| 大きさ | 1172x756 |
| サイズ | 336KB |
サイズは[[MP4]]や[[GIF]]と大きくは変わらない。しかし一切劣化がないのでコストパフォーマンスは非常に高い。
![[leap.nvim.webp]]
### ffmpegでmp4に変換
データ転送速度を8割くらい落とした場合。データサイズも劣化具合に応じて減少している。
| 項目 | 値 |
| ---------- | --------- |
| 大きさ | 1172x756 |
| フレーム率 | 24/秒 |
| データ速度 | 65kbps |
| サイズ | 67.3KB |
操作動画であれば元の[[MP4]]と比較しても、違いは全く分からない。
![[leap.nvim2.mp4]]