1

Я использую Picasa для управления своими фотографиями. Я недавно переключился с компьютера с Windows на Mac, поэтому я использовал внешний жесткий диск для переноса своих фотографий со старого компьютера на новый. Сначала все было хорошо, но теперь в Picasa, похоже, есть дата файла, которая отличается от указанной в метаданных фотографии (в некоторых случаях с интервалом в двадцать лет). Кажется, что все мои фотографии переделаны в случайном порядке. Поэтому они больше не сортируются в порядке дат.

Я удалил и заменил папку в качестве просматриваемой папки и обновил все миниатюры, но это не дало мне желаемого поведения. Что я могу сделать, чтобы восстановить правильные даты на моих фотографиях?

1 ответ1

0

Итак, вот пример сценария, который будет массово переименовывать файлы изображений в стандарт, который начинается с даты и времени, когда изображение было снято в соответствии со встроенными данными EXIF. Это также делает некоторые другие вещи. Вам нужно будет настроить его под свои нужды. Я включаю имя камеры в название изображения в случае, если у меня есть столкновение даты / времени и потому, что оно помогает мне узнать, кто сделал фотографию. Он также добавит порядковый номер в конец имени, если есть конфликт имен.

Вам понадобятся два инструмента командной строки: jhead и exiftool хотя вы можете изменить его, чтобы использовать только один, вероятно. Это скрипт BASH, поэтому он должен работать везде, где можно запустить BASH и двух помощников - я часто запускаю его на ноутбуке с Windows, используя Cygwin.

#!/bin/bash

# Rename camera files to a standard

# jhead (jhead -n%Y-%m-%d %H-%M-%S-Camera Name.jpg)
# exiftool, exiv2, exif


case $1 in
    --help|-h|-?)
        echo ' '
        echo 'Rename a folder full of files to match the date/time taken and the camera model:'
        echo '  "IMG_0001.jpg"   ==>   "2007-05-30 13-24-05-Canon PowerShot A720 IS.jpg"'
        echo '  Adds a letter to end of name if the result is not unique'
        echo ' '
        echo 'Please use as:'
        echo '  rename.sh folderName [t]'
        echo 'Where:'
        echo '  folderName is absolute or relative to current folder'
        echo '  t, if present prints the command that would be used'
        echo ' '
        echo 'Requirements:'
        echo '  1) jhead (detects camera type)'
        echo '  2) exiftool (renames non-jpg files)'
        echo ' '
        echo 'Use the following workflow:'
        echo '  1) Copy files and folders from the camera(s) to a temp folder'
        echo '  2) Run this against the temp folder and check the renames'
        echo '  3) Manually rename any left-overs'
        echo '  4) Add IPTC comments, locations, etc.'
        exit
esac

if [ -z "$1" ]; then
    #echo 'You need to specify the folder to work on (end with a trailing /)'
    ## use pwd instead
    FOLDER="`pwd`"
else
    FOLDER=$1
fi

if [ -x /usr/bin/jhead ]; then
    # Check if starts with leading / if not, then prepend pwd for safety
    #   NB: Note the substring processing: ${varname:start:numChars}
    if [ ${FOLDER:0:1} != '/' ]; then
        FOLDER="`pwd`/$FOLDER"
    fi

    # Add trailing / if required
    if [ ${FOLDER:${#FOLDER}-1:1} != '/' ]; then
        FOLDER="$FOLDER/"
    fi

    echo "$FOLDER"
    cd "$FOLDER"

    # Make sure all files are writable
    chmod +w *

    # Turn upper case extensions into lower case <== CANCEL THIS, the case helps id the camera
    #echo "rename 's/\.JPG$/.jpg/' *.JPG"
    #/usr/bin/rename 's/\.JPG$/.jpg/' *.JPG
    # The above seems to have stopped working for some reason, try this instead
    #echo "/usr/bin/rename '.JPG' '.jpg' *.JPG"
    #/usr/bin/rename '.JPG' '.jpg' *.JPG

    ## REPLACE jhead WITH exiftool
    ARTIST1=" '-IPTC:By-line=Julian Knight, http://www.knightnet.org.uk/contact.htm?toname=JulianPhotos' "
    ARTIST2=" '-IPTC:By-line=James Knight, http://www.knightnet.org.uk/contact.htm?toname=JamesPhotos' "
    COPYRIGHT=" '-IPTC:CopyrightNotice<Copyright © ${CreateDate} Julian Knight, all rights reserved' -d '%Y' "
    ##  IPTC meta (Creator, Rights in XMP)
    ## Move to folders: ./mm-mmm

    echo "jhead -model A70 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A70' -ft *.jpg"
    jhead -model A70 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A70' -ft *.jpg

    echo "jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.jpg"
    jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.jpg

    echo "jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.JPG"
    jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.JPG

    echo "jhead -model Hero -exonly -nf'%Y-%m-%d %H-%M-%S-MDA Compact III' -ft *.jpg"
    jhead -model Hero -exonly -nf'%Y-%m-%d %H-%M-%S-MDA Compact III' -ft *.jpg

    echo "jhead -model T8282 -exonly -nf'%Y-%m-%d %H-%M-%S-HTC Touch HD' -ft *.jpg"
    jhead -model T8282 -exonly -nf'%Y-%m-%d %H-%M-%S-HTC Touch HD' -ft *.jpg

    echo "jhead -model DCR-PC120E -exonly -nf'%Y-%m-%d %H-%M-%S-Sony DCR-PC120E' -ft *.jpg"
    jhead -model DCR-PC120E -exonly -nf'%Y-%m-%d %H-%M-%S-Sony DCR-PC120E' -ft *.jpg

    echo "jhead -model D90 -exonly -nf'%Y-%m-%d %H-%M-%S-NIKON D90' -ft *.JPG"
    jhead -model D90 -exonly -nf'%Y-%m-%d %H-%M-%S-NIKON D90' -ft *.JPG

    # James' Samsung S860 Make: Samsung Techwin, Model: <KENOX S860  / Samsung S860>
    echo "jhead -model S860 -exonly -nf'%Y-%m-%d %H-%M-%S-Samsung S860' -ft sdc?????.jpg"
    jhead -model S860 -exonly -nf'%Y-%m-%d %H-%M-%S-Samsung S860' -ft sdc?????.jpg
    #exiftool '-if $make eq "Samsung Techwin"' '-if $model eq "<KENOX S860  / Samsung S860>"' -overwrite_original_in_place sdc?????.jpg

    # Deal with .NEF (Nikon Raw) files (rename to YYYY-MM-DD HH-MM-SS-NIKON D90-DSC_????.NEF)
    exiftool '-FileName<${CreateDate}-NIKON D90-%f.%e' -d '%Y-%m-%d %H-%M-%S' DSC_????.NEF
    # Use %c to add seq num where required

    # Deal with .AVI files (rename to YYYY-MM-DD HH-MM-SS-NIKON D90-DSC_????.AVI)
    exiftool '-FileName<${FileModifyDate}-NIKON D90-%f.%e' -d '%Y-%m-%d %H-%M-%S' DSC_????.AVI

    # Deal with .AVI files (rename to YYYY-MM-DD HH-MM-SS-Samsung S860-sdc?????.avi)
    exiftool '-FileName<${FileModifyDate}-Samsung S860-%f.%e' -d '%Y-%m-%d %H-%M-%S' sdc?????.avi

    echo ' '
    echo 'FINISHED RENAME'
    echo ' '
else
    echo 'You need to install jhead first'
fi

Обратите внимание, что вам нужно будет узнать, какое имя Maker использует ваша камера в данных EXIF, и соответствующим образом изменить команды, если вы хотите включить имя камеры.

Запустите это для каждой папки с изображениями, и вы должны получить имена всех таким образом, чтобы они всегда сортировались по имени в том порядке, в котором они были взяты, независимо от того, что ОС или другие инструменты делают для создания и изменения файла. даты. Обратите внимание, что вы никогда не можете доверять им в любом случае, так как существует множество причин, по которым они могут измениться (например, даты создания могут быть сброшены после некоторых команд копирования / перемещения).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .