• 記事をシェア
  •  
  •  
  •  
  • B! 
  •  

ExifToolの使い方 ビデオ・写真の位置情報、撮影日を追加・編集・削除する

ExifToolとは

ExifToolとはPhil Harvey氏によって開発された、デジタル写真のExif情報を読み出し、書き込みできるフリーのツールです。 動作環境はWindows, Mac。そしてその他のPerl言語が扱える環境で動作します。 コマンドライン形式のインターフェス(CUI)で操作します。
2003年のバージョン1のリリース以降、継続的に機能強化が続けられており、今ではデジタル写真や動画・画像ファイルだけでなく、PDFファイルやZIPファイルなどのメタデータさえ扱うことができます。 また、多くのオプションを使って、非常に柔軟な情報の書き換えを行うことができます。
ここでは、この強力なツールのほんの一部分、Exif情報の読み出し、書き込みの基本操作を解説します。

ExifToolのダウンロードとインストール

PC ExifToolのオフィシャルサイト を開いて、図のリンクをクリックするとダウンロードできます。 Windowsの場合は「Windows Executable」と書かれている部分のリンクをクリックします。 すると"exiftool-12.64.zip"といったファイルが得られるので、これを任意のフォルダーで解凍します。 "exiftool(-k).exe"というコマンドファイルが解凍されます。
PC エクスプローラー上で、解凍された"exiftool(-k).exe"の上にjpegファイルをドラッグ&ドロップすると、図のように、そのjpegファイルのExif情報を閲覧することができます。 ただExif情報を閲覧したいだけなら、これでインストール完了です。
ExifToolをコマンドラインから操作したり、スクリプトを使って自動処理したりするためには、もうひと手間掛ける必要があります。 解凍された"exiftool(-k).exe"を"exiftool.exe"という名前に変更して、Windowsのコマンドパスが通っているフォルダーに移動します。 具体的にはC:ドライブの"Windows"フォルダーに移動します。
インストール方法の詳細については Installing ExifTool (exiftool) のページで読めます。
PC するとこのように、Windowsコマンドプロンプトなどのコンソールアプリから、ExifToolが操作できるようになります。 たとえば、ExifTool自身のバージョンを知りたいときには exiftool -ver と入力します。
なお、ここで使用しているコンソールアプリは ConEmu です。
作業フォルダーを指定する
PC コンソールアプリでコマンドを入力する際には、まず処理対象となる写真が格納されているフォルダーを、作業フォルダーとして指定(移動)しておきます。
まずドライブ名を入力して、ドライブを切り替えます。たとえば"E:"ドライブのフォルダーを使うときには e: と入力します。
次に"cd"(Change Directory)コマンドで、処理対象のフォルダーを指定します。 たとえば"work/Geotag Photos/20230717"フォルダの写真を扱うときには cd "work/Geotag Photos/20230717" と入力します。
ConEmu を使っている場合は、図のように、対象フォルダを、エクスプローラーからConEmuの画面へドラッグ&ドロップすれば、そのパスが入力されます。
写真のバックアップを取っておくこと
操作ミスやツールのバグによる写真ファイルの破損に備えて、作業の前には必ず写真のバックアップを取っておいてください。
ExifToolは、写真を更新したときには、例えば"dscnxxxx.jpg_original"のようなファイル名で、元の写真のバックアップを作成します。 しかしディスクの不具合などでバックアップの作成に失敗したり、それ以前の操作ミスで写真を削除してしまう可能性もあります。
なお、オプションに"-overwrite_original"または"-overwrite_original_in_place"を指定すると、バックアップは生成されません。

ExifToolの基本的なコマンドライン

ExifToolの基本的なコマンドラインは以下の通りです。

情報の読み出し


exiftool [OPTIONS] [-TAG...] [--TAG...] FILE...

情報の書き込み


exiftool [OPTIONS] -TAG[+-<]=[VALUE]... FILE...

情報のコピー


exiftool [OPTIONS] "-DSTTAG<SRCTAG..." FILE...
exiftool [OPTIONS] -tagsFromFile SRCFILE ["-[DSTTAG<]SRCTAG..."] FILE...

[OPTIONS]には、"-(ハイフン)"に続けて、動作を指定する文字列(オプション)を書きます。
[-TAG]には、"-(ハイフン)"に続けて、読み出したい、または書き込みたいタグ(Exif情報のフィールド名)を指定します。
FILEには、読み出しまたは書き込みの対象となる写真のファイル名またはフォルダ名を指定します。
すべてのオプションとタグの指定方法は、 exiftool Application Documentation (exiftool) のページで読めます。 また、ExifToolがサポートするタグの種類の一覧は ExifTool Tag Names (exiftool) のページで読めます。 さらにこの中のExif情報に関するタグの一覧は EXIF Tags (exiftool) GPS Tags (exiftool) のページで読めます。

写真からExif情報を読み出す

PC 特定の写真のExif情報をすべてダンプするには、次のように入力します。
exiftool ファイル名
ファイル名にはワイルドカードも使えます。たとえば
exiftool dscn*.jpg
と入力すると、現在のフォルダにある、名前が"dscn"で始まるすべてのJPEGファイルのExif情報を連続してダンプします。
PC Exif情報の特定のタグをダンプするには、次のように入力します。
exiftool [-タグ] ファイル名
たとえばすべての写真の撮影日時を一覧で見るには、図のように
exiftool -DateTimeOriginal dscn*.jpg
のように入力します。
PC 複数のタグをまとめてダンプすることもできます。
たとえばすべての写真の撮影日時とISO値を一覧で見るには、図のように
exiftool -DateTimeOriginal -ISO dscn*.jpg
のように入力します。
このほかにも非常に多くの、情報読み出しのためのコマンドライン記述例が READING EXAMPLES (exiftool) で読めます。

写真にExif情報を書き込む

情報書き込みのコマンドラインは、上に示した通り
exiftool [OPTIONS] -TAG[+-<]=[VALUE]... FILE...
ですが、"-TAG[+-<]=[VALUE]..."の部分を、さらにわかりやすく分類すると、下記の表のようになります。
Exiftool write command format
SyntaxResult
-TAG="TAG"で指定されるタグを削除します。対象ファイルに複数のグループが存在し、それらに同じタグが存在していた場合は、それらすべてが削除されます。
-all=すべてのタグを削除します。ただし正確にすべてのタグを削除できない可能性があります。 この機能の持つ制約については Writer Limitations (exiftool) で読めます。
-GROUP:TAG=指定したグループ内の、指定されたタグのみを削除します。
-GROUP:all=指定したグループ内の、すべてのタグ情報を削除します。
-[GROUP:]TAG=VALUE"TAG"で指定されるタグに、"VALUE"で指定した値を設定します。
ただし"GROUP"が指定されている場合は、そのGROUP内のタグのみ更新されます。
-[GROUP:]TAG+=VALUE"TAG"で指定されるタグのリストに、"VALUE"で指定した項目を追加します。あるいは日付/時刻を表すタグに、"VALUE"で指定した値を加算します。あるいはタグの数値に"VALUE"で指定した値を加算します。
ただし"GROUP"が指定されている場合は、そのGROUP内のタグのみ更新されます。
-[GROUP:]TAG-=VALUE"TAG"で指定されるタグのリストから、"VALUE"で指定した項目を削除します。あるいは日付/時刻を表すタグから、"VALUE"で指定した値を減算します。あるいはタグの数値と"VALUE"で指定した値が一致する場合は、そのタグを削除します。
ただし"GROUP"が指定されている場合は、そのGROUP内のタグのみ更新されます。
-[GROUP:]TAG<=FILE"FILE"で指定されたファイルの内容から、"TAG"で指定されるタグの値をコピーします。
ただし"GROUP"が指定されている場合は、そのGROUP内のタグのみ更新されます。
VALUE に空白文字やその他の特殊文字が含まれている場合は、VALUE全体を引用符で囲む必要があります。 また「<=」構文を使用する場合は、引数全体を引用符で囲む必要があります (shellのリダイレクトを防ぐため)。

GROUPとは?


exiftoolは、JPEGファイルに含まれるExif情報のほかにも、非常に多くの種類のファイル形式の、非常に多くの種類のメタデータ(タグ)の閲覧、更新に対応しています。 このメタデータ(タグ)の種類を指定するのが"GROUP"です。 たとえは一つのファイルに複数の種類のメタデータ(タグ)が含まれていて、それぞれに同じ名前のタグがある場合、GROUPを指定しないと、同じ名前のタグすべてが更新されてしまいます。
Exif情報のみを更新する場合は、グループ名として常に"EXIF:"を指定するのが確実です。
グループの一覧は Tag Groups (exiftool) のページで読めます。

Exif情報書き込み例:タグの削除

PC 特定の写真の、特定のタグを削除するには、次のように入力します。
exiftool -TAG= ファイル名
右の図の例では、写真"dscn7618.jpg"から、GPSの標高情報"gpsaltitude"を削除しています。 まず
exiftool -gpsaltitude dscn7618.jpg
と入力して、元の写真にGPSの標高情報が含まれていることを確認しています。 つづいて
exiftool -gpsaltitude= dscn7618.jpg
と入力して、GPSの標高情報を削除しています。 削除に成功したので、"1 image files updated"と表示されています。 ここでExiftoolによって、元の写真のバックアップ"dscn7618.jpg_original"が作成されます。 最後に再度、
exiftool -gpsaltitude dscn7618.jpg
と入力して、GPSの標高情報が無くなっている(なにも表示されない)ことを確認しています。
なお、削除時にグループを指定する場合は
exiftool -EXIF:gpsaltitude= dscn7618.jpg
のように入力します。

Exif情報書き込み例:タグの追加

PC 特定のタグを追加するには、次のように入力します。
exiftool -TAG=VALUE ファイル名
右の図の例では、写真"dscn7618.jpg"に、"imagenumber"フィールドとして"1999"を追加しています。 具体的には
exiftool -imagenumber=1999 dscn7618.jpg
と入力しています。 またExiftoolによって、元の写真のバックアップ"dscn7618.jpg_original"の内容が更新されます。 何度更新を行っても、生成されるバックアップファイルの数は常に1つです。

Exif情報書き込み例:タグへの値の加算

PC 特定のタグに値を加算するには、次のように入力します。
exiftool -TAG+=VALUE ファイル名
右の図の例では、撮影日時"DateTimeOriginal"に、"0:0:1 3:10:40(1日と3時間10分40秒)"を加算しています。 VALUEの指定に空白文字を含むので、引数全体を引用符で囲み
"-DateTimeOriginal+=0:0:1 3:10:40"
のように指定しています。

Exif情報書き込み例:タグからの値の減算

PC 特定のタグから値を減算するには、次のように入力します。
exiftool -TAG-=VALUE ファイル名
ここでは複数の写真の撮影日時を一括して減算してみます。 まず、
exiftool -AllDates *.jpg
と入力して、現在の写真の撮影日時を確認します。
ショートカット
ここで指定しているタグ"-AllDates"はExiftools独自のタグで、ショートカットと呼ばれるものです。 通常、写真の撮影日時は "DateTimeOriginal ", "CreateDate", "ModifyDate" の3か所に書き込まれており、変更するときは、これら3つとも変更する必要があります。 Exiftoolsで"-AllDates"を指定すると、これら3つのタグを指定したのと同じ動作をします。
Exiftoolsで使用できるショートカットについては Shortcuts Tags (exiftool) のページで読めます。
ショートカットはユーザーが自分で定義することもできます。 exiftools.exeが格納されているフォルダーに".ExifTool_config"というファイル名で構成ファイルを作成します。 構成ファイルのサンプルは example.config (exiftool) のページで読めます。
日時とフォルダの指定方法
PC ここの例では日時の差分は
-AllDates-=3:5
と指定しています。 "3:5"と指定すると3時間5分を意味します。 Exiftoolsでは、いろいろな日時の指定方法があります。 たとえば単に"1"と指定すると1時間を表し、"1:: 0"と指定すると1年を表します。 また数字の前に+/-記号を付加すると、タイムゾーンをシフトすることもできます。 Exiftoolsで使用できる日時の指定方法については ExifTool Date/Time Shift Module (exiftool) のページの"SHIFT STRING"の章で読めます。 また、ここでは処理の対象となる写真を指定するのに、ファイル名ではなくフォルダー名を指定しています。 フォルダー名を指定すると、そのフォルダーに格納されているすべてのファイルが処理対象になります。
サブフォルダまで処理対象にするには、オプションに"-r"を指定し、
exiftool -r -AllDates-=VALUE "フォルダー名"
のように指定します。
結果を確認すると、すべてのファイルの "DateTimeOriginal ", "CreateDate", "ModifyDate" が一斉に減算されているのが分かります。
このほかにも非常に多くの、情報書き込みのためのコマンドライン記述例が WRITING EXAMPLES (exiftool) で読めます。

カレンダーがずれたデジカメで撮影した、写真の撮影日時をまとめて修正する

デジカメのカレンダーがずれていたのに気が付かずに撮影したときに、それらの写真の撮影日時をまとめて修正することができます。 カレンダーがずれていても、それぞれの写真の相対的な撮影日時は間違っていないので、単にすべての写真の撮影日時に、ずれていた時間を加算または減算すればOKです。
どれか1枚、ほぼ正確な撮影日時が分かる写真があれば、まずその写真の撮影日時を、タグ"-AllDates"を使って読み出します。
exiftool -AllDates ファイル名
そして、正確な撮影日時との時間の差分(ずれていた時間)を求めます。 あとは上で説明した
exiftool -AllDates+=時間の差分 "フォルダ名"
または
exiftool -AllDates-=時間の差分 "フォルダ名"
を使って、フォルダに保存したすべての写真の撮影日時に時間の差分を加算または減算します。

MPEG4(.mp4)ビデオに位置情報を書き込む

ビデオへの位置情報の書き込み方法は統一されていません。 また、ビデオを参照するアプリによって、ビデオのどこに書き込まれた位置情報を参照するかもまちまちです。 ここでは、Googleフォトで認識させるための位置情報の書き込み方法を解説します。
Googleフォトでは、MPEG4(.mp4)ビデオの タグ"Quicktime:CreateDate"と、 タグ"Quicktime:GPSCoordinates" を認識します。 ビデオに撮影日時を書き込むには、
exiftool -P -CreateDate="YYYY:MM:DD HH:MM:SS" ファイル名
のように、またビデオに位置情報を書き込むには、
exiftool -P -GPSCoordinates="緯度, 経度, 高度" ファイル名
のように指定します。 ただし座標の小数点以下が5桁を超える場合には、無視される場合があります。 オプションに"-P"を付けると、ファイル更新日時を元の値のままに維持します。

日時の指定方法について


仕様上では、Quicktimeの日時情報はUTCで記録することになっています。 しかし、ほとんどのデジタルカメラはタイムゾーンを認識できないため、日時情報をローカルタイムで記録しています。 このためExifToolも、デフォルトではQuicktimeの日時情報をローカルタイムとして扱います。 もしExifToolでUTCで記録された日時情報を扱いたいときには、"QuickTimeUTC"オプションを付加します。

Insta360アクションカメラで撮った写真の撮影日時情報

Insta360 GO 3 などのInsta360アクションカメラで、撮影フォーマット"insp+Raw"または"PureShot"を指定して写真を撮影すると、カメラにはinsp形式とRaw(DNG)形式の2つのファイルが格納されます。 そしてどちらのファイルも、パソコンのInsta360 STUDIOアプリでエクスポートすると、JPEG形式のファイルに変換されます。 しかしRaw(DNG)形式の写真をエクスポートして生成されたJPEGファイルには、正しく撮影日時がセットされません。
通常、写真の撮影日時は、Exif情報の "DateTimeOriginal ", "CreateDate", "ModifyDate" の3か所に書き込まれていなければなりません。 しかし、Insta360アクションカメラのRaw(DNG)形式をエクスポートした写真は"ModifyDate"のみに撮影日時が格納されています(下表参照)。
このため、 Geotag Photos Pro などのツールを使って写真に位置情報を付加するには、事前に 正しい撮影日時をセット しておく必要があります。
Insta360 GO 3 Shooting mode vs Exif shooting date and time Info.
Shooting modeFormatDateTimeOriginalCreateDateModifyDate
写真inspYesYesYes
insp+Raw (insp)YesYesYes
insp+Raw (DNG)NonNonYes
PureShot (insp)YesYesYes
PureShot (DNG)NonNonYes
HDR写真inspYesYesYes
PureShot (insp)YesYesYes
PureShot (DNG)NonNonYes
インターバルinspYesYesYes
insp+Raw (insp)YesYesYes
insp+Raw (DNG)NonNonYes
スターラプスinspYesYesYes
insp+Raw (insp)YesYesYes
insp+Raw (DNG)NonNonYes

Insta360アクションカメラで撮った写真に正しい撮影日時をセットする

Insta360アクションカメラで撮ったRaw(DNG)形式の写真に、正しく撮影日時をセットするには、図のように
exiftool "-AllDates<ModifyDate" ファイル名
のように指定します。バックアップファイルが不要の時は
exiftool -overwrite_original "-AllDates<ModifyDate" ファイル名
のように、オプション"-overwrite_original"を指定します。 また「ファイル名」の代わりに「*.jpg」や「フォルダ名」を指定すれば、複数の写真の撮影日時を一気に変更できます。
ただしInsta360アクションカメラで撮った写真には、タグ"MakerNotes"が書き込まれていないので、図のようなWarningが表示されます。