## 経緯 [[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]]