Ubuntu Weekly Recipe

第553回 Ubuntuで写真のメタデータを扱う方法

この記事を読むのに必要な時間:およそ 4 分

みなさん,写真撮ってますか?

474回ではUbuntu上での写真の管理現像アプリとしてdarktableを紹介しました。この記事ではdarktableの様々な機能を紹介しましたが,その中にコレクションという写真の検索,絞り込み機能がありました。

フィルムロールに登録された写真を,さらに細かい条件によってフィルタできます。このフィルタを「コレクション」と呼びます。具体的には「撮影日」⁠⁠撮影者」⁠⁠使ったレンズ」⁠⁠焦点距離」⁠⁠絞り」⁠⁠ISO感度」といったパラメータで絞り込めます。たとえば「PENTAX K-1で今日撮影した写真のうち,ISO感度が3200で絞りがF2.8のもの」といった条件を指定できます。

なぜこのようなことが可能なのかと言えば,デジタルカメラで撮影した写真には画像情報の他に,撮影時の様々な情報がメタデータとして記録されているからです。今回はこうした写真のメタデータをコマンドラインから操作するツールと,その応用例を紹介します。

Exifデータとは?

こうしたメタデータはExif(エグジフ)データと呼ばれています。ExifはExchangeable image file formatの略で,写真用メタデータを画像ファイル(JPEGやTIFF)に埋め込むための規格です。Exifには撮影したカメラのメーカー,モデル,使用したレンズといった機材の情報をはじめ,撮影日時,シャッタースピード,絞り値,フラッシュ使用の有無といった撮影時の設定など,非常に多くの情報が含まれています。

写真の管理アプリといえばAdobe Lightroomが有名ですが,Lightroomもこうした情報をデータベースに格納することで,写真の検索や絞り込みを実現しています※1)⁠

※1
余談ですがLightroomのカタログファイルはSQLite3のデータベースそのものです。Lightroomが手元にある方は,一度sqlite3コマンドで内部を見てみると面白いと思います。筆者はsqlite3コマンドを使ってカタログ内から条件に合致した写真のみを選別し,クラウドストレージにバックアップするという作業を自動化しています。

Exifデータを調べるには

実際に写真に記録されたExifデータを見てみましょう。一番簡単な方法は「ファイル」※2を使う方法です。JPEGファイルを右クリックしてプロパティを開き,⁠画像」タブをクリックしてください。

※2
GNOMEのファイルブラウザ,旧名Nautilusのことです。

図1 撮影に使用したカメラメーカーや機種,撮影時の設定など,Exifデータの中でも参照される頻度の高い基本的な情報が表示される

画像

「画像ビューアー」では,もう少し詳しい情報を閲覧できます。JPEGファイルをダブルクリックして画像ビューアーで開いたら,ウィンドウ右上のハンバーガーメニューからプロパティを開いてください。⁠メタデータ」タブでは先ほどとほぼ同様の情報しか表示されませんが,⁠詳細」タブでは画像に埋め込まれているExif情報をより詳しく表示できます。

図2 画像ビューアーで写真のメタデータを表示した例

画像

図3 ⁠詳細」タブではこれだけのExif情報を表示できる

画像

このような画像を閲覧するアプリで,付随する情報を表示できるのは言ってみれば当然です。しかし我々としては,コマンドラインからExif情報を取得し,数値や文字列としてプログラムの中で再利用したいですよね。

画像のデータを表示するコマンドと言えば,ImageMagickに含まれているidentifyコマンドが有名です。画像のフォーマット,サイズ,色数といった基本的なデータを一行で表示するidentifyコマンドですが,⁠-verbose」オプションをつけて実行するとより詳細な情報を表示できます。

identifyコマンドであるファイルの詳細情報を表示した例。Properties以下にexif:というプレフィックスつきでExifタグとその値が表示されている

$ identify -verbose (ファイル名)
Image: (ファイル名)
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
(...略...)
  Properties:
    exif:DateTime: 2019:01:09 19:19:24
    exif:DateTimeDigitized: 2018:06:11 18:39:53
    exif:DateTimeOriginal: 2018:06:11 18:39:53
(...略...)

-verboseオプションをつけると非常に大量の情報が表示されます。そのままでは使いにくいため,自分にとって必要なタグだけを抜き出しましょう。パイプでgrepコマンドに繋いでもよいのですが,identifyコマンドはformatオプションを指定することで,表示されるタグを絞り込むことができます。たとえばExifデータからカメラのメーカー(exif:Make)とモデル(exif:Model)を表示するには以下のようにします。

(「%[]」で表示させたいタグを囲んで指定する。タグにはワイルドカードが指定できるため,たとえば%[EXIF:GPS*]と指定すると,GPS関連のタグを表示できる)

$ identify -format "%[exif:Make]\n%[exif:Model]\n" (ファイル名)
RICOH IMAGING COMPANY, LTD.
PENTAX K-1 Mark II

このように,Exifデータを参照するだけならばImageMagickでも十分です。しかしImageMagickではExifデータの削除や編集がやりにくいため※3)⁠exiftoolというExifの操作に特化したツールを利用するのがおすすめです。

※3
「convert -strip」コマンドでExifデータの削除は可能ですが,すべてのメタデータを一括削除してしまうため,柔軟性に欠けます。また存在しないExifタグを新規に追加することができません。

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。