📸

👊 1万回JPEG (🔈 じぇい ぴー いー じー) る 👊

2022/07/24に公開

じぇいぺぐ。私の嫌いな言葉です。

そんなに「じぇいぺぐ」が好きになったのか、ウル⭕ラマン。(CV:山寺宏一)

※ 拡張子は .jpg です。

概要

JPEG (🔈 じぇい ぴー いー じー) は非可逆圧縮アルゴリズムである。そのため、度重なる JPEG (🔈 じぇい ぴー いー じー) 圧縮による画質欠損は、日本国憲法により禁止されてる。懲役 96kbps または 650MB 以下の罰金に処されます。画像の基本的人権ため、決して画質を侵してはならない。私たちはそう、小学生の道徳の時間から、大学の便所飯の時間に至るまで、先祖代々言い伝えられて来た。

しかし、ダメと言われるとやりたくなるのが人間の佐賀、という訳では無いのだけど。

どれぐらい繰り返すと、どれぐらい欠損するのか気になりません?
はい、私は気になります。

という訳で、繰り返し JPEG (🔈 じぇい ぴー いー じー) 圧縮を行って、欠損具合を比較してみた。お巡りさん、こちらです。

※ 拡張子は .jpg です。

結論

最初の1回目以降は劣化はかなり乏しい。
10回目あたりからハイパー アーマー (?) 化。
約9990回が無駄処理になった。
想像以上に劣化しなかった。

※ 拡張子は .jpg です。

検証

検証環境

※ 拡張子は .jpg です。

検証方法

  • 非劣化の元画像。
    sample.png
    (Pixivで年齢制限されてしまっているので、一部モザイク処理)
  • 1万回繰り返し、変換画像を生成する。
    1. 元画像を一時画像としてコピー。
    2. 一時画像を JPEG (🔈 じぇい ぴー いー じー) に変換する (劣化品質 50 )。
    3. 変換した JPEG (🔈 じぇい ぴー いー じー) を、非劣化画像に戻して、一時画像に上書きする。
  • WinMergeで比較する。

※ 拡張子は .jpg です。

比較

※ 拡張子は .jpg です。

① ImageMagick

コマンド

ImageMagickで BMP ⇔ JPEG の変換を繰り返す。

実際は1行で実行したWindowsコマンドだょ
@REM original => tmp.bmp.
copy /y "sample.png" "tmp.bmp"

@REM loop.
FOR /l %A IN (1, 1, 1000) DO (
    @REM convert to jpeg.
    magick convert -quality 50% "tmp.png" "sample (%A).jpg"
    @REM convert to bmp and copy to tmp.bmp.
    magick convert "sample (%A).jpg" "tmp.bmp"
)


@REM 1liner.
(copy /y "sample.png" "tmp.bmp") && FOR /l %A IN (1, 1, 1000) DO ((magick convert -quality 50% "tmp.png" "sample (%A).jpg") && (magick convert "sample (%A).jpg" "tmp.bmp"))

オリジナル v.s. 1回目

ほぼ全体に差異があり。
image.png

1回目 v.s. 2回目

image.png

2回目 v.s. 3回目

image.png

12回目 v.s. 13回目

差が無くなった。
image.png

オリジナル v.s. 1万回目

思った以上に差がない。
image.png

1回目 v.s. 1万回目

思った以上に差がない。
image.png

プロパテぃー

全部Quality一緒。
image.png

② cjpeg

※ 拡張子は .jpg です。

コマンド

cjpeg で BMP ⇒ JPEG に変換。
djpeg で BMP ⇐ JPEG に戻す。
を繰り返す。

実際は1行で実行したWindowsコマンドだょ
@REM original => tmp.bmp.
copy /y "sample.bmp" "tmp.bmp"

@REM loop.
FOR /l %A IN (1, 1, 10000) DO (
    @REM convert to jpeg.
    cjpeg -quality 50 "tmp.bmp" "sample (%A).jpg"
    @REM convert to bmp and copy to tmp.bmp.
    djpeg -bmp "sample (%A).jpg" "tmp.bmp"
)

@REM 1liner.
(copy /y "sample.bmp" "tmp.bmp") && FOR /l %A IN (1, 1, 10000) DO ((cjpeg -quality 50 "tmp.bmp" "sample (%A).jpg") && (djpeg -bmp "sample (%A).jpg" "tmp.bmp"))

オリジナル v.s. 1回目

ほぼ全体に差異があり。
image.png

1回目 v.s. 2回目

image.png

2回目 v.s. 3回目

image.png

10回目 v.s. 11回目

差が無くなった。
image.png

オリジナル v.s. 1万回目

思った以上に差がない。
image.png

1回目 v.s. 1万回目

思った以上に差がない。
image.png

プロパテぃー

全部Quality一緒。
image.png

あとがき

予想外の結果に、正直残念な気分。ツールのアルゴリズムが昨今優秀になったのかな?それとも、アルゴリズムの特性上の理由で、何度繰り返しても同様の箇所が同様に欠落するから、同様の結果になるのだろうか。

そう言えば、MP3の圧縮アルゴリズムの中で、マスク効果などで聞こえない音を間引いている、って話があって。じゃぁ、再エンコでは一度間引かれたところが優先的に落とされやすくなって、2回目以降の劣化は低くなるんじゃ?なんてずっと思ったりもしている。

詳しい人、教えて欲しい。

※ 拡張子は .jpg です。

おまけ

※ 拡張子は .jpg です。

Q. ループなのに 1 からなの?

今回 0 はオリジナルにしたので。

Q. 拡張子は .jpeg じゃないの?

最近なんでか、 .jpeg のサービスあるよね、twitterとか。
今更なんで?どこ界隈から発生しているの?

Google Photoに知らん間に .jpeg が増殖してて、でもあとからファイル名を変えられなくて、正直しんどい。
ホントやめて欲しい。

Q. MPEG は?

🔈 えむ ぴー いー じー

Q. PNG は?

🔈 ぴー えぬ じー

※ 公式では ping (🔈 ぴん) と同じ発音とのこと。

Q. GIF は?

🔈 じふ

Q. DVD は?

        lヽ ノ l        l l l ヽ   ヽ
  )'ーーノ(  | |  | 、      / l| l ハヽ  |ー‐''"l
 / D  | | |/| ハ  / / ,/ /|ノ /l / l l l| l  D ヽ
 l   ・  i´ | ヽ、| |r|| | //--‐'"   `'メ、_lノ| /  ・  /
 |  V  l  トー-トヽ| |ノ ''"´`   rー-/// |  V |
 |  ・   |/     | l ||、 ''"""  j ""''/ | |ヽl  ・ |
 |  D   |       | l | ヽ,   ―   / | | l  D  |
 |   !!  |     / | | |   ` ー-‐ ' ´|| ,ノ| | |  !! |
ノー‐---、,|    / │l、l         |レ' ,ノノ ノハ、_ノヽ
 /        / ノ⌒ヾ、  ヽ    ノハ,      |
,/      ,イーf'´ /´  \ | ,/´ |ヽl      |
     /-ト、| ┼―- 、_ヽメr' , -=l''"ハ    |  l
   ,/   | ヽ  \  _,ノーf' ´  ノノ  ヽ   | |
、_    _ ‐''l  `ー‐―''" ⌒'ー--‐'´`ヽ、_   _,ノ ノ
   ̄ ̄   |           /       ̄

(引用元:D・V・D!!(「姉DVD」あとりk) - あのAAどこ?)

Q. 女は

紙かjpg (🔈 じぇい ぴー じー) に限る!

謝辞

Discussion