Использование EXIFTool для добавления EXIF-данных из имен файлов

Использование EXIFTool для добавления EXIF-данных из имен файлов

Существует набор фотографий с временными метками в названиях файлов, например:

Photo on 3-09-12 at 9.24 PM #2.jpg

Photo on 3-09-12 at 9.24 PM #1.jpg

Photo on 3-09-12 at 8.23 PM.jpg

и т. д.

(«3-09-12» означает «3 сентября 2012 г.» или ДД-ММ-ГГ)

Но у этих фотографий вообще нет данных EXIF. Перед тем, как импортировать их в большую коллекцию, как бы вы передали эту информацию exiftoolи также сказали бы ей добавить новые временные метки в виде данных EXIF, все из имен файлов фотографий?

Обновлять: (Теперь часть 1) мой вопрос о разборе имен файлов с ДД-ММ-ГГ и 12-часовым временем был очень любезно дан ответом @Stephane. Но я обнаружил, что та же партия фотографий содержит имена файлов с одной вариацией, которую я пропустил. Надеюсь, будет разумнее добавить 'часть 2' вместо того, чтобы начинать совершенно новый вопрос.

Суммируя:

Как я могу изменить блестящий ответ @Stephane --

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*?at.*?[AP]M)/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*[PA]M*.jpg

-- чтобы он мог работать с форматом имени файла ниже, который немного отличается от первой части вопроса тем, что использует ГГГГ-ММ-ДД и 24-часовое время:

Photo on 2010-09-15 at 18.44 #4.jpg

Photo on 2010-09-15 at 18.44 #3.jpg

Photo on 2010-09-15 at 18.44.jpg

Дополнительные пояснения:

Попытка отредактировать Date::Manipчасть сценария Стефана, похоже, демонстрирует мое невежество в отношении того, что происходит в самых важных его частях.

Я попытался опустить Date_Initстроку, поскольку мы вернулись к формату даты в стиле ISO, содержащему полный год, а затем

/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg

Но exiftoolдает мне no writeable tagsи FileName not defined. Инструкции наhttp://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.podне кажутся полезными (по крайней мере, мне) для понимания того, что происходит с этими точками, этой «y» в начале строки, точкой с запятой и т. д., и их довольно трудно найти в Google :S

решение1

Пытаться:

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*.jpg

(возможно, вам придется установить Date::Manip perlмодуль).

Устанавливает -Tag<valueсоответствующий тег. Может ${tag;perl-code}использоваться для расширения до значения tagпосле его обработки perl-code.

Здесь план состоит в том, чтобы использовать Date::Manipфункцию UnixDateдля анализа даты в имени файла и преобразования ее в формат, приемлемый для CreateDateтега ( 2011-04-15 21:38:00).

Date::Manipпонимает много распространенных форматов дат. Например, он понимает 3-09-12 at 9:24 PM(хотя вам нужно указать, является ли это американской или неамериканской конвенцией, где первым идет день или месяц) и 2010-09-15 at 18.44(обратите внимание :на вместо .).

Итак, мы извлекаем эту часть из имени файла, преобразуем в .и :передаем ее в UnixDate.

Связанный контент