Возможно, я немного слукавил говоря о много-поточности, так как скрипт успешно протестирован в два потока, а при 4-х потоках подхватывались одинаковые файлы. Решение почему так происходило сходу не нашёл, и сейчас этим заниматься особенно нет желания...
Запуск скрипта производим следующим образом:echo "/SPACE/Video/DoraNew/recode-smp.sh" | at now
Первый процесс ушел в фоновый режим, далее точно также запускаем необходимое количество процессов (например, общее количество может быть "cores-1", где cores - количество ядер в системе).
Если в директории назначения создать файл "stop.txt", то все процессы докодируют свои текущие файлы и закончат работу. Перезапустить скрипты можно в любое время, кодирование продолжится с новыми файлами, то-есть те что уже перекодированы будут пропущены. Вот в общем и всё, ниже привожу скрипт с базовыми комментариями.
#!/bin/sh
# определяем исходную директорию, и директорию назначения
curdir=${PWD}
outdir="/SPACE/Video/DoraNew/"
indir="/SPACE/Video/DoraEng/"
outdir="/SPACE/Video/DoraNew/"
indir="/SPACE/Video/DoraEng/"
#определяем маску по которой будем выбирать файлы
filesmask=s*.avi
cd "$indir"
filesmask=s*.avi
cd "$indir"
# в цикле берем по одному видео файлу
for file in $filesmask
do
# делаем проверку на файл stop.txt в директории назначения, для корректного
do
# делаем проверку на файл stop.txt в директории назначения, для корректного
# завершения всех потоков
if [ -e "${outdir}stop.txt" ]; then break; fi
# если видео файл уже был обработан, пропускаем...
# если видео файл уже был обработан, пропускаем...
if [ -e "${outdir}$file.done" ]; then continue; fi
sleep 1
sleep 1
# проверяем не обрабатывается ли текущий выбранный нами файл другим потоком
lockfile-check "${outdir}$file"if [ $? -eq "0" ]; then continue; fi
# дополнительная проверка
lockfile-create --retry 0 "${outdir}$file"
if [ $? -ne "0" ]; then continue; fi
touch "${outdir}$file.txt"
#Первый проход
mencoder -ovc xvid -passlogfile "${outdir}divx_$file.log" \
-xvidencopts pass=1:bitrate=1800:turbo:vhq=0 -nosound "$file" -o /dev/null
#Второй проход
mencoder -ovc xvid -passlogfile "${outdir}divx_$file.log" -xvidencopts \ pass=2:bitrate=1800:vhq=2:bvhq=1:chroma_opt:quant_type=mpeg \
-af volnorm -oac mp3lame -lameopts abr:br=128 "$file" -o "${outdir}${file}"
rm -f "${outdir}divx_$file.log"
echo ${file} - Done
mv "${outdir}$file.txt" "${outdir}$file.done"
sleep 1
lockfile-remove "${outdir}$file"
done
cd "$curdir"
Комментариев нет:
Отправить комментарий