Уважаемые знатоки... Суть такова:
Решил написать скиптик для mencoder, точнее до этого момента использовал гуй - поставил divxc, но гуй на питоне и кушает ресурсы.. жрет порой так, что иксы виснут.
Ну вот и решил накатать скриптик, чтобы можно было конвертить видео без этого гуя, чтоб можно было написать сразу типа
convert.sh file1.avi file2.avi file3.avi etc.avi
И он бы спросил мол какой битрейт ыидео вам нужно, какой битрейт аудио, куда обработанные файлики кинуть... и спокойно все переконвертировал.
Скриптик написал, конвертирует, спрашивает, все норм. Кинул символьную ссылку на скриптик в /usr/bin/, все отлично, но... есть одно но)
Я должен находиться в той папке, где у меня лежат файлики, тобишь если я пишу convert.sh file1.avi file2.avi file3.avi etc.avi то все отлично, а вот convert.sh file1.avi /path/to/video/file2.avi не сработает, так как в качестве имени выходного файла менкодеру будет передано
где «$sd»-путь до destination директории, а ${args[$i]} примет вид file1.avi и /path/to/video/file2.avi
и в итоге имеем - в первом случае (пусть конечная директория у нас ~/video/) ~/video/convert-file1.avi и менкодер его сохраняет
а вот во втором случае имеем ~/video/convert-/path/to/video/file2.avi и вот тут менкодер пошлет нас... заре на встречу)
В принципе то можно оставить и так, главное чтоб все наши файлики лежали в одной папке, куда можно было бы зайти, например тем же mc, набрать convert.sh и пощелкать Ctrl+Enter, поскидывать файлики, или просто в консольке (эт и так понятно, ерунду опять несу).... Но хочется, чтоб можно было с разных мест подтянуть файлики, знать бы как отбросить ненужное, чтоб наша переменная со значением «/path/to/video/file2.avi» отбрасывала эти самые «/path/to/video/» когда менкодер сохраняет выходной файл... Подскажите, у кого какие мысли)
Ниже приведу скриптик. Да, пока что запрашиваются только аудио параметры (битрейт и частота), с видео еще не начал, засунул в функцию всё тоже, что и в случае с аудио... Выдается запрос, хотим ли мы задать параметры для видео (y/n)... Но в случае с (y) вместо вопросов по видео битрейту, соотношению сторон и размеру видео выдается просто
echo "==============================================="
echo "There will be a dialog for entering the video settings (bitrate, aspect ratio, etc.)"
echo "==============================================="
По видео вопрос задается потому как иногда нужно битрейты всякие как есть оставить, просто flv в avi переконвертить не заморачиваясь, а аудио в любом случае, выставляю битрейт и частоту (мне так удобнее, люблю почему то 128 иль вообще 96 поставить, и звучит как в бочке (шутка))
Касаемо видео, потом добавлю, щас это не важно... Главное вышеобозначеную проблемку решить)
Вот собственно код:
#!/bin/bash
args=("$@")
# functions #################################################################################
fn_example()
{
echo "============================================================="
echo "Example startup script: "
echo cd /path/to/video/directory/
echo "convert.sh file.avi file1.avi file2.avi"
echo "============================================================="
}
fn_f_error()
{
echo "============================================================="
echo "Error!"
echo "file "${args[$i]}" no found"
echo "============================================================="
}
fn_d_error()
{
echo "============================================================="
echo "Error!"
echo "directory "$sd" no found"
echo "============================================================="
}
fn_video ()
{
echo "============================================================="
echo "There will be a dialog for entering the video settings (bitrate, aspect ratio, etc.)"
echo "============================================================="
echo "Audio setting:"
echo -e "Enter the mp3 bitrate (32 to 1024) and press Enter: \c"
read bitrate
echo -e "Enter the mp3 Sample Rate kHz (22050, 24000, 44100, 48000) and press Enter: \c"
read srate
for i in $(seq 0 1 $n1)
do
if test -f ${args[$i]}
then
mencoder ${args[$i]} -ffourcc DX50 -vf softskip, -ovc lavc -lavcopts vcodec=mpeg4:acodec=libmp3lame:threads=3:vmax_b_frames=0:vme=4:mbd=1:v4mv:lumi_mask=0.05:dark_mask=0.01:precmp=0:cmp=0:subcmp=0:dia=1:last_pred=0:preme=0:qns=0:vlelim=-4:vcelim=9:autoaspect -oac mp3lame -lameopts abr:br=$bitrate:mode=1 -srate $srate -o "$sd"convert-${args[$i]}
else
fn_f_error
fn_example
exit
fi
done
}
fn_audio ()
{
echo "Audio setting:"
echo -e "Enter the mp3 bitrate (32 to 1024) and press Enter: \c"
read bitrate
echo -e "Enter the mp3 Sample Rate kHz (22050, 24000, 44100, 48000) and press Enter: \c"
read srate
#=============================================================
for i in $(seq 0 1 $n1)
do
# =====================
if test -f ${args[$i]}
then
mencoder ${args[$i]} -ffourcc DX50 -vf softskip, -ovc lavc -lavcopts vcodec=mpeg4:acodec=libmp3lame:threads=3:vmax_b_frames=0:vme=4:mbd=1:v4mv:lumi_mask=0.05:dark_mask=0.01:precmp=0:cmp=0:subcmp=0:dia=1:last_pred=0:preme=0:qns=0:vlelim=-4:vcelim=9:autoaspect -oac mp3lame -lameopts abr:br=$bitrate:mode=1 -srate $srate -o "$sd"convert-${args[$i]}
else
fn_f_error
fn_example
exit
fi
# =====================
done
#=============================================================
}
#########################################################################################
#=============================================================
echo -e "Enter the number of converted files: \c"
read n
let n1=n-1
for i in $(seq 0 1 $n1)
do
if test -f ${args[$i]}
then
echo "[${args[$i]} - OK]"
else
fn_f_error
fn_example
exit
fi
done
#=============================================================
#=============================================================
echo -e "Enter destination directory '"/"' at the end of (Example: /mnt/video/): \c"
read sd
if test -d $sd
then
echo "$sd - OK]"
else
fn_d_error
exit
fi
#=============================================================
echo -e "To enter the video settings? (y/n): \c"
read query
case $query in
y)
fn_video
;;
n)
fn_audio
;;
esac
Низнаю как здесь в LORCODE убрать переносы строк, но это не критично, вродь ничего особо не поползло...
У кого какие мысли? как отбросить /path/to/video/ в нужном месте...