среда, 18 марта 2009 г.

Выбор случайных файлов фотографий для слайдшоу

В моей коллекции фотографий общее количество перевалило за 6000 шт. Мне лень выбирать лучшие и стирать неудачные. Я копирую фотки на NAS. При таком количестве, посмотреть их большая проблема. Я придумал такой выход: пусть при прослушивании интернет радиостанций HDX 1000 показывает мне слайдшоу со случайными фотографиями. И память освежится и разнообразненько. Здесь я буду коментировать создание такого механизма. Файл слайдшоу, используемый в HDX 1000 (nmt), имеет следующий формат:
Timeout|Reserved|Photo 1|URL_photo_1|
, где
  • Timeout - время показа фотографии
  • Reserved - зарезервировано. В некоторых мануалах этот параметр устанавливает номер transition
  • Photo 1 - название фотографии (нигде не показывается)
  • URL_photo_1 - адрес фотографии в URL формате
Последняя вводная. У меня сетевые диски в HDX 1000 монтируются в каталог /mnt. Фотографии находятся в каталоге /mnt/nas2d0/myPhoto/ Идея:
  • cron генерит каждый день 50 плейлистов по 100 фото в каждой из всего списка фотографий. Эти плейлисты прописаны в html странице с радиостанциями;
  • общий список фотографий обновляется каждую неделю (или месяц).
Просто и со вкусом.
  1. Сделаем символическую ссылку на каталог с фотографиями: > cd /opt/sybhttpd/localhost.drives/HARD_DISK/Photo > ln -s /mnt/nas2d0/myPhoto
  2. Имена фотографий присваиваются обычно фотоаппаратом или еще какой белибердой. В моей коллекции названия некоторых фото имеют неверную кодировку. Исправим это. Создадим скрипт для автоматического переименования фотографий.
    #!/bin/bash
    #
    ######################################################################
    #
    #  Переименование файлов фотографий
    #
    # имя файла будет таким 0xxx.jpg
    
    echo
    
    Count=1
    
    #  Изменение расширения файла с верхнего на нижний рестр
    for file in *.JPG
    do
      mv "$file" "${file%.JPG}.jpg"
    done
    
    for file in *.AVI
    do
      mv "$file" "${file%.AVI}.avi"
    done
    
    # переименовываем jpg файлы
    for file in *.jpg
    do
      if [ $Count -lt 10 ]; then
         Zero="000"
      else
        if [ $Count -lt 100 ]; then
          Zero="00"
        else
          Zero="0"
        fi
      fi
    
      OutS=$Zero$(printf "%d" $Count)
      printf "%s 0d %s\n" "$file" $Count $OutS
      Count=$[$Count+1]
      mv "$file" $OutS".jpg"
      
    done
    
    # делаем тоже самое для avi файлов 
    for file in *.avi
    do
      if [ $Count -lt 10 ]; then
         Zero="000"
      else
        if [ $Count -lt 100 ]; then
          Zero="00"
        else
          Zero="0"
        fi
      fi
    
      OutS=$Zero$(printf "%d" $Count)
      printf "%s 0d %s\n" "$file" $Count $OutS
      Count=$[$Count+1]
      mv "$file" $OutS".avi"
      
    done
    Скрипт нужно разместить в каталог ... и сделать исполняемым. Пользоваться им просто. Нужно перейти в каталог, где имена файлов имеют неверную кодировку и запустить скрипт.
  3. Создадим скрипт mAllPhotoLst.sh, который будет генерить полный список фотографий.
    #!/bin/bash
    #
    ######################################################################
    #
    #  Получение списка фотографий
    # список фотографий будет распологаться в
    # /mnt/nas2d0/myPhoto/photo.lst
    
    cd /mnt/nas2d0/myPhoto
    find -name *jpg > photo.lst
  4. Создадим скрипт mPl100.sh, который будет генерить плейлисты
  5. Вставляем скрипт mPl100.sh в cron.
Вуаля!А не какая не "виола". echo $RANDOM

Комментариев нет:

Отправить комментарий