記事内に広告が含まれています。
この記事でわかることをまとめました
ブログに載せる写真をWebPで保存するとき、品質の設定でファイルサイズがどれだけ変わるのかを、私が実測しました。
結論です。今回の写真3枚(いずれも900×1200pxのJPEG)を、Pillowで品質90・75・60・40・20の5段階のWebP(method=6)に保存した場合、品質90で保存したファイルを100とした割合の平均は、品質75で53.0%、品質60で43.6%、品質40で33.3%、品質20で22.0%になりました。
一つ上の品質の出力を100とした割合で比べると、品質90から品質75へ下げた段階が、4つの段階の中では一番大きな下げ幅でした。
図1:品質を下げるほど、品質90に対する割合は下がりました
図1は、同じ写真の品質90の出力を100として、品質75・60・40・20の割合を写真ごとに並べたものです。
調べた写真と保存の方法をまとめました
素材は、このブログの記事用に用意した写真3枚です。夜の通り、建物の外観、ボトルの棚で、いずれも900×1200pxのJPEGです。
元のファイルの大きさは、夜の通りが217,784バイト、建物の外観が210,187バイト、ボトルの棚が226,196バイトです。
私は2026年11月15日に、この3枚をPillow(Pythonの画像ライブラリ、バージョン10.2.0)で品質90・75・60・40・20の5段階のWebPとして保存しました。3枚×5段階で、15点のファイルができました。
- 保存の方法は method=6 に固定しました。
- 大きさ(寸法)は変えていません。
- ファイルサイズは、保存したファイルの実測値です。
- 変換時間は、各条件で保存を3回行い、3回の中央値を使いました。
SSIMは、ffmpegのssimフィルタで測りました。
割合は、バイト数から直接計算し、小数第1位に丸めました。割合の平均は、写真ごとの割合を丸める前の値で平均し、最後に小数第1位に丸めています。
写真3枚×品質5段階のバイト数と割合を表にまとめました
| 写真 | 品質 | ファイルサイズ(バイト) | 品質90を100とした割合 | 元のJPEGを100とした割合 |
|---|---|---|---|---|
| 夜の通り | 90 | 236,348 | 100.0% | 108.5% |
| 夜の通り | 75 | 121,720 | 51.5% | 55.9% |
| 夜の通り | 60 | 99,372 | 42.0% | 45.6% |
| 夜の通り | 40 | 75,064 | 31.8% | 34.5% |
| 夜の通り | 20 | 49,124 | 20.8% | 22.6% |
| 建物の外観 | 90 | 229,916 | 100.0% | 109.4% |
| 建物の外観 | 75 | 122,270 | 53.2% | 58.2% |
| 建物の外観 | 60 | 99,714 | 43.4% | 47.4% |
| 建物の外観 | 40 | 74,878 | 32.6% | 35.6% |
| 建物の外観 | 20 | 48,770 | 21.2% | 23.2% |
| ボトルの棚 | 90 | 236,568 | 100.0% | 104.6% |
| ボトルの棚 | 75 | 128,244 | 54.2% | 56.7% |
| ボトルの棚 | 60 | 107,478 | 45.4% | 47.5% |
| ボトルの棚 | 40 | 83,950 | 35.5% | 37.1% |
| ボトルの棚 | 20 | 57,062 | 24.1% | 25.2% |
| 3枚の平均 | 90 | 234,277.3 | 100.0% | 107.5% |
| 3枚の平均 | 75 | 124,078.0 | 53.0% | 56.9% |
| 3枚の平均 | 60 | 102,188.0 | 43.6% | 46.9% |
| 3枚の平均 | 40 | 77,964.0 | 33.3% | 35.7% |
| 3枚の平均 | 20 | 51,652.0 | 22.0% | 23.7% |
段階ごとに分かったことをまとめました
私は、隣り合う品質どうしで、下の品質の出力を上の品質の出力と比べました。比べる相手は、同じ写真の一つ上の品質の出力で、それを100とした割合です。
- 品質75の出力は、同じ写真の品質90の出力を100とすると、51.5%/53.2%/54.2%で、平均は53.0%でした。
- 品質60の出力は、同じ写真の品質75の出力を100とすると、81.6%/81.6%/83.8%で、平均は82.3%でした。
- 品質40の出力は、同じ写真の品質60の出力を100とすると、75.5%/75.1%/78.1%で、平均は76.2%でした。
- 品質20の出力は、同じ写真の品質40の出力を100とすると、65.4%/65.1%/68.0%で、平均は66.2%でした。
- 品質20の出力は、同じ写真の品質90の出力を100とすると、20.8%/21.2%/24.1%でした。
なお、品質の間隔は、90から75までと75から60までが15ずつ、60から40までと40から20までが20ずつで、同じではありません。
一つ上の品質の出力を100とした割合で比べると、4つの段階の中で一番大きく下がったのは品質90から品質75の段階でした。次に品質40から品質20の段階の下がり方が大きく、品質75から品質60の段階が一番小さくなりました。
品質90のWebPは、元のJPEGより大きくなりました
品質90で保存したWebPは、元のJPEGファイルを100とすると、104.6〜109.4%で、平均は107.5%でした。今回の写真3枚では、3枚とも元のJPEGより大きくなりました。
元のJPEGを100とした割合が100%を下回ったのは、品質75以下の出力でした。元のJPEGを100とした割合の平均は、品質75で56.9%、品質20で23.7%でした。
図2:SSIMは品質を下げるほど下がりました
図2のSSIMは、1に近いほど比べる相手に近いことを表す指標です。図2の縦軸は0.80から始まっています。
| 写真 | 品質90 | 品質75 | 品質60 | 品質40 | 品質20 |
|---|---|---|---|---|---|
| 夜の通り | 0.989582 | 0.966143 | 0.952926 | 0.936594 | 0.906285 |
| 建物の外観 | 0.988587 | 0.963390 | 0.949987 | 0.927788 | 0.893679 |
| ボトルの棚 | 0.989348 | 0.967714 | 0.961503 | 0.947221 | 0.922873 |
| 3枚の平均 | 0.989172 | 0.965749 | 0.954805 | 0.937201 | 0.907612 |
元のJPEGファイルとのSSIMの平均は、品質90で0.989172、品質75で0.965749、品質60で0.954805、品質40で0.937201、品質20で0.907612でした。品質を下げるほど、平均も下がりました。
SSIMの比べる相手は、元のJPEGファイルです。元のファイル自体がすでにJPEGなので、SSIMは「無劣化の元画像との近さ」ではありません。「元のJPEGファイルとの近さ」を示しています。
変換時間は品質が高いほど長い傾向でした
| 写真 | 品質 | 3回の時間(秒) | 中央値(秒) |
|---|---|---|---|
| 夜の通り | 90 | 0.624/0.601/0.622 | 0.622 |
| 夜の通り | 75 | 0.430/0.486/0.423 | 0.430 |
| 夜の通り | 60 | 0.376/0.431/0.394 | 0.394 |
| 夜の通り | 40 | 0.340/0.329/0.328 | 0.329 |
| 夜の通り | 20 | 0.313/0.265/0.265 | 0.265 |
| 建物の外観 | 90 | 0.570/0.682/0.708 | 0.682 |
| 建物の外観 | 75 | 0.436/0.434/0.423 | 0.434 |
| 建物の外観 | 60 | 0.394/0.411/0.543 | 0.411 |
| 建物の外観 | 40 | 0.371/0.364/0.474 | 0.371 |
| 建物の外観 | 20 | 0.294/0.321/0.289 | 0.294 |
| ボトルの棚 | 90 | 0.544/0.572/0.628 | 0.572 |
| ボトルの棚 | 75 | 0.428/0.435/0.455 | 0.435 |
| ボトルの棚 | 60 | 0.410/0.374/0.409 | 0.409 |
| ボトルの棚 | 40 | 0.359/0.394/0.346 | 0.359 |
| ボトルの棚 | 20 | 0.281/0.286/0.288 | 0.286 |
変換時間の中央値は、写真3枚で品質90が0.572秒から0.682秒、品質20が0.265秒から0.294秒でした。
図3:夜の通りの中央付近を、元のJPEGとWebP3種類で並べました
図3は、夜の通りの写真の中央付近(元の座標で左上300・500から300×300px)を切り出したものです。
図3のラベルは英語で、Original JPEG、WebP q90、WebP q60、WebP q20と表示しています。
この表示の大きさでは、WebP品質20と元のJPEGファイルの違いは、私の目視ではっきりとは分かりませんでした。違いの判断は、SSIMの数値で行いました。
この実測を読むときの注意点をまとめました
- 元の写真は900×1200pxで、すでにJPEGとして保存されていたファイルです。カメラから取り出したばかりの大きな写真では、割合の出方が変わる場合があります。
- 品質の数値は、保存に使ったPillow(内部のWebPライブラリ)での設定値で、保存の方法は method=6 です。ほかのソフトでは、同じ品質の数値でも結果が変わる場合があります。
- SSIMは元のJPEGファイルとの比較です。元のファイル自体の画質を評価する数値ではありません。
- 変換時間は、この環境での計測です。使う機械が変われば、時間は変わります。
関連する計測記事もあわせて読んでみてください
このブログで実測した記事として、WebPとJPEGの形式の違いを実測した記事があります。
このブログで実測した記事として、JPEGの品質を実測した記事もあります。あわせて読んでみてください。
今回の実測の結論をまとめました
今回の写真3枚(900×1200pxのJPEG)を、Pillowで品質90から20までの5段階のWebP(method=6、寸法は変更なし)に保存した範囲では、品質90で保存したファイルを100とすると、平均は品質75で53.0%、品質20で22.0%でした。
元のJPEGを100とすると、品質90のWebPは平均107.5%で元より大きく、品質75は平均56.9%、品質20は平均23.7%でした。
SSIMの平均は、元のJPEGとの比較で、品質90の0.989172から品質20の0.907612まで下がりました。
私の目視では、この表示の大きさでは品質20と元のJPEGの違いははっきりとは分かりませんでした。この結果は、今回の写真3枚と5段階の範囲に限った実測です。
コメント