- PVSM.RU - https://www.pvsm.ru -
Я далеко не профессиональный фотограф, но снимать люблю, и периодически мой архив из нескольких десятков тысяч фотографий самого разного качества пополняется фотками с зеркалки, «мыльницы» и трех телефонов, а также видеозаписями с телефонов и видеокамеры. Какой я только софт не перепробовал для поддержания архива фото и видео в порядке! Adobe Lightroom, Apple iPhoto, Google Picasa…
В итоге ни один из них не решал задачу хорошо, и пришлось писать свой. Я подумал, что мой опыт может кому-то пригодиться, из чего и родилась эта статья.
Если вы не только фотограф, но и немножко программист, то создать подобную систему у себя вы сможете за полчаса.
Итак, какую же задачу мне нужно было решить? Насколько необычны мои ожидания от каталоголизатора?
Самые обычные требования. Наверное, в мире существует готовое ПО, позволяющее все это делать, но мне его найти не удалось. Поэтому пришлось писать самому.
Итак, в чем состоит мой подход?
Сюда копируется все новое с фотоаппаратов и телефонов. В этой куче мы можем найти JPG-фото, RAW-фото, AVI-видео, MOV-видео в самых разных разрешениях. При обработке фото и видео переносятся из этой папки в другие (см. ниже), а старые, уже импортированные фотки, удаляются из этой папки. В итоге там может остаться какой-то мусор, который обрабатывается вручную.
Папка для хранения оригиналов фото в формате JPG. Для структурирования фоток и видео по годам-месяцам-дням в этой и последующих папках используется иерархия год-месяц-день. То есть, фото за 12 сентября 2004 года будут храниться в ветке ORIG/2004/09/12/. У меня имена файлов совпадают с оригинальными из IMPORT, но корректно сделать, чтобы имена файлов были уникальными, например, в форме timestamp YYYYMMDDHHMMII.JPG, чтобы не было задвоений при импорте с разных устройств.
Если встречается RAW-фото, то проверяется, есть ли для него родной JPG-вариант, и если вдруг его нет, он создается автоматически в ORIG/YYYY/MM/DD/, а само RAW-фото переносится в RAW/YYYY/MM/DD/. При этом в имени JPG-версии в ORIG вносится указание, что для данного файла есть RAW-вариант: IMG_5905_RAW.JPG. Обычно RAW-файлы большие, поэтому эту папку имеет смысл держать на внешнем диске.
Сюда переносятся оригиналы видеофайлов. Обычно они довольно большие, поэтому эту папку имеет смысл держать на внешнем диске.
Превьюшки создаются автоматически при импорте и кладутся в свою папку PREVIEW, сохраняя иерархию, выходит что-то типа PREVIEW/2004/09/12/. Именно они скидываются на мобильные устройства для мобильного каталога фото и загружаются на фотохостинги
Архив превьюшек я сбрасываю на мобильные устройства и периодически обновляю — обычным копированием последних по дате папок. Папку с RAW и VIDEO удобно держать на внешнем диске, так как они имеют свойство заполнять собой любой свободный объем диска, а папку с превьюхами держать на ноуте — если вдруг они потеряются из-за какого-нибудь сбоя жесткого диска или потери ноута, их всегда можно будет сделать еще раз, зато при случае можно быстро найти нужное фото или показать их друзьям.
Особенно это ценно по отношению к FullHD-видео с видеокамеры. Для домашнего архива достаточно хранить видео экранного качества, а на случай монтажа хорошо было бы взять оригинальный MOV в Full HD — для этого подключаю внешний жесткий диск. Более того, лично у меня абсолютно все ноуты тормозят с проигрыванием Full HD MOV с камеры Canon (по крайней мере, первые несколько секунд, пока подгружается), что делает активное использование для бытовых целей оригиналов видео затруднительным. Поэтому очень удобно, когда превьюхи видео — локально, а FullHD-версии — на внешнем диске.
У меня для группировки по событиям используются символические ссылки на папки по дням. То есть, поездка на Мадейру хранится в виде папки EVENTS/Мадейра/ в которой лежат папки 2012/05/01, 2012/05/02,…, 2012/05/09. Но есть несколько затруднений, которое этот подход не решает.
Первое связано с тем, что иногда хочется связать с поездкой на Мадейру не 3500 фотографий, а пару сотен, но отобранных. Второе заключается в том, что не всегда тема четко бьется по дням. Зачастую в течение дня может быть несколько тем, а некоторые темы могут затрагивать вторую половину одного дня и первую половину следующего, в то время как остальное время этих двух дней будет относиться уже к другому событию.
Поэтому кроме описанного выше способа есть еще два: 1) делать символические ссылки на файлы, или 2) эти файлы физическим образом копировать в папку с событием. Массового создания символических ссылок в операционной системе нет. Тем не менее, реализовать такой способ все равно реально и несложно. Физическое копирование имеет свои недостатки — одинаковые файлы начинают храниться в двух местах. Возможно, это тоже плюс — можно убить похожие фото, оставить только лучшие и т.д. Можно сделать скрипт, проходящий по файлам в обоих папках и при полной идентичности заменяющий файл на его символическую ссылку.
Весь архив у меня хранится на жестком диске, который может быть подключен к трем компам — MacBook, компу с «виндами» и к компу с Ubuntu. Соответственно, софт должен быть в идеале совместим со всеми тремя операционками.
Это была концепция, все, что ниже — моя (отнюдь не идеальная) реализация.
Этот блок уже для тех фотографов, которым не чуждо программирование и автоматизация. Задача довольно простая и при наличии минимальных знаний о bash-скриптинге можно разобраться.
Весь софт у меня — это два скрипта. Один обрабатывает все из папки IMPORT и раскладывает по ORIG/YYYY/MM/DD/, VIDEO/YYYY/MM/DD/, RAW/YYYY/MM/DD/ попутно создавая папки при необходимости. Второй скрипт сканирует ORIG, VIDEO, RAW и создает PREVIEW для фото и видео и кладет его в папку PREVIEW/YYYY/MM/DD.
Для работы первого скрипта нужна утилита под названием exiftool. Она позволяет вытащить из EXIF-информации файла дату и время съемки. Ее можно найти для всех трех операционных систем. Под ubuntu она ставится из пакетов apt-get install libimage-exiftool-perl. Под Windows и MacOS скачать можно тут: http://www.sno.phy.queensu.ca/~phil/exiftool/ [1]
В качестве инструментария разработки логики я выбрал bash scripting и perl. Во-первых, потому что он едины для MacOS и Ubuntu, а также при наличии Cygwin portable, все это заработает без существенных правок под Windows. С вашего разрешения сконцентрируюсь на MacOS и немножко на Ubuntu, и на обработке изображений, чтобы совсем не распыляться.
Ниже я привожу сильно упрощенные скрипты, выполняющие поставленные задачи.
Для начала разберем скрипт, добавляющий указанный файл .JPG в библиотеку:
#./add_file_to_media_library.sh <filename>
Как видно из синтаксиса вызова, он работает с одним файлом, указанным в параметре. Небольшое ограничение для удобства — путь должен быть относительным. То есть, либо «IMG_5949.JPG» (в текущей директории), либо MYPHOTOS/IMG_5949.JPG" (в папке MYPHOTOS, которая положена в текущую директорию).
- export PREFIX="/Volumes/Elements/" # это путь к архиву фото. В этой папке находится ORIG
- export FILENAME="`pwd`/$1«
# добавляем к имени файла полный путь.
В итоге, весь софт у нас требует только exiftool, bash и perl и занимает несколько строк на bash. Осталось теперь создать скрипт, который будет вызывать вышеприведенный фрагмент, передавая ему параметр «имя файла». Тут есть масса способов, как это сделать, я использую
# find . -name «*.JPG» | perl -i -npe "s/^(.*?)[nr]+$/./add_file_to_media_library.sh "1"n/g"
./add_file_to_media_library.sh «./фото/IMG_5790.JPG»
./add_file_to_media_library.sh «./фото/IMG_5802.JPG»
./add_file_to_media_library.sh «./фото/IMG_5794.JPG»
Соответственно, создаем add2media.sh:
#!/bin/bash
find . -name «*.JPG» | perl -i -npe "s/^(.*?)[nr]+$/./add_file_to_media_library.sh "1"n/g" > /tmp/run.sh
bash /tmp/run.sh
rm /tmp/run.sh
(BTW не очень изящное решение с созданием run.sh. можно было использовать и xargs, и -exec в find, у всего есть свои минусы и плюсы)
Для работы второго скрипта (создание превьюшек) нужна утилита, умеющая конвертировать видеофайлы и изображения. Для фото это утилита convert из пакета imagemagick (http://imagemagick.com [2]), для видео — комплекты ffmpeg или handbrake.
Поскольку создание превьюшек связано с конвертацией форматов, дело это небыстрое, зато не требует участия пользователя. Можно оставить на ночь, в произвольный момент прервать и при следующем запуске работа восстановится с прежней точки.
- #!/bin/bash
- #добавляем к файлу, переданному в параметре, путь к текущей директории
- export FILENAME="`pwd`/$1″
#папка, где создан каталог PREVIEW. В моем случае — это внешний диск, можно использовать локальный export PREFIX="/Volumes/Elements/" #поскольку все файлы в ORIG уже разложены по полочкам, будем верить дате из иерархии и лишний раз не обращаться к exiftool export FOLDER=`echo $1 | perl -i -npe "s/^(.*?)/(dddd)/(dd)/(dd)/(.*?)$/PREVIEW/2/3/4//g«`; mkdir -p «$PREFIX$FOLDER» #вытаскиваем имя файла из пути export NEWFILENAME=`echo $FILENAME | perl -i -npe "s/^(.*?)/([^/]+?).JPG$/2.JPG/g«;` echo ${PREFIX}${FOLDER}${NEWFILENAME} #создавалась ли превьюшка раньше? if [ -f «${PREFIX}${FOLDER}${NEWFILENAME}» ] then #да, создавалась. Делать ничего не надо echo «...skipped (exist) ${PREFIX}${FOLDER}${NEWFILENAME}»; else #нет, не создавалась. Надо сконвертировать echo «...convert»; convert «$infile» -auto-orient -resize 1024 -quality 85 «${PREFIX}${FOLDER}${NEWFILENAME}» fi
Данный скрипт также предполагает передачу в качестве параметра имени файла. Для того, чтобы пройтись по всем файлам в ORIG, используется точно такой же, как в примере для раскладывания по полочкам сканер файловой системы, только вместо вызова ./add_file_to_media_library.sh там будет ./create_preview.sh
Отправка фотографий в Facebook и Google Picasa. У меня на этот счет также были наработки, автоматизирующие выкладку из PREVIEW. Для Facebook используется утилита FBCMD [3], а для создания альбомов и пакетной заливки изображений на Picasa — утилита Google Command Line Tool [4].
На мой взгляд, различные «фичи» существующих каталоголизаторов, как добавление описания фотографий, теггирование, лица и проч. плохо подходят для ситуаций, когда одно событие генерит тысячу снимков и один только выбор из них важного-нужного превращается в серьезную работу. А вот использование и модификация EXIF-информации выглядит очень интересным направлением. Например, можно указать, что с 1 по 10 мая я был на Мадейре, и все снимки в ORIG в соответствующем поле EXIF приобретают географические координаты. При последующем импорте в онлайн-фотохостинги эта информация может быть считана и фотографии автоматически прикреплены к месту.
Также очень хотелось бы, чтобы весь фото и видеоархив по ночам скидывался куда-то в защищенное облако а-ля бэкап. Это тоже довольно просто автоматизировать в описанном выше подходе, но еще не дошли руки. А какие каталоголизаторы используете вы? есть ли в них что-то нужное, что не учтено в моем подходе?
Алиев Рауф | http://RaufAliev.ru [5] | Facebook [6] | LinkedIn [7] | r.aliev@gmail.com [8]
Автор: raliev
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/39679
Ссылки в тексте:
[1] http://www.sno.phy.queensu.ca/~phil/exiftool/: http://www.sno.phy.queensu.ca/~phil/exiftool/
[2] http://imagemagick.com: http://imagemagick.com
[3] FBCMD: http://fbcmd.dtompkins.com/
[4] Google Command Line Tool: http://google-opensource.blogspot.ru/2010/06/introducing-google-command-line-tool.html
[5] http://RaufAliev.ru: http://raufaliev.ru
[6] Facebook: http://facebook.com/raufaliev
[7] LinkedIn: http://ru.linkedin.com/in/raufaliev/
[8] r.aliev@gmail.com: mailto:r.aliev@gmail.com
[9] Источник: http://habrahabr.ru/post/188094/
Нажмите здесь для печати.