The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Сложный скрипт - help"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Сложный скрипт - help"  
Сообщение от vfp7 email(ok) on 07-Июн-07, 11:32 
hi
Нужна помощь в написании скрипта sh под FreeBSD 6.2 выполняемого из cron каждый 1 час.

Цель скрипта: Поиск в заданной папке (содержащей подпапки) avi файлов, в которые в текущий момент не ведется запись видеопотока (ffmpeg из локальной сети пишет в avi файлы с почасовой ротацией или ротацией по обрыву потока)
Затем эти файлы переконвертируем с новыми параметрами, и архивируем 7z в указанную папку, с именем аналогичным подпапке найденого файла.

Я написал так, но работает исключительно вручную, при запуске из crona - не отрабатывает:

#!/bin/sh
# Count Camer
countcam=1
# Init folder files video record
initdir="/var/tmp/cam"
# Folder output files
outdir="/var/ftp/cam"
# Temp file converting video stream
outfileavi="/tmp/tempencode.avi"
# Main code procedure converting:
rm -f $outfileavi
curcam=1
while [ $curcam -le $countcam  ]
do
  curdir=$initdir$curcam
  cd $curdir
  count=0
  for file in *
  do
    count=`expr $count + 1`
  done
  if [ $count -gt 1 ] ; then
  for file in *
  do
    count=`expr $count - 1`
    if [ $count -gt 0 ] ; then
      outfile7z=$outdir$curcam/$file".7z"
      ffmpeg -i $file -y -an -s 640x480 -hq -b 512 -vcodec msmpeg4v2 $outfileavi
      7z a -mx=7 -y -bd -p1972 $outfile7z $outfileavi
      rm -f $outfileavi
      rm $file
    fi
  done
  fi
curcam=`expr $curcam + 1`
done
exit 0

Тогда я попробовал что то типа:

find $initdir -name '*.avi' -type f -mtime +0 | ffmpeg -y -an -s 640x480 -hq -b 512 vcodec msmpeg4v2 | 7z a mx=7 -y -bd -pqwerty $outfile7z

Но не знаю как правильно перебросить результаты работы команд, и как 7z указать основную папку и передать ему подпапку аналогичную результату поиска команды find ...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Сложный скрипт - help"  
Сообщение от DeadMustdie email(??) on 07-Июн-07, 12:34 
В консоли, в которой работает запуск "вручную", сделать
  echo $PATH
В скрипт в начало написать
  PATH=<результат предыдущего шага>
  export PATH
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Сложный скрипт - help"  
Сообщение от vfp7 (ok) on 07-Июн-07, 15:25 
>В консоли, в которой работает запуск "вручную", сделать
>  echo $PATH
>В скрипт в начало написать
>  PATH=<результат предыдущего шага>
>  export PATH

tnx. Вот я лопухнулся ...
Это у меня все результат бессоных ночей при скоростном запуске сервера FreeBSD в неизученной области применения :)

Конечный работоспособный скрипт:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/root/bin
export PATH
# Count Camer
countcam=1
# Init folder files video record
initdir="/var/tmp/cam"
# Folder output files
outdir="/var/ftp/cam"
# Temp file converting video stream
outfileavi="/tmp/tempencode.avi"
# Main code procedure converting:
rm -f $outfileavi
curcam=1
while [ $curcam -le $countcam  ]
do
  curdir=$initdir$curcam
  cd $curdir
  count=0
  for file in *
  do
    count=`expr $count + 1`
  done
  if [ $count -gt 1 ] ; then
  for file in *
  do
    count=`expr $count - 1`
    if [ $count -gt 0 ] ; then
      outfile7z=$outdir$curcam/$file".7z"
      /usr/local/bin/ffmpeg -i $file -y -an -s 640x480 -hq -b 512 -vcodec msmpeg4v2 $outfileavi && \
      /usr/local/bin/7z a -mx=7 -y -bd -p1972 $outfile7z $outfileavi && \
      /bin/rm -f $outfileavi && \
      /bin/rm $file
    fi
  done
  fi
curcam=`expr $curcam + 1`
done
exit 0
      

Теперь работает и из под cron ...

Но также если кто то сможет оживить второй вариант решения этой задачи (через find ...), то было бы очень не плохо. Заместо целой программы можно было бы обойтись буквально одной строкой ...

А так же, если кто знает, может ли ffmpeg использовать возможность многопроцессорных вычислений ?
При отработке этого скрипта, через вывод top видно что 7z при архивации использует все 4 процессора, а ffmpeg при кодировании - только один ...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру