Macにデフォルトで入っている sips コマンドは、画像のタイプ変換、サイズ変更、回転、反転、クロップなどが行える気軽なツール。
sip コマンドは画像ファイルの変更がサクッと出来る小気味良いツールです。比較的古くからMacにデフォルトで入ってます。
- ファイルタイプの変換
- イメージサイズ・解像度の変更
- 回転、反転、クロップ、余白
他にもメタデータの読み書きやカラープロファイルの操作などもできます。新しいバージョンでは javascript と連携して複雑なこともできるようになりました。
変更の際、出力パスを指定しなければ上書きしてくれることや、ファイル変更の際に可能な限りオリジナルの情報を維持することなど、気が利いています。
sips <オプション> <入力パス>
パスの変更を伴わない編集では出力パスを書かない場合、上書きとなります。
フォルダ内のファイルをまとめて処理したいときはパスの最後にスラッシュを付けてワイルドカードを加えます。
sips オプション 入力フォルダパス/*
編集後に別の名前になる場合は --out
を付けます。
sips <オプション> <入力パス> --out <出力パス>
情報
さくっと情報を得るには、-g all を指定します。g は多分 get の意味だと思います。
sips -g all <入力パス>
pixelWidth: 1800 pixelHeight: 1350 typeIdentifier: public.jpeg format: jpeg formatOptions: default dpiWidth: 72.000 dpiHeight: 72.000 samplesPerPixel: 3 bitsPerSample: 8 hasAlpha: no space: RGB profile: sRGB IEC61966-2.1
このように簡素なメタデータが取得できます。
狙ったキーの値だけ必要なら、-g pixelWidth みたいに書くんでしょうか。
値を消したり、編集したりもできます。プロファイルに応じた調色をしたりプロファイルをセットしたりいろいろ出来るようです。
取得出来るのは以下の通り(v10.4.4の場合)
all binary data allxml binary data Image property keys: dpiHeight float dpiWidth float pixelHeight integer (read-only) pixelWidth integer (read-only) typeIdentifier string (read-only) format string jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga formatOptions string default | [low|normal|high|best|<percent>] | [lzw|packbits] space string (read-only) samplesPerPixel integer (read-only) bitsPerSample integer (read-only) creation string (read-only) make string model string software string (read-only) description string copyright string artist string profile binary data hasAlpha boolean (read-only) Profile property keys: description utf8 string size integer (read-only) cmm string version string class string (read-only) space string (read-only) pcs string (read-only) creation string platform string quality string normal | draft | best deviceManufacturer string deviceModel integer deviceAttributes0 integer deviceAttributes1 integer renderingIntent string perceptual | relative | saturation | absolute creator string copyright string md5 string (read-only)
プロパティは、-g がGet、-s がセット、-d がデリート、-e がえーと embed、まあいろいろとそういった感じです。例えば -g creator で creator の情報をゲットでき、-s creator 〜 でセットできるといった法則です。
メタデータの機能は使わないので雑なままですが以上です。
イメージサイズの変更
sips でよく使うイメージサイズの編集です。
-Z <数値> … 縦横いずれか大きいほうの数値に応じたリサイズ
-z <h値> <w値> … 高さと幅を指定してリサイズ(比率を変更すると画像が歪む)
–resampleWidth <w値> … 指定の幅に合わせて比率を保ったリサイズ
–resampleHeight <h値> … 指定の高さに合わせて比率を保ったリサイズ
回転・反転・切り抜き・余白
-r <数値(角度)> … 指定数° 回転。90度単位でない場合余白が作られる
-f <horizontal | vertical> … 指定方向の反転。horizontal(水平) または vertical(垂直)を指定
-c <h値> <w値> … 指定値に応じて切り抜き
-p <h値> <w値> … 指定されたサイズに合わせてパディング(余白)を作る
--padColor
<hexカラー値> … 背景色の指定。デフォルトは黒 000000。白は ffffff
-c でクロップするとき、指定サイズが元画像より大きければ余白が作られます。
-p で余白を作るとき、指定サイズより元画像が大きければクロップになります。
余白が作られるときの背景色を --padColor
で指定します。#FFFFFF の形式ですが、# は要りません。
ファイルタイプ変換
ファイルタイプの変換も sips が得意とするところです。最もよく使う機能でもあります。
sips -s format <TYPE> <入力> --out <出力>
こうですね。image.psd を image.jpg に変換するならこう。
sips -s format jpeg image.psd --out image.jpg
jpeg は jpg ではなく正しく jpeg と指定します。ファイル変換は優秀で、aiファイルでも出来ました。
jpeg の場合は画質を指定できます。数値はパーセント、85 や 90 というように指定します。
-s formatOptions <数値>
sips のバージョン
sips は MacOSXの比較的初期の頃から存在していて、バージョンも上がっており、そのバージョンによって出来ること出来ないことに大きな差があります。
特に macOS 10.14 Mojave の ver. 10.4.4 と、macOS 10.15 catalina の ver.294 の断絶は大きくて、許しがたい溝があります。
10.14 Mojave の sips 10.4.4
sips バージョン 10.4.4 はわりと出来損ないです。man や –help では扱えるファイルタイプとして次のリストが示されます。
jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga
が、このリストの意味がわかりません。これ以外にも開いたり編集したりできるファイルタイプが幾つもあります。そしてここにリストされているのに実際には何もできない未対応タイプもあります。
使えないタイプは pict です。pict ファイルを入力しても何もできません。
何をやっても Segmentation fault: 11 など、エラーになります。
もちろんタイプ変換して書き出すこともできません。はっきりと未対応です。にもかかわらず平然と対応タイプとしてリストしているってのは、これは仕様じゃなく不具合ではないかと思います。
そう疑うには理由があって、このバージョンの次のバージョン 294では pict ファイルが正しく扱えるように修正されているからです。
Mojave はメインマシンのOSなので、この不具合は手痛いです。ファイルタイプの変換には別の方法を取らざるを得ません。sips の価値は100分の1に縮小されました。
このバージョンの pict 不具合とその対処については本稿の最後に章を設けています。
-o の扱い
オプション -o は out の略ではありません。optimizeColorForSharing です。共有のための色調整?よく判りませんが、実行してみたら僅かに色が変わりました。
出力を指定するには、–out <出力パス> と書きます。
10.15 Catalina の sips 294
このバージョンでは pict ファイルが扱えないバグが修正されています。それだけでも価値ありますが、このもっと後のバージョンでは javascript と連携できるようなので、出来る奴にとってはそっちのほうが価値あるかもしれません。
-o は out の略
このバージョンでは optimizeColorForSharing が消え失せ、-o が –out と同じ命令となります。大変紛らわしい変更が行われましたね。
あと、バージョンを調べるには -v または –version となります。そして、このバージョンでは –formats が使えるようになっています。
–formats
294 では –formats オプションが使用できます。sips が対応するファイルタイプが網羅され、書き込み可能かどうかも見分けられます。
sips --formats
バージョン 294 では以下のタイプが網羅されます。Writable とあるのが、書き込み可能なタイプです。
------------------------------------------- com.adobe.pdf pdf Writable com.adobe.photoshop-image psd Writable com.adobe.raw-image dng com.apple.atx -- Writable com.apple.icns icns Writable com.apple.pict pict com.canon.cr2-raw-image cr2 com.canon.cr3-raw-image cr3 com.canon.crw-raw-image crw com.canon.tif-raw-image -- com.compuserve.gif gif Writable com.dxo.raw-image dxo com.epson.raw-image erf com.fuji.raw-image raf com.hasselblad.3fr-raw-image 3fr com.hasselblad.fff-raw-image fff com.ilm.openexr-image exr Writable com.kodak.raw-image dcr com.konicaminolta.raw-image mrw com.leafamerica.raw-image mos com.leica.raw-image raw com.leica.rwl-raw-image rwl com.microsoft.bmp bmp Writable com.microsoft.cur -- com.microsoft.dds dds Writable com.microsoft.ico ico Writable com.nikon.nrw-raw-image nrw com.nikon.raw-image nef com.olympus.or-raw-image orf com.olympus.raw-image orf com.olympus.sr-raw-image orf com.panasonic.raw-image raw com.panasonic.rw2-raw-image rw2 com.pentax.raw-image pef com.phaseone.raw-image iiq com.samsung.raw-image srw com.sgi.sgi-image sgi com.sony.arw-raw-image arw com.sony.raw-image srf com.sony.sr2-raw-image sr2 com.truevision.tga-image tga Writable org.khronos.astc astc Writable org.khronos.ktx ktx Writable public.avci avci public.heic heic Writable public.heics heics Writable public.heif heif public.jpeg jpeg Writable public.jpeg-2000 jp2 Writable public.mpo-image mpo public.pbm pbm Writable public.png png Writable public.pvr pvr Writable public.radiance pic public.tiff tiff Writable
[巻末付録] version 10.4.4 の PICTファイル不具合
Mojave の sips 10.4.4 は、ファイル変換に期待して pict ファイル を扱おうとしても、エラーで出来ません。
Segmentation fault: 11
または
Error: Error querying file
こうなります。
pict 非対応のようです。そうでなければプログラムの不出来・不具合です。man で確認すると対応するタイプにまだ載っています。
jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd | sgi | tga
対応できそうなことを書いていますが対応してないですよ。このリストの他にも対応しているタイプはあるし、リストに載っていてもpictファイルは扱えません。このリストの意味は何?
プレビューで試す
sipsは プレビュー.app で使われているらしいので、プレビュー.app で開いてみましょうか。
開きました。確かに pict ファイルを開けます。
ではファイル変換・・・別名保存で書き出してみましょうか。
書き出せるタイプがPDFのみ
ファイルタイプが選択肢に何も出てきません。唯一PDFには変換できるようです。つまり、これがすべてですね。pict ファイルは他のタイプに変換できなくなりました。
これが sips で Segmentation fault: 11 エラーとなる原因なのかもしれません。
プレビュー.app で一旦PDFに書き出し、それを開いて別形式に書き出せるのか見てみました。
一旦、PDFに書き出して開き、もう一度別名保存します。
今度は選択肢にタイプがいくつも出てきました。
一旦PDFに変換してからだと jpeg や png に変換できることが判りました。なるほどわかった。じゃあ sips で同じことをやってみましょう。
一旦PDFにしてから・・
sips -s format pdf <pict> --out <pdf>
と、思ったらここでいきなりエラー。
Segmentation fault: 11
駄目じゃん。
これはどういうこと?プレビュー.app の別名保存ではできるのに sips ではエラー。謎が深まります。プレビュー.app の別名保存は sips の性能とは関係ないらしい。
この後、何とかして pict ファイルを変換しようと苦戦しましたが、sips では何をやってもエラーにしかなりませんでした。
sips の限界
これが sips の限界です。小気味よくて万能感ありましたが、やはりただのApple製、互換性の高さという言葉はAppleの辞書にはありません。
FFmpeg でやってみよう
ファイルタイプの変換を目指しているので頼りない sips を無視して他の方法はないかとしばし考え、FFmpeg を使ってみるテストを行うことにしました。
FFmpeg はビデオやオーディオファイルを扱うツールですが、対応タイプの幅の広さがずば抜けています。pict ファイルも扱えるかもしれません。
ffmpeg -i '<入力pict>' -y '<出力png>'
オプションの -y は確認せずに上書きします。
ラスタ画像しかも PICT ファイルでこのコマンドが有効でしょうか。早速試してみますと・・・
できた!
FFmpeg、なんて有能なのでありましょうか。ファイルタイプの変換には、中途半端に sips なんか使うより遙かに優秀な ffmpeg を使うのが良いという結論になってしまいました。