EXIFデータに基づいて写真の名前を変更するには?

EXIFデータに基づいて写真の名前を変更するには?

正しいEXIF情報を含む複数の写真があり、写真名がランダムに指定されているとします(問題が発生したため)。jhead次の出力を提供する小さなプログラムがあります。

$ jhead IMG_9563.JPG

File name    : IMG_9563.JPG
File size    : 638908 bytes
File date    : 2011:02:03 20:25:09
Camera make  : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time    : 2011:02:03 20:20:24
Resolution   : 1500 x 2000
Flash used   : Yes (manual)
Focal length :  5.0mm  (35mm equivalent: 29mm)
CCD width    : 6.17mm
Exposure time: 0.0080 s  (1/125)
Aperture     : f/3.1
Focus dist.  : 0.29m
ISO equiv.   : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual

フォルダ内のすべての写真の名前を次の形式に変更する必要があります。

001.JPG
002.JPG
003.JPG
...

マイナー番号は前の画像、最大番号は最新の画像です。

私は書くことができず、助けを求めた。

私はbashスクリプトで十分だろうと思いますが、より快適な場合はPythonスクリプトを書くこともできます。

私の考えには次のようになります。

$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`

しかし、同時にすべてのファイルに対してこれを行う方法がわかりません。

答え1

見つけたばかりここjheadはあなたのためにすべてを行うことができます! :)

jhead -autorot -nf%Y-%m-%d_%H-%M-%S *.jpg

答え2

forループ(シェル/シェルスクリプトで)を使用してすべてのファイルにアクセスできます。

for i in *.JPG; do
  j=`jhead "$i" | grep date | sed 's/^File date[^:]\+: \(.\+\)$/\1/'`.jpg
  echo mv -i "$i" "$j"
done

これは非常に基本的な概要です。echoすべてが正常であることを確認したら、削除してください。

答え3

exiv2非常に単純な構文を可能にする代替作業方法です。

exiv2は、Exif、IPTC、XMPメタデータ、および画像コメントを読み書きするためのプログラムであり、複数のベンダーのメーカーノートタグを読み取ることができます。このプログラムには、Exif タグ、XMP 属性、IPTC データセット間を変換するオプションがあります。

したがって、現在のフォルダのすべてのjpeg名が変更されます。

for i in *.JPG; do exiv2 -v -r '%Y%m%d.%H%M%S.:basename:' rename "$i"; done

地理情報を追加するには、次のものを使用できますexivtool

exiftool '-filename<${gpslatitude;} ${gpslongitude} ${datetimeoriginal}' -d "%Y-%m-%d %H.%M.%S%%-c.%%e" *.JPG

答え4

maxschlepzigが投稿したコードが気に入っていますが、それでも出力に問題があります。

問題は、生成されたファイル名のスペース(日付文字列と時刻文字列の間)です。 GUIを使用している人にとっては些細なことですが、コマンドラインでファイルを処理する方がはるかに難しくなります。

ここで、「sed」コマンドはデフォルトで、4つの個別の「sed」操作に変更され、以前の完全なパラメーターをサポートしています。私自身に合わせて、以下のファイルも通常の644権限に変更します。

for i in *.JPG ; do
  chmod 644 $i
  j=`jhead "$i" | grep ^Date/Time | sed -e 's/^Date\/Time[ ]\+: //;s/:/-/g;s/ /_/g':/-/g;s/ /_/g'`.jpg
  echo mv -i "$i" "$j"
  # mv -i "$i" "$j"
done

関連情報