Скрипт мониторинга папки и автоматического конвертирования видео

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

vdereberya
Сообщения: 1
ОС: centos

Скрипт мониторинга папки и автоматического конвертирования видео

Сообщение vdereberya » 07.05.2014 14:45

Помогите доработать скрипт.
Есть задача: отслеживать добавление видео файлов в пользовательскую папку, конвертировать их в нужный формат.
Мониторинг папки ведется с помощью inotify tools, конвертирование – ffmpeg.
Сейчас скрипт конвертирование выполняет, но делает это одновременно со всеми файлами. Нужно что бы была возможность задавать количество одновременных конвертаций (например параллельно 5) или вести конвертирование поочередно.

Код: Выделить всё

 #!/bin/bash

INOTIFY_CMD="/usr/bin/inotifywait"
from="/home/incoming/No_converted"
tmp="/home/incoming/Converted_bash/tmp"
to="/home/incoming/Converted"
Mov_dir="/home/incoming/Mov_dir"
normal='_normal'
mobile='_mobile'
LOGO="/home/incoming/Converted_bash/tmp/logo.png"

"$INOTIFY_CMD" -e close_write -e moved_to -m "$from" --format='%f' | \
while read F; do
(
sleep 3
mv "$from/$F" "$tmp/$F"

ffmpeg -y -i "$tmp/$F" -s 710x568 -vcodec libx264 -b 6395000 -aspect 4:3 -r 25.000 -vf crop=in_w-2*6:in_h-2*4 -vf format=yuv420p -ab 96k -ar 48000 -map 0:0 -map 0:1 -map 0:1 -map_channel 0.1.0:0.1 -map_channel 0.1.2:0.1 -map_channel 0.1.1:0.2 -map_channel 0.1.3:0.2 -strict -2 -metadata:s:a:0 language=ukr -metadata:s:a:1 language=rus -vf "movie="$LOGO" [wm];[in][wm] overlay=600:100 [out]" "$to/$F$normal".mp4 2> "$to/$F$normal".log
md5sum "$to/$F$normal".mp4 > "$to/$F$normal".md5
cp "$to/$F$normal".mp4 "$to/$F$normal".md5 "$Mov_dir/"


ffmpeg -y -i "$tmp/$F" -s 480x384 -vcodec libx264 -b 6395000 -aspect 4:3 -r 25.000 -vf crop=in_w-2*6:in_h-2*4 -vf format=yuv420p -ab 96k -ar 48000 -map 0:0 -map 0:1 -map 0:1 -map_channel 0.1.0:0.1 -map_channel 0.1.2:0.1 -map_channel 0.1.1:0.2 -map_channel 0.1.3:0.2 -strict -2 -metadata:s:a:0 language=ukr -metadata:s:a:1 language=rus -vf "movie="$LOGO" [wm];[in][wm] overlay=600:100 [out]" "$to/$F$mobile".mp4 2> "$to/$F$mobile".log
md5sum "$to/$F$mobile".mp4 > "$to/$F$mobile".md5
cp "$to/$F$mobile".mp4 "$to/$F$mobile".md5 "$Mov_dir/"

) &
done
Спасибо сказали:

Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Скрипт мониторинга папки и автоматического конвертирования видео

Сообщение tmp13 » 13.05.2014 16:29

По любому мониторить количество процессов... наверное
на исходе дня...

Код: Выделить всё

#!/bin/bash
countproc=5
while true
do
    currcount=`ps -e|grep sleep|wc -l`
    if [ "$currcount" -lt "$countproc" ]
    then
        sleep 10&
    fi
done
exit 0
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15912
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Скрипт мониторинга папки и автоматического конвертирования видео

Сообщение Bizdelnick » 13.05.2014 17:10

jobs | wc -l (работает только в bash).
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Скрипт мониторинга папки и автоматического конвертирования видео

Сообщение drBatty » 13.05.2014 19:30

vdereberya писал(а):
07.05.2014 14:45
Сейчас скрипт конвертирование выполняет, но делает это одновременно со всеми файлами.

я бы мониторил количество работающих в системе ffmpeg.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7978
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Скрипт мониторинга папки и автоматического конвертирования видео

Сообщение serzh-z » 13.05.2014 20:55

vdereberya
См. "-P" для xargs. Должно получиться нечто подобное:

"$INOTIFY_CMD" -e close_write -e moved_to -m "$from" --format='%f' | xargs -I '{}' -P 5 sh -c "ffmpeg ... ; md5sum ... ; cp ..."

Или аккуратнее:

Код: Выделить всё

convert_file() {
  F=$1

  ffmpeg -y -i "$tmp/$F" -s 710x568 -vcodec libx264 -b 6395000 -aspect 4:3 -r 25.000 -vf crop=in_w-2*6:in_h-2*4 -vf format=yuv420p -ab 96k -ar 48000 -map 0:0 -map 0:1 -map 0:1 -map_channel 0.1.0:0.1 -map_channel 0.1.2:0.1 -    map_channel 0.1.1:0.2 -map_channel 0.1.3:0.2 -strict -2 -metadata:s:a:0 language=ukr -metadata:s:a:1 language=rus -vf "movie="$LOGO" [wm];[in][wm] overlay=600:100 [out]" "$to/$F$normal".mp4 2> "$to/$F$normal".log
  md5sum "$to/$F$normal".mp4 > "$to/$F$normal".md5
  cp "$to/$F$normal".mp4 "$to/$F$normal".md5 "$Mov_dir/"


  ffmpeg -y -i "$tmp/$F" -s 480x384 -vcodec libx264 -b 6395000 -aspect 4:3 -r 25.000 -vf crop=in_w-2*6:in_h-2*4 -vf format=yuv420p -ab 96k -ar 48000 -map 0:0 -map 0:1 -map 0:1 -map_channel 0.1.0:0.1 -map_channel 0.1.2:0.1 -map_channel 0.1.1:0.2 -map_channel 0.1.3:0.2 -strict -2 -metadata:s:a:0 language=ukr -metadata:s:a:1 language=rus -vf "movie="$LOGO" [wm];[in][wm] overlay=600:100 [out]" "$to/$F$mobile".mp4 2> "$to/$F$mobile".log
  md5sum "$to/$F$mobile".mp4 > "$to/$F$mobile".md5
  cp "$to/$F$mobile".mp4 "$to/$F$mobile".md5 "$Mov_dir/"

}

"$INOTIFY_CMD" -e close_write -e moved_to -m "$from" --format='%f' | xargs -I '{}' -P 5 convert_file '{}'
Scio me nihil scire.
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7978
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Скрипт мониторинга папки и автоматического конвертирования видео

Сообщение serzh-z » 13.05.2014 21:02

Рабочий PoC:

Код: Выделить всё

$ for n in {1..100} ; do echo $n ; done | xargs -I '{}' -P 5 sh -c "echo 'TASK: {}' ; sleep 2"
Scio me nihil scire.
Спасибо сказали: