Ничего изобретать не будем, возьмём самую обычную файловую систему. Создадим тематические каталоги (например, семья, друзья, город, город/дома, город/машины) и разложим по ним фотографии. Некоторые, при желании, переименуем. Чем не альбом? Именно так выглядел мой фотоальбом с момента покупки цифрового фотоаппарата до момента перехода на GNU/Linux и ещё некоторое время.
Альбом с карточками получился неплохой, но плёнку мы потеряли. Просмотреть все фотографии в том порядке, в котором они были отсняты, уже не получится. Даже если хранить их рядом без каталогизации (тратя в два раза больше места), узнать, что было сфотографировано в тот же день, что и город/дома/дом на Мойке.jpeg будет не просто. Кроме того, часто одни фотографии хочется поместить сразу в несколько каталогов, а другие, наоборот, никуда не пристроить, но и терять жалко.
Что нас спасёт? Конечно, символические ссылки! Итак, идея: создаём каталоги stream и album. В stream копируем файлы с фотоаппарата, сохраняя их оригинальные имена. Чтобы не было коллизий имён и в куче файлов не зависал графический файловый менеджер (вы же не будете просматривать фотографии в консольном?), разложим их по каталогам вида год/фотоаппарат (или иначе, по усмотрению). В album создадим тематические каталоги. Теперь мы можем поместить любую фотографию с плёнок в любой тематический каталог альбома в виде символической ссылки. Просматривая альбом, можно будет любую фотографию найти на плёнке (командой ls -l или readlink) и посмотреть соседние. А просматривая плёнку, можно найти в альбоме все карточки с определённым кадром (командой find -L album -samefile stream/thePhoto).
Идея нравится? Если да -- то переходим к реализации!
Каталоги stream и album у нас уже есть. Создадим ещё каталог new, под новые необработнные фотографии, а в нём -- каталоги с названиями фотоаппаратов.
Придя с очередной фотоохоты, копируем трофеи в new/mycamera. Пересматриваем, удаляем неудачные, фотошопим джимпуем. Есть что склеить? Флаг Hugin вам в руки!
Несмотря на то, что кадры будут сгруппированы по годам, я предпочитаю так же иметь год в их именах (точнее, в именах будущих ссылок), а счётчик в фотоаппарате сбрасываю с наступлением нового года. Для переименования новых кадров есть специальный скрипт:
Код: Выделить всё
#year=2012
year=`date +%Y`
cd new
for camera in *
do
cd $camera
for photo in IMG_*; do
mv $photo IMG_${year}_${photo#IMG_}
done
for video in MVI_*; do
mv $video MVI_${year}_${video#MVI_}
done
cd ..
done
Теперь фотографии пора помещать в архив, но они могут иметь иметь избыточный объём. Сожмём их imagemagick-ом, сохранив оригиналы в каталоге converted:
Код: Выделить всё
#year=2012
year=`date +%Y`
mkdir -p converted
cd new
for camera in *
do
mkdir -p ../stream/$year/$camera
mkdir -p ../converted/$year/$camera
for xpr in {JPG,JPEG,jpg,jpeg,TIF,TIFF,tif,tiff}; do
for photo in $(ls $camera/*.$xpr); do
echo $photo
convert $photo -quality 80 ../stream/$year/${photo%.$xpr}.jpeg
mv $photo ../converted/$year/$camera
done
done
for video in $(ls $camera/*.MOV); do
echo $video
ffmpeg -i $video -s hd720 ../stream/$year/${video%.MOV}.mkv;
mv $video ../converted/$year/$camera
done
done
Для раскладывания кадров по каталогам в альбоме я не нашёл ничего лучше Dolphin-а. Он имеет двухпанельный режим и отображение миниатюр, при Drag-n-drop-е предлагает создать ссылку. Очень полезна и интегрированная Konsole.
Ссылки в альбоме должны быть относительными, чтобы его можно было транспортировать. Специально для этого год назад была написана программа relink. Так же она поможет переместить/скопировать ссылку внутри альбома: достаточно сделать её абсолютной, произвести необходимое действие, сделать вновь относительной.
Финальный штрих, которого долго не хватало: поиск кадров, не помещённых в альбом. Основываясь на идее от drBatty, удалось реализовать и его:
Код: Выделить всё
echo 'declare -A isInAlbum' > myalbum
find album -type l -exec readlink {} \; | sed -r 's|(../)*|isInAlbum["|' | sed 's|$|"]="yes"|' >> myalbum
mkdir -p toalbum
pwd=`pwd`
find stream -name "*.*" -exec echo "if [ \"\${isInAlbum['{}']}\" != \"yes\" ]; then ln -s $pwd/{} toalbum; fi" \; >> myalbum
bash myalbum
rm myalbum
Все скрипты (я их назвал renameByYear.sh, convert.sh, searchNotAlbumed.sh) рассчитаны на размещение в одном каталоге со stream и album и на запуск из этого каталога. Предполагается отсутствие пробелов в исходных именах фотографий и именах фотоаппаратов. Технология обкатывалась на Canon-G5 и (преиущественно) Canon-600D, у вас могут быть другие особенности именования снимков.
Скрипты распространяются свободно, но без гарантий. При их использовании (и, особенно, доработке) рекомендуется иметь полный бекап фотоархива, а с камеры всё удалять в последнюю очередь.
Желаю удачи в съёмке и организации альбомов!
Кстати, когда будете копировать фотографии из альбома друзьям -- используйте cp -L, чтобы друзьям достались фотографии, а не битые ссылки.