Pull to refresh

Командная строка на службе фотографа-линуксоида

Configuring Linux *
Sandbox
Здравствуйте, хабралюди!

Я отношу себя к ленивым фотографам. То есть я не люблю скрупулёзно обрабатывать отснятый материал, но при этом периодически испытываю желание выложить пачечку-другую фотографий в Интернет, желательно быстро.

Для Линукса, которым я пользуюсь практически 100% времени, есть много различных графических инструментов для работы с фото. Но иногда бывает, что нужной функции в используемой программе — нету.
Или она есть, но ты не смог её найти. Что же делать? Конечно же, использовать bash.

Рассмотрим две типовые ситуации.

1) Съёмка велась на несколько фотоаппаратов одновременно, при этом каждый из них сохраняет файлы под различными именами. Например, один создаёт файлы с именами вида DSCFxxxx.jpg, другой — Pxxxxxxxx.jpg.
Для удобства сортировки хотелось бы иметь такие имена, которые с одной стороны — будут более менее унифицированы, с другой — содержать в себе дату и время снимка, чтобы можно было выстроить снимки по порядку в тех окружениях, где не поддерживается сортировка по дате и времени. Для этого нам пригодится программа exiv2.

В этом случае я делаю так. Захожу в каждую из подлежащих обработке директорию с фотографиями и устанавливаю для снимков единый часовой пояс. Предварительно надо посмотреть: какой из многочисленных фотоаппаратов эту директорию создал, и какой был на нём установлен часовой пояс. Например, если фотоаппарат снимал по московскому времени, а нужно установить GMT, отстающее от него летом на 3 часа, то даём такую команду:

exiv2 -a -3 *.JPG

Проверить правильность установки времени можно, выведя на экран новые данные из EXIF:

exiv2 *.JPG | grep 'Отметка времени'

Если всё в порядке — можно переименовать все файлы в директории вот такой командой:

exiv2 -t -r'%Y%m%d-%H%M%S-:basename:' *.JPG

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

Затем переходим в следующую директорию, а после обработки всех запланированных директорий — сливаем результат в одну общую. Получается очень наглядно: ниже приведена выдержка из списка снимков, сделанных в первой половине дня 6 января 2011 года двумя разными фотоаппаратами:

20110106-094958-DSCF2173.JPG
20110106-101332-P1250178.JPG
20110106-101410-P1250180.JPG
20110106-122204-DSCF2188.JPG
20110106-122216-DSCF2190.JPG


2) Допустим, вы залили ваши фотографии на Пикасу. И теперь хотите опубликовать их, например, в своём блоге. Быстро сгенерировать необходимый HTML-код вам поможет сайт picasa2html.com
Но вот незадача — он не вставляет шаблоны для подписей к фотографиям!
Правильный подход — написать собственный аналогичный сервис.
Но это долго, да и времени хронически не хватает. Мы же воспользуемся быстрым подходом.

Берём текст, сгенерированный сайтом, и записываем его в файл с именем photos1.txt.
После чего даём команду

sed '/<p.*p>/d' photos1.txt | sed 's/<\/a>/<\/a>\n00. xxx\n\n/gpw photos2.txt'

Что она делает? Первый вызов sed вырезает логотип picasa2html, оформленный в виде отдельного абзаца.
Второй вызов sed берёт с конвейера результат работы первого (чистые ссылки на фото), и вставляет после каждой фотографии шаблон для её подписи (если вы подписи ставите сверху — скрипт легко переделать).

Таким образом исходные блоки кода вида

<a href="https://picasaweb.google.com/111237353143627593504/201103#5651154095475647410"><img src="1450822379562064245147" border="0"></a><br>
<a href="https://picasaweb.google.com/111237353143627593504/201103#5651154138485468866"><img src="1450822379849647876873" border="0"></a><br>
<a href="https://picasaweb.google.com/111237353143627593504/201103#5651154208871818754"><img src="http://lh6.ggpht.com/-DxT6hGi6-QQ/Tmzuz9bCJgI/AAAAAAAACD0/uqoRVuuFqCs/s720/DSCF7467.JPG" border="0"></a><br>


превращаются в блоки вида

<a href="https://picasaweb.google.com/111237353143627593504/201103#5651154095475647410"><img src="1450822379562064245147" border="0"></a><br>
00. xxx
<br>
<br>
<a href="https://picasaweb.google.com/111237353143627593504/201103#5651154095475647410"><img src="1450822379562064245147" border="0"></a><br>
00. xxx
<br>
<br>
<a href="https://picasaweb.google.com/111237353143627593504/201103#5651154138485468866"><img src="1450822379849647876873" border="0"></a><br>
00. xxx
<br>
<br>


Берём результат из файла photos2.txt, вставляем в блог, и уже по месту редактируем подписи, заменяя нолики на осмысленные номера, а «xxx» — на осмысленные подписи.
Почему я не сделал автонумерацию? Да потому что на мой взгляд переставлять фотографии удобнее всего уже в посте, и поэтому нумерация станет окончательной только непосредственно перед публикацией.

Мой пост — далеко не исчерпывающий, и он приглашает к диалогу.
Было бы интересно послушать единомышленников. Часто ли вы пишете скрипты для обработки фото вместо того, чтобы пользоваться графическими инструментами? Быть может, есть, чем поделиться?
Tags:
Hubs:
Total votes 99: ↑90 and ↓9 +81
Views 4.2K
Comments Comments 54