btromanova (btromanova) wrote,
btromanova
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


Скоро довыложу фотки на пикасу и напишу, наконец, про Индонезию пост. Там очень-очень круто.
Tags: bash, imagemagick
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments