ExifToolのかんたんなメモ

exiftoolwebart

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

追加記入: 2021年10月21日

ExifTool

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

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

ExifTool とは

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

ExifTool by Phil Harvey

公式サイトはこちら。https://exiftool.org
WindowsとMacのインストーラーが用意されていて、ダウンロードリンクはトップの判りやすい場所にあります。

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

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

マニュアル

マニュアルのURLはこちら https://exiftool.org/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

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

exiftool -T -タグ名 パス

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

日付の書式を変更したい -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 ‘%Y/%m/%d %H:%M:%S’

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

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

ALLでゲットすると沢山のタグが羅列されます。-g オプションは、
—- Exif —-, —- File —-,  —- IPTC —- と、グループごとにタイトル付きでまとめてくれます。

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

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

タグを編集したい

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

exiftool -タグ名=値 パス

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

exiftool -copyright=Digitalboo パス

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

exiftool -s -copyright= パス

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

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

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

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

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

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

CSVに書き出したい

exiftool -csv パス > 出力先パス

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

ペンギンアイコン 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 STRCSVファイルのデリミタを設定します。
-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)ファイルの更新日時が保存されます。
-passwordPASSWD 保護されたファイルを処理するためのパスワード
-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 をくっ付けることで結果がクリップボードにコピーされます。命令の後ろに「 | pbcopy」と入れるだけ。

exiftool パス | pbcopy

応用して使う

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

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

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

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

こうした利用方法を使い始めてから突如 Exiftool の使用頻度が上がりました。それついてはFileMaker関連の投稿でまた改めて。

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