?

Log in

No account? Create an account

Previous Entry Share Next Entry
Как упорядочить фотки из разных источников
btromanova
Если вы едете куда-то с друзьями, и у вас есть несколько фотоаппаратов, готовьтесь к хаосу. Люди как правило не договариваются "ты снимаешь сегодня до 12, а я после", в интересных местах все просто достают фотики и начинают снимать. Потом у меня лично появляется куча папочек типа "от Маши", "от Вани", отобрать хорошие фотки из которых абсолютно нереально.

Я сегодня пересматривала фотки из Индонезии, что-то Леша фоткал на айфон, что-то я на фотоаппарат. Замучившись выбирать "где же коровки вышли лучше", я наклепала скриптик на баше, работает долго (imagemagick долго вытаскивает нужные данные из больших фотографий), но проблему решает.

Суть в том, что камеры сохраняют у фотографии дату съемки в EXIF-заголовках, поэтому если переименовать все фотки во время их съемки с точностью до секунды, можно будет слить все вместе и хронологический порядок сохранится.

Переименовать можно так (для этого нужно иметь поставленный imagemagick):


for photo in *.JPG; do
  date=$(identify -format "%[EXIF:DateTime]" $photo) #получается формат yyyy:mm:dd hh:MM:ss
  mv $i ${date/ /:}.jpg # меняем двоеточие на пробел
done


Оказалось, что не все так просто. Время на фотоаппарате было выставлено неправильно, пришлось для фоток с фотоаппарата делать сдвиг. Сдвиг получить легко — находим две одинаковые фотки с айфона и фотоаппарата и вычисляем разницу в секундах (offset), а потом для фотоаппаратных снимков делаем вот так:

for photo in *.JPG; do
  tmp=$(identify -format "%[EXIF:DateTime]" $photo)
  date=${tmp%\ *}; time=${tmp#*\ }
  secs=$(date -d "${date//:/-} $time" +%s) #date -d понимает формат yyyy-mm-dd hh:MM:ss
  newsecs=$((secs + offset))
  mv $photo $(date -d "1970-01-01 $newsecs sec GMT" +"%Y:%m:%d:%H:%M:%S").jpg
done


Скоро довыложу фотки на пикасу и напишу, наконец, про Индонезию пост. Там очень-очень круто.