Ubah tanggal file yang dibuat dari metadata JPEG EXIF

29

Saat mengunggah ke situs ftp, tanggal pembuatan file asli sepertinya hilang, dan saya mendapatkan tanggal pengunggahan. Namun, data Exif dalam file sudah benar. Apakah ada alat untuk mengubah tanggal yang dibuat dari tanggal Exif secara batch?

Finn Ove
sumber
1
Harap pertimbangkan menerima jawaban yang menurut Anda paling membantu. Dengan cara ini, orang lain yang mencari pertanyaan ini akan melihatnya ditandai sebagai "dijawab". Ini juga merupakan cara untuk menghargai seseorang yang telah menghabiskan waktu membantu Anda.
Dmitry Grigoryev

Jawaban:

27

Alat penanganan EXIF exiv2memiliki opsi bawaan untuk ini:

exiv2 -T rename image.jpg

menyetel waktu modifikasi file terakhir mtime,, ke tanggal yang disimpan dalam metadata EXIF.

Anda meminta untuk menggunakan waktu pembuatan - tetapi itu tidak digunakan dalam sistem seperti Unix - dan ada alasan bagus untuk itu: /unix/27297/why-doesnt-nix-keep-track -of-file-waktu-penciptaan

Saya cukup yakin saat Anda menelepon, buat waktu sebenarnya mtime- tidak ada masalah di sana.


Dari 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.


Lihat opsi -tuntuk melakukan yang sebaliknya.

Volker Siegel
sumber
Saya akan menafsirkan "berlawanan" dengan maksud untuk mengatur cap waktu EXIF ​​dari timestamp file, tapi ini bukan apa yang -tdilakukannya. Bahkan, tampaknya benar-benar melakukan superset dari apa yang -Tdilakukannya.
Michael
7

Jika Anda menginstal exiftool dari CPAN, Anda dapat menjalankan skrip berikut, dengan asumsi bahwa semua file Anda berada di direktori yang disebut "semua"

#!/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
Joel Taylor
sumber
dapatkah Anda menjelaskan apa yang dilakukan skrip ini? Khususnya argumen untukexiftool
user5359531
5

Dengan asumsi, seperti yang disebutkan oleh 'Volker Siegel', bahwa Anda mungkin berarti mtime, saya akan menggunakan fungsi sederhana exiftools builtin ..

seperti:

 $ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg

ini akan mengambil informasi "bidang exif" DateTimeOriginal "dan menggunakannya untuk menyetel info sistem tanggal / waktu yang dimodifikasi dari file" test.jpg ".

Contoh:

$ 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
6ugr3
sumber
4

Itu juga bisa dibuat menggunakan jheadperintah:

$ jhead -ft file.jpg
SkyRaT
sumber
Untuk Jhead 3.0 opsinya adalah -dsft. -ftmelakukan yang sebaliknya.
Tesquin Crydd
jhead tampaknya menjadi satu - satunya alat EXIF ​​yang tidak membuang kotoran dengan header EXIF ​​- exiftool dan exiv2 sebenarnya meningkatkan ukuran file dan memindahkan tajuk, yang sama sekali tidak dapat diterima oleh saya.
Michael
3

ExifTool dapat membaca dan memanipulasi sebagian besar informasi EXIF, termasuk mengekstrak tag Tanggal / Waktu Asli atau Membuat Data EXIF. Anda dapat menggunakan informasi ini untuk mengubah nama file atau mengubah cap waktu mereka. Sebagai contoh:

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

Ini akan menemukan semua file JPG di direktori saat ini dan memperbarui cap waktu.

Jika Anda ingin juga memberi nama file-file tersebut berdasarkan tanggal tersebut (ini cenderung berguna) kemudian tambahkan juga mv -i $PIC $(dirname $PIC)/$DATE.jpgsebelum donebaris.

Krowe
sumber