MozJPEGは、Mozilla社が開発しているオープンソースの libjpeg 及び libjpeg-turbo 互換のJPEG画像処理ライブラリです。他のJPEGエンコーダーより圧縮率が高く画像の軽量化に役立つので、ブログやネット上にJPEG画像を頻繁にアップロードする方は入れておいて損はないと思います。
しかし MozJPEGはJPEG形式の圧縮と展開に特化しており、画像のリサイズなどはできないので注意が必要です。
MozJPEGを使用するにはソースコードから自分でビルドする必要があるので、今回の記事はそのビルド手順と端末での使い方についての備忘録です。なおビルド及び実行環境は Linux Mint 22.1 “Xia” MATE Edition です。
下準備
パッケージリストの更新
キーボードの [Ctrl] + [Alt] + [T] を押して端末を開き、以下のコマンドを実行します。
$ sudo apt update事前に必要なものをインストール
PNG形式の画像にも対応したい場合は libpng-dev をインストールします。
$ sudo apt -y install cmake nasm yasm make libpng-devMozJPEGのビルド
ソースコードをダウンロードし解凍
GitHubよりMozJPEGのソースコードをダウンロードし解凍します。2025年07月現在、最新版は v4.1.1 となっております。
$ wget https://github.com/mozilla/mozjpeg/archive/refs/tags/v4.1.1.tar.gz
$ tar -zxvf v4.1.1.tar.gzMozJPEGのビルドとインストール
$ cd mozjpeg-4.1.1
$ mkdir build_mozjpeg && cd build_mozjpeg
$ cmake -G"Unix Makefiles" ../
$ make -j12
$ sudo make installシンボリックリンクを張る
/opt/mozjpeg/bin にはパスが通っていないので、パスが通っている /usr/local/bin にシンボリックリンクを張ります。
注意点として、Linux Mint では標準で cjpeg / djpeg / jpegtran といったコマンドが存在し、これらは libjpeg-turbo ライブラリによって実装されています。
MozJPEG は Mozilla社が libjpeg-turbo を基に開発したもので、コマンド名も libjpeg-turbo と同じcjpeg / djpeg / jpegtran となっており、名前が被ってしまっています。
そこでここでは cjpeg → mozjpeg / djpeg → mozdjpeg / jpegtran → mozjpegtran といった具合に名前の先頭に moz をつけることで libjpeg-turbo のコマンド名と MozJPEG のコマンド名を区別しています。
### 1行で済ませたい場合 ###
$ cd /opt/mozjpeg/bin && for x in *; do sudo ln -s /opt/mozjpeg/bin/$x /usr/local/bin/moz$x; done && cd
### 以下のように一つ一つシンボリックリンクを張っても構いません ###
$ sudo ln -s /opt/mozjpeg/bin/cjpeg /usr/local/bin/mozcjpeg
$ sudo ln -s /opt/mozjpeg/bin/djpeg /usr/local/bin/mozdjpeg
$ sudo ln -s /opt/mozjpeg/bin/jpegtran /usr/local/bin/mozjpegtranなお、先程張ったシンボリックリンクを削除したい場合は、以下のコマンドを実行してください。
$ cd /usr/local/bin && for x in moz*; do sudo unlink /usr/local/bin/$x; done && cdリンクが張れているか確認
シンボリックリンクがちゃんと張られていて実行できるか確認します。
$ mozcjpeg -version
上記の画像のように、MozJPEGのバージョンとビルドした日付が表示されればOKです。
不要になったtar.gzを削除
最後に不要になったファイルを削除します。
$ rm ~/v4.1.1.tar.gzMozJPEGの基本的な使い方
mozcjpeg
画像をJPEG形式に不可逆圧縮 (Lossy Compression) します。-qualityは画像の品質を指定するオプションで 0~100 の範囲で指定でき、数字が小さいほど低品質、大きいほど高品質になります(デフォルトでは 75 指定)。
### input.png を 70 の画像品質で output.jpg に変換 ###
$ mozcjpeg -quality 85 -optimize input.png > output.jpg### Picturesディレクトリにある全てのPNG画像を 70 の画像品質でJPEG形式に変換 ###
$ for x in $(find ~/Pictures -name "*.png" | cut -f 1 -d "."); do mozcjpeg -quality 70 -optimize ${x}.png > ${x}.jpg; donemozjpegtran
画像をJPEG形式に可逆圧縮 (Lossless Compression)したり、画像のメタデータを削除したりします。
### input.jpgのメタデータを全て削除して、output.jpg として出力 ###
$ mozjpegtran -copy none -optimize input.jpg > output.jpg
### カレントディレクトリにある全てのJPEG形式画像のメタデータを削除 ###
$ for x in $(find ~/Desktop -name "*.jpg"); do mozjpegtran -copy none -optimize ${x} > ${x}; doneまた、以下のように複数のコマンドと組み合わせて使うこともできます。
### input.png を 60の品質でJPEG形式に圧縮した後、メタデータを削除して output.jpg として出力 ###
$ mozcjpeg -quality 60 -optimize input.png | mozjpegtran -copy none > output.jpg
### Picturesディレクトリにある全てのPNG画像を 60の品質でJPEG形式に圧縮した後、メタデータを削除して出力 ###
$ for x in $(find ~/Pictures -name "*.png" | cut -f 1 -d "."); do mozcjpeg -quality 60 -optimize ${x}.png | mozjpegtran -copy none > ${x}.jpg; donemozdjpeg
JPEG形式の画像をBMPやGIFといった画像形式にデコードします。
### input.jpg を output.gif にデコード ###
$ mozdjpeg -gif input.jpg > output.gif
### input.bmp を output.bmp にデコード ###
$ mozdjpeg -bmp input.jpg > output.bmp
### Picturesディレクトリにある全てのJPEG画像をBMP画像にデコード ###
$ for x in $(find ~/Pictures -name "*.jpg" | cut -f 1 -d "."); do mozdjpeg -bmp ${x}.jpg > ${x}.bmp; doneシェルスクリプトに処理を記述して、画像を一括処理したりすると便利だと思います。
参考にさせていただいたサイト様





コメント