ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Bashでスマホ写真のEXIFから日時と経度、緯度を取得する

(2026-06-05 初稿 - 2026-06-06 追記)

最近、メモや資料の整理にObsidianを利用し始めた。が、まだ始めたばかりでとてもブログに書けるようなことはない。

で、せっかくObsidianを利用し始めたので、サボっていた過去のツーリングや旅行の記録を残しておこうと考えた。

ただ、ツーリングや旅行中の写真がどこで撮ったものか、過去のものだとわからないことが多い(ボケが始まっているのか…^^;)。

そこで、写真の中のEXIFから日時と緯度、経度を取得するスクリプトを作ってみた。

なお、緯度と経度の出力は、Google Mapに貼り付けると、どこで撮ったものかMap上で確認が可能である。

作成したスクリプト

作成したスクリプトには、exifパッケージが必要であるので、Debian等の方は、以下のとおり、事前にインストールが必要である。

$ sudo apt install exif

それでは、作成したスクリプト(get_dt_pos)を以下に示す。

#!/usr/bin/bash
# スマホの写真のEXIFから日時と経度、緯度を取得する
# get_dt_pos  get date time position

# ver0.01 2026-06-05 start 一応完成
# ver0.02 2026-06-05 change LANG=C exif

# need
# exif  sudo apt install exif for Debian 

if [ -z "$1" ]; then
  echo "Usage: $0 *.[JPG|jpg|jpeg]"
  exit 1
fi

filepath="$1"  # 念の為に、引数1をバックアップ

# LANG=C exif -m で言語、機種依存を回避
exifdata=$(LANG=C /usr/bin/exif -m "$1" | sed 's/|//' | sed 's/,//g' | tr -s " ")

# get parameter
daytime=$(echo "$exifdata" | grep -e "Date and Time (Original)" )
latitude=$(echo "$exifdata" | grep -e "^Latitude")
longitude=$(echo "$exifdata" | grep -e "^Longitude")

# output
echo -n "$filepath : "
set $daytime; echo -n ${3//:/-} $4 ' '
set $latitude; echo -n $2'°'$3"'"$4'.0"N' ' '
set $longitude; echo $2'°'$3"'"$4'.0"E'

全く工夫のかけらも無いスクリプトだが、Geminiさんに教えてもらいLANG=Cで-mオプションを付けてexifを実行することにより、たぶん言語や機種依存を回避できるのではないかと思っている(未確認)。

スクリプトの実行

スクリプトの実行例は以下のとおり。

$ get_dt_pos 260103163059698.JPG
260103163059698.jpg : 2026-01-03 16:30:59 34°52'58.0"N  138°19'57.0"E

出力の「34°52'58.0"N  138°19'57.0"E」の部分をGoogle Mapに貼り付けるとMap上で撮影場所を確認できる。

なお、上記スクリプトは一つの画像ファイルにしか対応していないが、その他、画像の圧縮や写真ファイルの日付変更等を同時に行うスクリプトも、近日中にアップする予定だ。

どなたかのお役に立てば幸いである。

(2026-06-06 追記)

このスクリプトを利用して、写真サイズの圧縮及び圧縮後のファイルの日時を撮影時のものに変更するBashスクリプトを以下の記事で書いたので、参考までに

(追記終了)

関連ページ