大将がゆく

写真を撮ったり、イラストを描いたり……日本一周の旅をした主夫の日記帳

「ExifTool」と「Googleデータポータル」で約4万枚の写真のメタ情報を分析したお話

f:id:taisho_goes:20200401190712j:plain

レンズ交換したり、設定を変えながら写真を撮っていると、自分の傾向を分析したくなりました。

例えば、自分がよく使う焦点距離、F値、ISOなどを集計して、グラフにできたら面白いと思いませんか?

Adobe Lightroom Classicでは「メタデータ」のタブから撮影時の設定ごとに写真をソートすることができます。しかし、時系列で並べたり、グラフにまとめるなど詳細な分析を行いたい場合には、違うアプローチが必要となるかもしれません。

そこで、今回は「ExifTool」と「Googleデータポータル」を使い、過去9年間の撮影データを振り返ることにしました。

目標

今回の目標は

約4万枚の写真のExifデータで撮影情報の統計を取る

ですので、以下のような作業になるかと思います。

  1. 4万枚の写真から必要なExifデータを抽出する
  2. 抽出したExifデータを加工しやすいCSV形式にする
  3. グラフ化するためにCSVファイルを編集する
  4. 様々な条件や切り口で統計を取る

もちろんコストをかけずにです。無料サービスだけでなんとか完結させます。

使用環境

これらの作業を行なった環境は以下のとおりです。

  • Apple iMac 21.5inch Late 2012
  • macOS Catalina 15.10.4
  • ターミナル:zsh

またGoogleのウェブサービスを使うため、Googleアカウントは必須です。

作業1:作業環境の構築

ExifToolのインストール

まずは大量のExifデータを扱うために、「ExifTool」をインストールします。

公式サイトのExifTool by Phil Harveyから最新版のExifTool-11.92.dmg を取得して、インストールしました。

ターミナル.appを起動して、exiftoolと打ち込んで英語で色々と表示されたらインストール完了です。

f:id:taisho_goes:20200401191553j:plain
この画面は「q」を押すと閉じることができます(わからなくて焦った)

作業2:Exifデータの抽出

ExifToolの使い方

ExifToolの使い方は非常に簡単です。ターミナルで

exiftool /フォルダパス名/ファイル名

と打つだけでその写真に含まれるExif情報を一覧表示してくれます。

f:id:taisho_goes:20200401192203j:plain

このときexiftoolに続けて半角スペースを入力し、そこに調べたい画像ファイルをターミナル上にドラッグ&ドロップするだけで、ファイルパスが自動入力されます。

実際に使うコマンド

今回のExif情報の抽出作業では

  1. CSV形式で結果をまとめる
  2. Exif情報の中から必要な項目だけを抽出する
  3. 保存フォルダ単位で効率的に処理する

をします。そこで用いるコマンドは以下のようなものになります。

exiftool -csv -FileName -ModifyDate -Model -LensModel -FocalLength -FNumber -ExposureTime -ISO /フォルダパス名1/*.ARW /フォルダパス名2/*.JPG > /出力先パス名/CSVファイル.csv

↑ 横にスクロールできます

CSV形式で出力する

まずexiftoolの直後に-csvと入力して結果をCSV形式で出力するように指示しています。

CSVファイルは> /出力先パス名で指定したディレクトリにCSVファイル.csvという名前で出てきます。

必要なExif情報だけを抽出する

Exif情報には多くのメタ情報が含まれており、すべてを出力すると扱いづらくなってしまいます。

そのため今回は以下の統計で使いたい項目を抽出することにしました。

項目 Exif名
ファイル名 -FileName
撮影日時 -ModifyDate
カメラ機種名 -Model
レンズ名 -LensModel (-LensID)
焦点距離 -FocalLength
F値 -FNumber
露出時間 -ExposureTime
ISO -ISO

必要な項目を抽出するためには、exiftool -csvに続けて欲しい項目名を入力するだけです。なお、ここでは大文字と小文字の区別はありません。

また、これらの項目名はカメラメーカーによっても異なりますので、作業前にexiftool /ファイルパス/ファイル名と1枚だけすべてのExif情報を表示させて、確認することをお勧めします。

ちなみに、ニコンの.NEFファイルだけLensModelではなくLensIDと項目名が違いました。

フォルダごと調べてもらう

対象の写真を1枚ずつコマンドに入力すると膨大な作業量になってしまいます。そこでフォルダに保管されている写真ファイルを対象とするようにしました。

ExifToolはファイルを個別に調べるだけでなく、

exiftool /フォルダパス名

とすれば、フォルダ内にある全画像のExif情報を表示してくれます。また、フォルダ30個くらいなら1回のコマンドでExif情報を抽出可能でした。

しかし、僕は撮影日ごとにJPEG画像とRAWファイルを同じフォルダで保管しています。そこで集計時に重複してしまわないように、フォルダパス名の後には*.ARWと拡張子を入れて対象のファイル形式を絞り込みます。

なので上記のコマンドでは、

/フォルダパス名1/*.ARW /フォルダパス名2/*.JPG

としていますが、フォルダ1ではARWファイルだけを、フォルダ2ではJPGファイルだけを検索対象としています。

なお、拡張子による絞り込みでは大文字と小文字が区別されるので、*.JPGと入力した際には小文字の.jpgファイルは検索されないので注意が必要です。

作業3:集計する

集計用CSVファイルの作成

30個ずつフォルダをコマンドで処理しましたが、50個ほどのCSVファイルができてしまいました。

集計するためには1つのCSVファイルにまとめた方が楽なので、再びターミナル.appに活躍してもらいましょう。

CSVファイルを保存したフォルダでターミナルを起動して、

cat CSVファイル1 CSVファイル2... > 統合ファイル名.csv

と入力します。これでCSVファイルの内容をすべて連結して、新規CSVファイルとして出力してくれます。

なお、各CSVファイルの見出しも入ってしまいますが、あとの手順で削除します。

Googleスプレッドシートに取り込む

macOSに付属してくるオフィスソフトのNumbersは4万行を超えるCSVファイルを開こうとするとフリーズしてしまいました。

そこでオンラインで利用できるGoogleスプレッドシートで編集しようと思います。

といっても、あまり複雑な操作はなく、

  1. 新規スプレッドシートを作成(空白のテンプレート)
  2. ファイル → インポートを選択
  3. 統合したCSVファイルをアップロード

というだけです。

CSVファイルの編集

このステップでは

  1. 余計なデータの削除
  2. 日時フォーマットの編集
  3. 焦点距離の35mmフルサイズ換算

を行いました。

f:id:taisho_goes:20200401191750j:plain
4万行のデータでもちゃんと動作します

余計なデータの削除

まずは余計なデータということで、重複して入っている見出しを削除します。

あとは不自然に空欄になっている項目がないかなどを調べました。

日時フォーマットの編集

ExifToolで出力したModifyDateはYYYY:MM:DD hh:mm:ssという「:」で仕切られた形式でした。

これではデータポータルが日時だと認識できないので、一般的な表記にしたいと思います。

そのため、まずはModifyDate列を選択した状態で「データ」タブから「テキストを列に分割」をします。自動的に半角スペースを区切り文字として認識してくれましたが、そうでない場合は自分で指定する必要があります。

次に年月日の列を選択し、置換機能を用いて「:」を「/」に置き換えました。

焦点距離の換算

カメラごとにセンサーサイズが異なるため、焦点距離を35mmフルサイズ版で統一します。

別のシートにカメラのモデル名と以下の係数を一覧で作り、関数vlookupを用いて各行で計算をさせました。

機種名 センサーサイズ 係数
コンデジ数種 1/2.4型 5.58倍
E-M10 マイクロフォーサーズ 2.00倍
7D, kiss X6i, etc. APS-C(キヤノン) 1.60倍
NEX-C3 APS-C 1.50倍
5D2, α7III, etc. 35mm 1.00倍

ここまで関数を用いて計算したり、文字列を編集したりしてきましたが、4万行というデータ量をオンラインで扱っていることを感じさせない動作で作業ができました。

Googleデータポータルに接続する

Googleデータポータルにアクセスし、新しいレポートを作成します。

するとデータベースを接続するように表示が出るので、それに従って先ほど作成したGoogleスプレッドシートを選択します。

f:id:taisho_goes:20200401191818j:plain
これであとはグラフを作成するだけ!

f:id:taisho_goes:20200401191830j:plain
いろいろと集計方法を試しながらグラフを作成しました

項目の集計方法や条件で四苦八苦しながらレポートを作成しました(詳しい使い方はググってね★)。

ではでは。