пятница, 18 ноября 2011 г.

Скрипт пакетного перекодирования видео файлов в несколько потоков.

Возможно, я немного слукавил говоря о много-поточности, так как скрипт успешно протестирован в два потока, а при 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/"

#определяем маску по которой будем выбирать файлы
filesmask=s*.avi

cd "$indir"

# в цикле берем по одному видео файлу
for file in $filesmask
do

# делаем проверку на файл stop.txt в директории назначения, для корректного 
# завершения всех потоков
if [ -e "${outdir}stop.txt" ]; then break; fi

# если видео файл уже был обработан, пропускаем...
if [ -e "${outdir}$file.done" ]; then continue; fi

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"

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

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