写真の日付修正と縮小と圧縮をコマンドラインで行う
ソフトウェア
Lastmod: 2021-01-06

はじめに

ブログに写真を使用する際、オリジナルのまま使うことはファイルサイズからして当然不可能ですが、 かといって写真の枚数が多くなってくるといちいちGUIのソフトで処理するのは手間がかかりすぎるので、 コマンドラインで片付けます。
また、カメラの日時設定を忘れるとEXIF内の撮影日時がとんでもない過去の日時になり、 それらを一つ一つGUIで修正するのは大変苦痛であるため、コマンドラインにて一括で行います。
自分でもコマンドのパラメーターを忘れがちなため、備忘録としてここに書き記します。

環境としてはLinux(WSL含む)を想定していますが、 UnixライクなOSでexittoolとconvertとjpegoptimが使えるなら何でもいいと思います。

日付修正

撮影時にカメラの日時設定をし忘れ、あとで気付いて撮影済の写真を全て日時修正したいという状況を想定しています。 ファイル名はSIGMA DP2 Merrillのものを使用しているので、適宜読み替えてください。

まず、撮影日時が同程度に間違っている写真を全て別のディレクトリに移し、作業を始めます。 次に、正しい撮影日時を把握している写真を探し(ここではDP2M7600.JPGとします)、 以下のコマンドを実行し、EXIF内の撮影日時を調べます。

$ exiftool -s DP2M7600.JPG | grep DateTimeOriginal
DateTimeOriginal                : 2012:01:02 10:30:00

次に、正しい撮影日時との差を計算します(ここでは正しい撮影日時は2020:11:08 08:30:00とします)。 カシオの計算サイトが使いやすくオススメです。 単位は時間か分あたりがいいと思いますが、秒でも可能だと思います(ここではとします)。 計算できましたら(ここでは4652520分)、以下のコマンドを実行します。

$ exiftool -overwrite_original -alldates+='0:0:0 0:4652520:0' DP2M*.JPG

exiftoolの詳しいコマンドオプション等は割愛しますが、これにてDP2M*.JPGに対して一括で、 撮影日時やそれに類する日時は4652520分足されたはずです。 正しく処理が行われたかどうか確認してみましょう。

$ exiftool -s DP2M7600.JPG | grep CreateDate
CreateDate                      : 2020:11:08 08:30:00

その他の写真も全て同様の処理が行われたはずです。

縮小

Web等で使用する際には圧縮だけだとファイルサイズの削減は不十分になると考えられるため、 先に縮小を行います。これは1枚ずつ行っています。

$ convert -geometry 1200x800 DP2M7600.JPG DP2M7600_1200x800.JPG

これだけで1200x800に縮小されます。アスペクト比を間違えないようにサイズ指定しましょう。

圧縮

最後に、圧縮します。必要なければEXIF情報も削除します。

$ mkdir dest_tmp
$ jpegoptim -m30 --strip-all --dest=./dest_tmp DP2M*_1200x800.JPG

これでdest_tmpディレクトリに、圧縮されEXIF全削除された写真があるはずです。 品質を変えたい場合は-m50とか、EXIF削除しない場合は--strip-noneにします。 コマンドオプションはもっと存在するので、調べると良いと思います。

おわりに

これで、写真の処理にかかる手間を少しでも短縮できると思います。