В одной из тем увидел у виндузятников интересную программулину, собирающую из EXIF информацию по фокусным с графиком. Да и сам призадумался посмотреть, какие же у меня фокусные самые ходовые. Первая мысль была использовать exiftool — запросто можно выбрать информацию по любым EXIF-тегам, но считать-группировать нужно чем-то ещё... Вот бы, думаю, как в SQL — «group by» и все дела. SQL... Это следующая идея - SQL. Ведь все фотки я скармиливаю в digiKam (и Вам весьма его рекомендую!), а он свою базу держит в обычном sqlite. А вот какую именно информацию о фотках он там хранит и предстояло выяснить. Ну и выяснил — среди всего прочего хранит и фокусное расстояние! Итак, рецепт успеха! Ингридиенты: БД digiKam, клиент sqlite3 и пара SQL-запросов. Начнём, пожалуй… Запускаем клиента sqlite3 с указанием пути до БД digiKam (путь можно подсмотреть в самом digiKam в меню «Настройка» → «Настроить digiKam», раздел «Базы данных»): Код: sqlite3 /путь/к/файлу/digikam4.db Смотрим список альбомов: Код: select id,relativePath from Albums order by id; Я никак дополнительно не именую альбомы, да и лежат они все в одном подкаталоге, поэтому подобного запроса достаточно. В выводе запроса нас интересует id (первая колонка), соответствующий конкретному альбому. Запомним. Дальше смотрим готовую сводку по фокусным для альбома: Код: select count(m.imageid),m.focalLength from ImageMetadata m, Images i where i.id=m.imageid and i.album=216 group by m.focalLength order by m.focalLength; Запомненный id альбома подставляем в i.album (вместо моего 216). Вот пример для свадьбы, где я был с kit'ом и фиксом 85/2,8: Код: 72|18.0 6|20.0 19|22.0 19|24.0 13|26.0 9|28.0 19|30.0 37|35.0 13|40.0 5|45.0 22|50.0 21|55.0 4|85.0 (Аж сам удивился, что всё-таки успел что-то на 85/2,8 снять при том, что прогулку я прогулял...)
А что за программа под винду не подскажете? Было бы интересно у себя такой анализ по свадебным фотосессиям провести))
Wizard, мысли по этому поводу такие. 1. Хорошо бы это всё в шелл-скрипт оформить и передавать при его вызове туда двумя параметрами ID альбома и путь к базе sqlite3. Можно даже объединить этот скрипт с другим скриптом, тогда с флагом -showid можно будет просматривать ID альбомов, выбирать нужный и использовать его как параметр в скрипте. 2. Рецепт на сам деле универсальный для Винды и Яблока. Lightroom держит свою базу фотоснимков в том же самом открытом формате sqlite3, только название записей, вероятно, где-то будет отличаться. Кроме того, не знаю как в последних версиях, но начиная с Mac OS X 10.5, sqlite3 встроенный в системе уже есть, нужен только клиент для базы. Непосредственно инфу из камерных jpeg и raw на Маке метаданные можно получить с помощью штатной консольной утилиты mdls (см. man mdls). Дальше заскриптовать это с sed или perl-скриптом, тут возможны варианты.
Зря. Весьма рекомендую. Умеет RAW, имеет простенький редактор (кадрировать, повернуть, поправить цвет) и заявлено распознавание лиц, но я это распознавание так и не победил. Ещё, например, однажды пригодился выбор фото/альбомов по календарю. Т.е., насколько я понимаю, некий аналог Lightroom (последний не видел).
Я думал об этом, но просто и красиво не получится. Всё равно ведь делать два подхода - определять ID и собирать статистику. С учётом того, что альбомов несколько сотен и это не предел, простыня будет недетская. И всё равно нужно делать второй запрос с указание выбранного ID. Тут либо делать отдельный гуй с птичками для альбомов, или, что идеологически более верно, плагин для digiKam. Для обоих вариантов нужно обладать программерскими навыками поболее, чем shell. Т.е. это так — раз посмотреть. Впрочем, можно и shell-скрипт сочинить, но по-моему, удобства он не сильно добавит. Винда и мак не интересны, извините.
Это да. (( А по-любому, вопрос с используемыми ФР волнует в состоянии неопределённости, а оно рано или поздно проходит.
Таки навелосипедил скриптец. Не вполне универсальный (захардкожен путь к конфигу digiKam и имя клиента sqlite3), но кому надо, думаю, сумеет поправить. Код: #!/bin/sh DK_CONF="${HOME}/.kde4/share/config/digikamrc" eval `awk '/Database Name=/ {printf "DB%s/digikam4.db", $2}' ${DK_CONF}` if [ $# -eq 1 ] then QUERY="select count(m.imageid), m.focalLength from ImageMetadata m, Images i where i.id=m.imageid and i.album=${1} group by m.focalLength order by m.focalLength" else QUERY="select id, relativePath from Albums order by id" fi sqlite3 ${DBName} "${QUERY}" Скрипт сам находит путь к БД digiKam (с оговоркой выше). При вызове без параметров выкатывает список альбомов. При вызове с параметром он, параметр, считается идентификатором альбома и, соответсвенно, для указанного альбома выкатывается статистика.