Похожие вопросы

Выполнить git pre-commit Хук только если файлы в определенном каталоге изменены
Запуск скрипта bash даже после закрытия терминала
Сценарий Bash завершается ошибкой " синтаксическая ошибка в условном выражении"
Bash: отображение каждого размера подкаталога в формате списка с помощью команды 1 строка?
Архивирование файлов размером более 2 ГБ в оболочке bash
скорость bash-скрипт через SSH в фоновом режиме или на переднем плане
Запустить скрипт BASH в Cygwin
Bash: получение сообщений от фонового процесса
Как получить pid запущенного процесса с помощью одной команды, которая анализирует выходные данные ps?
Как создать действительный случайный MAC-адрес с помощью bash shell
Linux Bash: перемещение / копирование файлов / каталогов по метке времени
команда cat выводит весь каталог при использовании в скрипте bash
Bash скрипт для редактирования имени файла и перемещения файла.
Имейте файл с именем ~ (Тильда) в моем домашнем каталоге
Переименование с помощью exiftool: как бороться с отсутствующими тегами?

Переименование с помощью exiftool: как бороться с отсутствующими тегами?

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

С помощью этой команды изображения переименовываются так, как я хочу:

exiftool -m -P '-filename<${DateTimeOriginal}_${Make}_${Model}.%e' myfile.jpg

Я уже знаю, что могу форматировать дату и время с помощью опции-d FMT, но я опускаю ее для ясности.

вот вместо проблемы я столкнулся с DSLR "*.мова" видео:

  1. exiftool падает .расширением mov, даже если его использовать ".мова" вместо ".%e " в имени файла model
  2. у этих файлов нет тега DateTimeOriginal, и я должен использовать тег MediaCreateDate, которого нет у других файлов

кто-нибудь знает, как "заставить" exiftool использовать оригинал .расширением mov?

есть ли способ сообщить exiftool, существует ли тег exif или нет? И использовать другой тег, если первый не существует?

Я пробовал что-то вроде

if [ -n `exiftool -m -p '$DateTime' filename]
then
...

но exiftool отбрасывает мне ошибку, поэтому проверка пустой строки всегда терпит неудачу. Любые чаевые?

5
задан gerlos
источник

2 ответов

благодаря обратной связи от Фила Харви, разработчика exiftool, нашел очень простое решение моей проблемы, которое работает с exiftool 9.30.

Фил говорит здесь (http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5079.msg24483.html#msg24483):

последнее допустимое назначение заменяет остальные.

Так мы можем сделать все с как раз одной командой. Вот последний код:

#!/bin/bash
exiftool -P -d '%Y-%m-%d %H.%M.%S' \
    '-filename<${CreateDate}_${Model;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}_${Model;}.%e' \
    $@

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

одна хорошая вещь этого подхода заключается в том, что мы не используем -m опция, так что мы не испортим, например *.mov файлы, которые не имеют EXIF тегов, как и большинство видео, которые можно скачать из Сети (они просто игнорируются).

6
отвечен gerlos 2013-06-05 01:13:13
источник

насколько я знаю, exiftool не поддерживает запись .формат mov, это может объяснить, почему он не хочет создавать файлы с таким расширением, даже если просто переименование.

поскольку вам нужна логика, чтобы заглянуть в альтернативные теги, если один из них пуст, я предлагаю вам использовать exiftool только для извлечения информации, которую вы хотите; затем переименуйте свои файлы самостоятельно. Вот сценарий bash, чтобы вы начали с идеи, он не будет работать из коробки; это просто посмотреть, как это можно сделать :)

#!/bin/bash
# Scan the files you need
for i in *jpg *mov; do

    # Get the extension of the previous file
    extension=${i##*.}

    # Extract metadata from the file
    model=$( exiftool -f -s3 -"Model" "${i}" )
    make=$( exiftool -f -s3 -"Make" "${i}" )
    datetime=$( exiftool -f -s3 -"DateTimeOriginal" "${i}" )

    # If the datetime value is empty (returned '-' because of the '-f' option)
    # then read another tag
    if [ "${datetime}" = '-' ]; then
        datetime=$( exiftool -f -s3 -"MediaCreateDate" "${i}" )
    fi

    # Construct the new filename from the metadata gathered above
    newfilename="${datetime}-${make}-${model}.${extension}"

    # Check if the destination filename already exists, and if not,
    # create the file
    if [ ! -e "${newfilename}" ]; then
        echo mv "${i}" "${newfilename}"
    else
        echo "${i} would get renamed to ${newfilename} but that file already exists."
    fi
done
1
отвечен Patrice Levesque 2013-06-02 20:10:04
источник

Другие вопросы bash exif rename script video