web-dev-qa-db-ja.com

JPEG EXIFメタデータからファイル作成日を変更する

FTPサイトにアップロードすると、元のファイルの作成日が失われたようで、代わりにアップロード日を取得します。ただし、ファイル内のExifデータは正しいです。作成日をExif日付から一括変更するツールはありますか?

32
Finn Ove

EXIF処理ツール exiv2 には、このための組み込みオプションがあります。

exiv2 -T rename image.jpg

最後のファイル変更時刻mtimeを、EXIFメタデータに格納されている日付に設定します。

あなたは作成時間の使用を求めました-しかし、それはUnixライクなシステムでは使用されていません-そしてそれには十分な理由があります: https://unix.stackexchange.com/questions/27297/why-doesnt-nix -keep-track-of-file-creation-time

Create timeを呼び出す時間は実際にはmtimeです-問題ありません。


から man exiv2

NAME
        exiv2 - Image metadata manipulation tool

 SYNOPSIS
        exiv2 [options] [action] file ...

 DESCRIPTION
        exiv2 is a program to read and write Exif, IPTC and XMP image metadata and image com‐
        ments. The following image formats are supported:

 [ ... ]

 mv | rename
       Rename files and/or set file timestamps according to the Exif create time‐
       stamp.  Uses  the  value  of  tag  Exif.Photo.DateTimeOriginal  or, if not
       present, Exif.Image.DateTime to determine the timestamp. The filename for‐
       mat can be set with -r fmt, timestamp options are -t and -T.

 [ ... ]

 -T     Only  set  the  file  timestamp according to the Exif create timestamp, do not
        rename the file (overrides -k). This option is only  used  with  the  'rename'
        action.  Note:  On Windows you may have to set the TZ environment variable for
        this option to work correctly.


オプションを参照してください-t逆の処理を行います。

30
Volker Siegel

CPANからexiftoolをインストールする場合、すべてのファイルが「all」というディレクトリにあると想定して、次のスクリプトを実行できます。

#!/bin/sh
for i in all/*; do
    SPEC=`exiftool -t -s -d "%Y-%m-%d %H:%M:%S" -CreateDate "$i"`
    read X DATE <<<${SPEC}
    echo "$i:$DATE"
    touch -d "$DATE" "$i"
done
8
Joel Taylor

'Volker Siegel'で言及されているように、おそらくmtimeを意味すると仮定すると、exiftools組み込み関数を使用するだけです。

お気に入り:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

これは、「exifフィールド「DateTimeOriginal」情報を取得し、それを使用してファイル「test.jpg」のファイルシステム変更日時情報を設定します。

例:

$ ls -la test.jpg
-rw-r-----@ 1 user  18329968  2432451 14 Out 17:57 test.jpg

$ exiftool -DateTimeOriginal test.jpg
Date/Time Original              : 2015:10:09 13:29:58

$ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg
    1 image files updated

$ ls -la test.jpg
-rw-r-----@ 1 user  18329968  2432451  9 Out 13:29 test.jpg
5
6ugr3

ExifToolは、日付/時刻のオリジナルまたはデータの作成EXIFタグの抽出を含む、ほとんどのEXIF情報を読み取って操作できます。この情報を使用して、ファイルの名前を変更したり、タイムスタンプを変更したりできます。例えば:

_find -name '*.jpg' | while read PIC; do
    DATE=$(exiftool -p '$DateTimeOriginal' $PIC |
    sed 's/[: ]//g')
    touch -t $(echo $DATE | sed 's/\(..$\)/\.\1/') $PIC
done
_

これにより、現在のディレクトリにあるすべてのJPGファイルが検索され、タイムスタンプが更新されます。

それらのファイルにその日付に基づく名前を付けたい場合(これは便利になる傾向があります)、done行の前にmv -i $PIC $(dirname $PIC)/$DATE.jpgも追加します。

4
krowe

jheadコマンドを使用して作成することもできます:

$ jhead -ft file.jpg
4
SkyRaT