ExifToolのかんたんなメモ

exiftoolwebart

写真や画像、メディアのメタデータに関する最強ツール、Exiftool についての若干のメモ。

追加記入: 2021年11月30日

ExifTool

Exiftool をときどき使ってきましたが、最近特に使用頻度が上がったので今更ですがメモを残しておこうと思いました。でも多分、ここのメモなんかより検索したほうが役に立つ良い記事を発見できると思います。

自分のためになることは人様のためになるかもしれない。人様のためになることは自分のためにもなりましょう。何を言ってるんだか。

ExifTool とは

写真や画像やメディアファイルからメタデータを取得したり追加したり変更したりできるツールです。メディアカタログのアプリケーションにも多く組み込まれています。コマンドラインで利用します。

ExifTool by Phil Harvey

公式サイトはこちら。https://exiftool.org

※ 本家が落ちてるときのミラー  http://exiftool.sourceforge.net

インストール

インストーラーが用意されていて、ダウンロードリンクはトップの判りやすい場所にあります。

インストーラーが用意されているってことは、ダウンロードしてダブルクリックして進めていくだけでインストールできます。

コマンドラインのツールなのにインストーラーを用意してくださるとは何とありがたいことでしょう。普通この手のツールって素人にはインストールすることもできない高難易度で出来てますからね。

マニュアル

マニュアルのURLはこちら https://exiftool.org/exiftool_pod.html
※あるいは http://exiftool.sourceforge.net/exiftool_pod.html

ちょい難しいけどいろいろ書いてあります。

基本操作

ターミナルを起動してタタタっと入力して使います。

基本コマンドにオプションを追加していきます。いくつかの例をあげてみます。

メタデータが欲しい

exiftool パス

「exiftool  目的パス」こう書くとメタデータが取得できます。パスは目的のファイルやフォルダをターミナルのウインドウにドラッグすればいいです。ファイルを指定するとそのファイルのデータを取得し、フォルダを指定するとそのフォルダ内のファイルのデータをだーっと取得します。

リターンすると結果はこんな感じで網羅されます。

ExifTool Version Number : 12.27
File Name : IMGP4563.jpg
File Size : 2.8 MiB
File Modification Date/Time : 2021:01:20 15:25:19+09:00
File Access Date/Time : 2021:05:19 11:56:52+09:00
File Inode Change Date/Time : 2021:04:07 10:17:01+09:00
File Permissions : -rw-r–r–
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Exif Byte Order : Big-endian (Motorola, MM)

オプションやタグ名をくっつけて細かく指令を出します。

exiftool -s パス

-s を付けると短いタグ名で出力されます。短いタグ名は、次の「タグ名を指定する」に使います。

ExifToolVersion : 12.27
FileName : IMGP4402-V2.jpg
FileSize : 2.8 MiB
FileModifyDate : 2021:06:19 13:18:09+09:00
FileAccessDate : 2021:06:21 19:25:19+09:00
FileInodeChangeDate : 2021:06:19 13:18:09+09:00
FilePermissions : -rw-r–r–
FileType : JPEG
FileTypeExtension : jpg
MIMEType : image/jpeg
ExifByteOrder : Big-endian (Motorola, MM)
XResolution : 72
YResolution : 72
ResolutionUnit : inches
Artist : HOSOI Hisato
YCbCrPositioning : Centered

指定したタグだけ欲しい

網羅されても困る場合、狙ったタグの情報だけ欲しい場合はタグ名を指定します。スペースのない短いタグ名を使います。そのタグだけを取得します。

exiftool -s -タグ名 -タグ名 パス

こんなふうに、-タグ名 を個別に書きます。例えば exiftool -s -filename -filesize パス でファイル名とサイズを取得します。-タグ名はスペースで区切っていくらでも書き連ねられます。

値だけ欲しい -T または -b

ExifToolの出力結果は「タグ名 : 値」という形です。値だけが欲しいときがありますよね。 -T オプションを付けます。

exiftool -T -タグ名 パス

これで値だけが取得できます。

説明では「表形式での出力」となっています。タグ名を複数セットすると、値がタブ区切りで出力されます。

-b オプションではもっと直接的に値だけを取得できます。タグ名をひとつだけ指定して取得する場合は -b で値のみサクッと取得できます。ただし複数のタグを指定すると、値が区切りなく取得されてしまいますので使い物になりません。

区切りを付けて出力する方法があるような気がしますし、もしかしたら見えない区切りで区切られているのかもしれません。そういうのを扱えるデジタル強者なら -b は使い勝手がいいかもしれません。

私はもっぱら -T を使っています。

 -T と -b の微妙な違い

例えば FileSize を取得するシンプルなコードを実行させます。

exiftool -T -filesize パス
exiftool -b -filesize パス

どちらも値が取得できますが、-T では整形された形式、-b では生データが取得されます。

-T の結果: 1085 KiB

-b の結果: 1111018

-b はバイナリを取得するオプションなのでこうなります。

日付の書式を変更したい -d

日付関連のタグでは値が 2021:06:08 02:44:03+09:00 こんな感じで返ってきます。最初は +9:00 と書かれているので9時間足さねばならないかと思いましたが、これはただタイムゾーンを示しているだけでした。足さなくていいです。

この書式を変更できます。 -d オプションを使います。

-d %Y/%m/%d_%H:%M:%S
このように指定すると、
2021/06/08_02:44:03
こう返ってきます。

-d に続けて書式を書くわけですが、スペースを含めると上手くいきません。エスケープの “\” を付けても駄目です。そこで

-d ‘%Y/%m/%d %H:%M:%S’

このようにクォーテーションで括ってやると中にスペースを置けます。

グループごとにゲットしたい -g

-g オプションはグループごとにタイトル付きでまとめてくれます。
—- Exif —-, —- File —-,  —- IPTC —- とグループ名が書かれて、グループごとにデータがまとめられて出力されます。

日本語のタグ名で出力してほしい -lang ja

-lang ja オプションで可能な限り日本語で返してくれます。

フォルダ内のフォルダのファイルも処理したい

exiftool フォルダパス と書けばフォルダ内のファイルのメタデータをだーっと取得しますが、指定フォルダ内にさらにフォルダがある場合、その中身については無視します。

フォルダ内のフォルダも全部ひっくるめて処理したいときは、-r オプションを使用します。

exiftool -r フォルダパス

これでサブフォルダ内のファイルもすべて処理してくれます。

複数ファイルの出力を変更したい -T とか -j

複数ファイルの処理をするとき、普通は「======」でファイルを区切って出力されます。例えばこんな。

 

======== /Users/user/Desktop/untitlefolder/fileName.png
ExifToolVersion : 12.29
FileName : fileName.png
Directory : /Users/user/Desktop/untitlefolder
fileSIze: 98 KiB
....
======== /Users/user/Desktop/untitlefolder/fileName2.png
ExifToolVersion : 12.29
FileName : fileName2.png
Directory : /Users/user/Desktop/untitlefolder
fileSIze: 426 KiB
....

 

こういう出力です。後で何かに利用するとき不便です。そこで、先ほど「タグの値だけを取得したい」で取り上げた -T が活躍します。 -T を付けることで、タブ区切りの表形式で出力されます。

あるいは、難しいことに得意な人にとっては JSON 出力が可能です。 -j です。

出力データを他で利用する際に有効利用できるでしょう。csvファイルとして出力することもできます。

CSVに書き出したい

exiftool -csv パス > 出力先パス

csvファイルに書き出すには -csv> 出力先パス を書くと良いようです。pbcopyというコマンドを知らないときはcsvファイルを中継として仕方なく書き出していました。

出力をクリップボードにコピーしたい

ExifToolの使い方から外れますが、pbcopy は 出力をクリップボードにコピーする処理です。「 | 」で区切って命令します。ExifToolの出力をコピーしたいならこのように書きます。

exiftool -s パス | pbcopy

あとはデータを利用したいアプリに切り替えて必要な箇所にペーストするだけ。出力をコピーする処理、私は個人的にめちゃ使います。

※ pbcopy は Mac 用のコマンドで、LinaxやWindowsにもそれぞれ同じ目的のコマンドがあると思います。

ファイルのタグを編集したい

タグ名=値 と書くと編集またはタグの追加ができます。

exiftool -タグ名=値 パス

タグ名にイコールを付けて値を書くとそのタグを書き換えまたは追加できます。イコールの前後にスペース入れてはいけませんよ。

exiftool -copyright=Digitalboo パス

と書けばCopyrightに「Digitalboo」がセットされます。

exiftool -s -copyright= パス

と、書けば( =の後ろに何も書かない )Copyrightタグが削除されます。

タグを編集したときに「_original」を作らず直接上書きしたい

タグを追加・編集すると、デフォルトでオリジナルファイル末尾に「_original」を付与して保存し、編集したファイルが新規に作成されます。

安全性の高いありがたい機能ですが、あえてこれが不要なときもあります。

-overwrite_original を付ければ「_original」が作成されません。直接ファイルが改変され新たに保存されます。

編集済みファイルはファイル作成日、変更日が今日になりますのでご注意を。内部のExifにはちゃんと元の日付データがありますから。気になる場合はファイル属性を変更するコマンドもあります。→ 日付を変更するコマンド

ペンギンアイコン mini

基本的なことは以上で、マニュアルによるととても複雑なこともできるようですが自分には基本の機能で十分だと思えました。

以下、タグとオプションをマニュアルページから引用して日本語付けてリストしました。より詳しい説明や使い方は公式ページやマニュアルでどうぞ。

タグ操作と入出力テキストフォーマット
タグ操作
-TAG or –TAG 指定したタグを抽出または除外する
-TAG[+-^]=[VALUE] タグの新しい値を書き込む
-TAG[+-]<=DATFILE ファイルの内容からタグの値を書き込む
-TAG[+-]<SRCTAG タグの値をコピーします(-tagsFromFile参照)。
-tagsFromFile SRCFILE ファイルからタグの値をコピーする
-x TAG (-exclude) 指定したタグを除外します。
入出力テキストのフォーマット
-args (-argFormat) メタデータをexiftoolの引数としてフォーマットします。
-b (-binary) メタデータをバイナリ形式で出力します。
-c FMT (-coordFormat) GPS座標のフォーマットを設定します。
-charset [[TYPE=]CHARSET] 特殊文字のエンコーディング指定
-csv[[+]=CSVFILE] タグをCSV形式でエクスポート/インポートする
-csvDelim STR CSVファイルのデリミタを設定します。
-d FMT (-dateFormat) 日付/時刻の値のフォーマットを設定します。
-D (-decimal) タグのID番号を10進数で表示します。
-E,-ex,-ec (-escape(HTML|XML|C)) タグの値をHTML、XML、Cのいずれかにエスケープします。
-f (-forcePrint) 指定したすべてのタグを強制的に出力します。
-g[NUM…] (-groupHeadings) タググループごとに出力を整理します。
-G[NUM…] (-groupNames) 各タグのグループ名を表示します。
-h (-htmlFormat) 出力にHTMLフォーマットを使用します。
-H (-hex) タグのID番号を16進数で表示します。
-htmlDump[OFFSET] HTML形式のバイナリダンプを生成します。
-j[[+]=JSONFILE] (-json) JSON形式でタグをエクスポート/インポートします。
-l (-long) 長い2行の出力形式を使用します。
-L (-latin) Windows の Latin1 エンコーディングを使用します。
-lang [LANG] 言語を設定
-listItem INDEX リストから特定の項目を抽出します。
-n (–printConv) 出力変換を行いません。
-p FMTFILE (-printFormat) 指定されたフォーマットで出力します。
-php タグを PHP の配列として書き出します。
-s[NUM] (-short) 短い出力形式
-S (-veryShort) 非常に短い出力形式
-sep STR (-separator) リストアイテムのセパレータ文字列を設定します。
-sort 出力をアルファベット順に並べ替えます。
-struct 構造化された情報の出力を可能にする
-t (-tab) タブ区切りのリスト形式で出力します。
-T (-table) 表形式での出力
-v[NUM] (-verbose) 冗長なメッセージを表示します。
-w[+|!] EXT (-textOut) 出力テキストファイルを書き込む(上書きする!)
-W[+|!] FMT (-tagOut) 各タグごとに出力テキストファイルを書く
-Wext EXT (-tagOutExt) -W で指定されたファイルタイプのみ書き込みます。
-X (-xmlFormat) RDF/XML 出力形式を使用します。
処理制御
a (–duplicates) 重複するタグの抽出を許可します。
-e (–composite) 複合タグを生成しません。
-ee[NUM] (-extractEmbedded) 埋め込みファイルから情報を抽出します。
-ext[+] EXT (-extension) 指定した拡張子のファイルを処理します。
-F[OFFSET] (-fixBase) メーカーノートのオフセットのベースを固定します。
-fast[NUM] メタデータを抽出する際の速度を上げる
-fileOrder[NUM] [-]TAG ファイルの処理順序を設定します。
-i DIR (-ignore) 指定したディレクトリ名を無視する
-if[NUM] EXPR 条件付きでファイルを処理する
-m (-ignoreMinorErrors) マイナーなエラーや警告を無視します。
-o OUTFILE (-out) 出力ファイルまたはディレクトリ名を設定する
-overwrite_original ファイルの名前を変えてオリジナルを上書きする
-overwrite_original_in_place(上書き) tmpファイルをコピーして上書きします。
-P (-preserve) ファイルの更新日時が保存されます。
-password PASSWD 保護されたファイルを処理するためのパスワード
-progress[:[TITLE]] ファイルの進捗状況を表示します。ファイルの進捗状況を表示します。
-q (-quiet) 処理を静かにします。
-r[.] (-recurse) サブディレクトリを再帰的に処理します。
-scanForXMP ブルートフォースXMPスキャン
-u (-unknown) 未知のタグを抽出します。
-U (-unknown2) 未知のバイナリタグも抽出する
-wm MODE (-writeMode) タグの書き込み/作成のモードを設定します。
-z (-zip) 圧縮された情報を読み書きする

 

Warning (警告) に対処

LargeFileSupport – 大きなファイル

使用していて気づいたのですが、ビデオファイルのExifを取得するとき、中途半端にしか取得できない事があります。

exiftool 取得タグが少ない
種類QuickTimeのタグが3つくらいしかない

タグをよく見ると、Warning がありました。

Warning: End of processing at large atom (LargeFileSupport not enabled)

何を言ってるんでしょう?

「large atom での処理終了(LargeFileSupport が有効でない)」

だそうです。でかいファイルを扱うときは LargeFileSupport を有効にしなければならないようですね。それってどうやるの?

フォーラム https://exiftool.org/forum/index.php?topic=3916.0 の会話の中に答えらしきものがありました。説明書内にもあると思いますがフォーラムが先にヒットしたので。

オプションで -api largefilesupport=1 を追加すればいいよということです。早速試しましょう。コマンドのオプションの中に -api largefilesupport=1 を紛れ込ませます。

exiftool -s -api largefilesupport=1 パス

さっきはQuickTimeのタグが3つしかありませんでしたが、一気に60行くらい取得できました。

exiftook 全て取得
すべて取得できた

てっきり、ファイルにメタデータがちゃんと保存されていないのだと思って諦めていましたが、でかいファイルの制限があったとは知りませんでした。

この件のまとめ

ファイルが大きい場合、メタデータをきっちり取得できないことがある。-api largefilesupport を追加する。

ファイルがでかいか小さいかなど前提として知ったことではありません。このオプションは必須ですね。でもほんとは、多分想像ですけど、exiftoolの設定としてこれをセットしておけるのではないかと思います。そこまで調べていません。

ExtractEmbedded – より多くのタグ

次のWarning はこれについてです。マイナーな警告で無視していいんですが、より多くのタグを見つける可能性があるとの指摘です。

Warning: [minor] The ExtractEmbedded option may find more tags in the media data

説明にはこうあります。

-ee[NUM]    (-extractEmbedded)   Extract information from embedded files

"埋め込まれたファイルから情報を抽出します。"

メディアファイルに埋め込まれたファイルの情報を抽出しますね。より多くのタグをいただきましょう。タグに -ee を追加します。

また、次のようにも説明されています。

When -ee (-extractEmbedded) is combined with -p, embedded documents are effectively processed as separate input files.

“-ee に -p を組み合わせることで、埋め込まれたドキュメントを別の入力ファイルとして効果的に処理します。
Exiftool Documentation

EPSファイルに埋め込まれた文書、PDFファイルに埋め込まれたEPS情報やJPEG・Jpeg2000画像、JPEG・MPOファイルに埋め込まれたMPF画像、AVCHDビデオのストリーミングメタデータ、Mac OSファイルのリソースフォークから情報を抽出します。

GPSに関する事柄や、[NUM] で解析範囲を指定することなどがいろいろ書かれていますね。だんだん訳わからなくなってきたのであとはおまかせします。なんせ -ee をつけるといっぱい情報が得られますよということでした。

ExifToolを使う

実際に普段どのように使用しているかというと、ターミナルのウインドウに「exiftool -s 」と手入力し、メタデータを知りたいファイルをドラッグしてリターンします。

ターミナルのウインドウにメタデータがだーっと出てきますから確認します。さっと確認するだけ。そんな使い方が結局多いですね。

ターミナルウインドウ

データを眺めるだけでなく他のアプリで利用するには -csv を付けてファイルに書き出したりしていましたが、pbcopy コマンドを知ってからはもっぱらクリップボードにコピーして利用しています。

 

応用して使う

タグのキーを追加したり値を編集できますので応用範囲はとても広いです。日付の調整やキーワードの編集、そして画像ファイルに著作権情報を追加で入力するということもよくやります。

追加や編集に関しては手入力が面倒なので、変数部分を自由に設定して扱える自作マイコード管理ファイルを使っています。

FileMaker CodeManagement
このFileMakerファイルについては Macで実行もできる FileMakerコード管理 を参照

これはFileMakerでして、テンプレートを置く → レコードに準じたデータを当てはめてコードを生成 → AppleScriptを実行ステップを使ってターミナルに送信(その後、結果をコピーして再びFileMaker持ってくることも)という手順を行う自動処理マシンです。個人的にはAutomatorより優秀😀

こうした利用方法を使い始めてから突如 Exiftool の使用頻度が上がりました。それついてはFileMaker関連の投稿でまた改めて。
-> Macで実行可能なFileMakerコード管理 CodeManager

本ポストはとりあえず ExifTool のかんたんメモ(自分用)ということで、ここらでごめんください。

コメント

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください