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


29

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


1
最も役立つと思われる答えを受け入れることを検討してください。これにより、この質問を検索する他の人には、「回答済み」とマークされた質問が表示されます。それはまた、あなたを助けて時間を費やした人に報いる方法でもあります。
ドミトリーグリゴリエフ

回答:


27

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

exiv2 -T rename image.jpg

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

作成時間を使用するように要求しましたが、これはUnixライクなシステムでは使用されていません-それには正当な理由があります:https : //unix.stackexchange.com/questions/27297/why-doesnt-nix-keep-track -ファイル作成時間

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逆を行う オプションを参照してください。


「反対」とは、ファイルのタイムスタンプからEXIFタイムスタンプを設定することを意味しますが、これはそうではありません-t。実際、実際に何を行うかのスーパーセットを行うよう-Tです。
マイケル

7

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

このスクリプトが何をしているのか説明できますか?特に、exiftool
ユーザー5359531

5

「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

4

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

$ jhead -ft file.jpg

Jhead 3.0の場合、オプションは-dsftです。-ft逆を行います。
テスキンクライド16年

jheadが唯一のようですはEXIFヘッダーをいじらない EXIFツールのようです-exiftoolとexiv2は実際にファイルのサイズを増やし、ヘッダーを移動しますが、これはまったく受け入れられません。
マイケル

3

ExifToolは、日付/時刻のオリジナルまたはCreate Data 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ファイルが検索され、タイムスタンプが更新されます。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.