Скрипты‎ > ‎

Zoneminder. Создание видео из jpeg-файлов


Описание скрипта:

Данный скрипт по cron'у создает папки с номерами камер наблюдения (у меня их 10), внутри них подпапки с сегодняшним числом в которые пишутся avi-файлы.
Примерно вот так:

/video
     |___1        
     |   |___06-Март-2012
     |   |              |_09-00.avi
     |                |_10-00.avi
     |                |_11-00.avi
     |                |_....
     |   |
     |   |___07-Март-2012
     |   |___08-Март-2012
     |   |___09-Март-2012
     | 
     |___2
     |___3
     |___4
     |....

Оригинальный скрипт, создающий видео за весь день для одной камеры, взят отсюда.

  1. #!/bin/bash
  2.  
  3. # Скрипт создания видеозаписей с каждой камеры видеонаблюдения за предыдущий час
  4.  
  5. ZM_EVENTS_DIR="/video/events"
  6. TEMP_DIR="/video/tmp"
  7. VIDEO_OUTPUT_DIR="/video/video"
  8. FFMPEG="/usr/bin/ffmpeg"
  9.  
  10. #IMAGEDIR="$(date -d "-1 hour" +%y/%m/%d/%H)"                       # Каталог с jpeg-файлами за предыдущий час
  11. #MOVIENAME="$(date -d "-1 hour" +%H-00)"                        # Имя avi-файла (предыдущий час)
  12. #MOVIEDIR="$(date +%d-%B-%Y)"                               # Каталог с видеофайлом
  13. #IMAGEDIR="$(date -d yesterday +%y/%m/%d/%H)"                       # Каталог с jpeg-файлами за предыдущий день
  14. #MOVIENAME="$(date -d yesterday +%d-%m-%Y)"                     # Имя avi-файла (предыдущий день)
  15. IMAGEDIR="$(date -d yesterday +%y/%m/%d)"                       # Каталог с jpeg-файлами за предыдущий день
  16. MOVIENAME="$(date -d yesterday +%d-%m-%Y)"                      # Имя avi-файла (предыдущий день)
  17. MOVIEDIR=                                       # Каталог с видеофайлом
  18. MONITORS="`ls -l $ZM_EVENTS_DIR/ | awk '{ print $9 }'| grep -E '^[0-9]' | sort -n`" # Список камер наблюдения (1 2 3 ... n)
  19. FPS_IN="7"                                      # FPS записи с камер наблюдения
  20. FPS_OUT="7"                                     # FPS итоговой видеозаписи
  21.  
  22. # Проверка наличия старых временных файлов
  23. for MONITOR in $MONITORS
  24. do
  25.     if [ -f $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR.list ]
  26.     then
  27.         echo "Purging previous temorary file: $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR.list"
  28.         rm $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR.list
  29.     fi
  30.  
  31.     if [ -d $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR ]
  32.     then
  33.         echo "Purging previous temporary symblinks from $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR"
  34.         rm $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR/*
  35.     else
  36.         mkdir -p $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR
  37.     fi
  38.  
  39. # Поиск и сортировка jpeg для каждой камеры
  40. echo -n "Processing wanted events..."
  41. find $ZM_EVENTS_DIR/$MONITOR/$IMAGEDIR/ -name "*capture.jpg" | sort -t / -k 8n,8 -k 9n,9 -k 10n,10 -k 11.1n,11.4 >$TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR.list
  42.  
  43. EVENTNUMBER=1
  44.     while read EVENTFILE
  45.     do
  46.         EVENTNUMBERPADDING=`seq -f %09.f $EVENTNUMBER $EVENTNUMBER`
  47.         /bin/ln -s $EVENTFILE $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR/$EVENTNUMBERPADDING.jpg
  48.         let "EVENTNUMBER = $EVENTNUMBER + 1"
  49.     done <$TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR.list
  50. echo "...$EVENTNUMBER events found"
  51.  
  52. # Создание avi
  53. echo -n "Building video: $VIDEO_OUTPUT_DIR/$MONITOR/$MOVIEDIR/$MOVIENAME.avi"
  54. mkdir -p $VIDEO_OUTPUT_DIR/$MONITOR/$MOVIEDIR
  55. $FFMPEG -y -f image2 -r $FPS_IN -i $TEMP_DIR/eventsfiles.$MOVIENAME-$MONITOR/%09d.jpg -an -r $FPS_OUT -b 1800k$VIDEO_OUTPUT_DIR/$MONITOR/$MOVIEDIR/$MOVIENAME.avi 2> /$TEMP_DIR/ffmpeg-output-$MOVIENAME-$MONITOR.log
  56.     if [ $? -ne 0 ]then
  57.     echo -e "subject:Внимание! Запись с камеры $MONITOR не работает!\nto:IT@DOMEN.ru" | /usr/sbin/sendmail -froot@DOMEN.ru    # отправляем уведомление на адрес IT@DOMEN.ru, что запись не ведётся
  58.     echo "Внимание! Запись с камеры $MONITOR не работает!"
  59.     fi
  60. echo " -> FINISHED!"

http://pastebin.com/waKggJeG

ċ
Vitaly Miromanov,
2 июн. 2016 г., 05:35
ċ
Vitaly Miromanov,
25 нояб. 2013 г., 02:33
ċ
Vitaly Miromanov,
25 нояб. 2013 г., 02:33