Сообщения RSS
Коментарии RSS

Массовая exifикация

В продолжение поста Работа идет.

Со временем можно все немножко усложнить и приукрасить, поэтому то, что есть промаркирую версией 0.1. Всё раскидал по файлам т.к. лично мне так удобно ;)

————————————————————————————–

$ pwd
/home/flint/bin
$ ls -l
...
-rwxr--r-- 1 flint flint 311 2006-11-11 23:01 exif_copyright
-rwxr--r-- 1 flint flint 268 2006-11-16 19:11 exif_dirname
-rwxr--r-- 1 flint flint 391 2006-11-16 19:15 exif_make
-rwxr-xr-x 1 flint flint 248 2006-11-11 23:44 exif_rotate
...

Пойдем по-порядку.
————————————————————————————–

$ cat exif_copyright
#!/bin/bash
#
# Программа для заполнения EXIF полей для jpeg файла
#

COPYRIGHT="Mysterya.Org"
OWNERNAME="Captain Flint & Mystery"
MAKERNOTE="Updated for Mysterya.Org"

exiftool -overwrite_original -P -Copyright="$COPYRIGHT" -OwnerName="$OWNERNAME" -MakerNote="$MAKERNOTE" $1

————————————————————————————–

$ cat exif_dirname
#!/bin/bash
#
# Программа для заполнения EXIF комментариев для jpeg файла
#

exiftool -overwrite_original -P -Comment="$(basename "$PWD" | translit)" $1
exiv2 -k -M"set Exif.Photo.UserComment $(basename "$PWD" | translit)" $1

————————————————————————————–

$ cat exif_rotate
#!/bin/bash

ROTATE=$(exiftool -AutoRotate -S $1 | awk -F:  '{print $2}')

if [[ $ROTATE != None ]]; then
   exiftool -overwrite_original -P -Orientation="$ROTATE" $1
   exiftran -aip $1 && exiftool -overwrite_original -P -AutoRotate="None" $1
fi

Про вращение фоток скажу только, что есть команды и для автовращения, но не все (или не всегда) корректно очищают тэг AutoRotate после поворота, поэтому фотка может потом “повернуться” опять, при оказии %)

Идем дальше.
————————————————————————————–

$ cat exif_make
#!/bin/bash

shopt -s nullglob

for f in *; do
   if [[ `file -b "$f"` == directory ]]; then
      cd "$f"
      "$0"
      cd ..
   else
      exiv2 -k mv $f
   fi
done

for f in *; do
   if [[ `file -b "$f"` == directory ]]; then
      cd "$f"
      "$0"
      cd ..
   else
      convert -resize 800x800 $f $f
      exif_rotate $f
      exif_copyright $f
      exif_dirname $f
   fi
done

————————————————————————————–

И для перекодировки с кириллицы в латиницу я пользуюсь тем, что знакомо - php:

$ pwd
/home/flint/bin
$ ls -l
...
-rwxr--r-- 1 flint flint 1474 2006-11-10 12:09 translit
...

————————————————————————————–

$ cat translit
#!/usr/bin/php -q
< ?
# [RU] Название скрипта: translit
# [RU] Конвертирует входную строку из текущей русской кодировки в транслит
# [RU] Написано в 2004 году Владимиром Дьяковым (vladimir.dyakov[ @ ]linux.alhimia.ru)
# [RU] Лицензия: GPLv2 или более поздняя
#
# Script name: translit
# Description: converts input text from current Russian encoding into translit
# Written in 2004 by Vladimir Dyakov (vladimir.dyakov[ @ ]linux.alhimia.ru)
# Lisence GPLv2 or later

    list($lang,$charset) = split(".",getenv("LANG"));
    $conv1 = array("а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я",
                   "А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я");
    $conv2 = array("a","b","v","g","d","e","jo","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","h","c","ch","sh","sch","#","y","'","je","ju","ja",
                   "A","B","V","G","D","E","JO","ZH","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","H","C","CH","SH","SCH","#","Y","'","JE","JU","JA");
    $fp = fopen("php://stdin","r");
    $a = "";
    while ( ! feof($fp) ) $a .= fgetc($fp);
    echo str_replace( $conv1, $conv2, $a );
?>

————————————————————————————–

Ну вот и всё.
Обрабатываем напильником до готовности, раскладываем фотки по каталогам (каталоги для удобства именуются кириллицей), из корня запускаем exif_make и ждем окончания процесса.

С удовольствием выслушаю отзывы и советы, особенно по делу ;-)

7 Responses to “Массовая exifикация”

  1. on 19 Дек 2006 at 14:33 Captain Flint

    На всякий случай выложил всё это дело в архиве на форуме (http://forum.mysterya.org/uploads.php), только чтобы слить, региться надо.

  2. on 22 Дек 2006 at 13:19 serhiy

    А как на счет перекодировки с кирилицы в латиницы средствами bash? Не у всех есть php. Я честно говоря bash не сильно знаю. Учу потихоньку. В php все выглядит просто, неужели это нельзя реализовать в bash?

  3. on 22 Дек 2006 at 13:39 Captain Flint

    Вот честно скажу, не придумал способа как это сделать. Если какой-нить добрый человек подскажет, тоже буду весьма признателен. Конечно, думаю, можно и перлом, но я его, к сожалению, не знаю в достаточном объеме. А вот на баше было бы здорово.

  4. on 26 Дек 2006 at 11:11 serhiy

    http://www.linux.org.ru/books/lor-faq/lorFAQ-16.html
    Там есть баш скрипт. Но у меня он выдает ошибку. Может Вы разберетесь.
    Пробовал Ваш способ с php. Не могу понять. У меня есть папка с кучей файлов. Я хочу перегнать их в транслит. Что надо делать?

  5. on 26 Дек 2006 at 12:35 Captain Flint

    Вообще, предлагаю сместиться в форум: http://forum.mysterya.org/viewforum.php?id=11 ?

    У меня тоже этот способ не прошел, поэтому я и искал другой.
    Что за ошибку выдало? И какая у Вас локаль? (Может, лучше на “ты”, удобней как-то?..).
    У меня UTF-8, и поэтому, насколько я помню, и не пошло.

  6. on 26 Дек 2006 at 15:24 serhiy

    Ok, на ты - это хорошо. Локаль у меня тоже UTF-8. Ошибку выдает “syntax error near unexpected token `then’” . Если немного подправить (смесить if … then на новую строку) - переводит, но…
    с серега.mp3 делает yyymyyymyiyb.mp3.

    Зерегистрировался на форум. Вот жду письма. Там все и обсудим.

  7. on 26 Дек 2006 at 15:34 Captain Flint

    Ок. Я там выложил, собственно, адаптированный скрипт с http://www.linux.org.ru/books/lor-faq/lorFAQ-16.html

Trackback URI | Comments RSS

Leave a Reply