>Я сдираю titles с DVD (насколько вычитал, параметры не слабые) так:
>
> $ mencoder dvd://3 -sws 2 -oac copy -ovc lavc -lavcopts
> vcodec=mpeg4:mbd=2:vbitrate=1800:vpass=1 -vf crop=854:355:0:62,scale=854
> -o movie.avi
>
> Но возникают, как минимум 3 проблемы:
> . mplayer показывает картинку с шириной=854, в то время, как mencoder
> (если не использовать насильственно scale=854), жмёт с шириной=720.
> Почему?
> при сценах обильного движения наблюдается огромный "квадратизм", на
> спокойных сценах - всё гладко.
> . при попытке сделать 2ой проход (таже команда, лишь vpass=2), - как я
> понял, для повышения качества (чем больше проходов, тем лучше), качество
> наоборот хуже, чем после первого.
>
> Есть идеи как исправить ситуацию?
> mplayer-1.0-0.16.pre7.2.fc4 собран мною из src.rpm.
> Или поделитесь своим успешным опытом. Спасибо.
Тут у меня скриптик написан для кодирования видео, правда не идеален, но
свою работу (под меня) он делал. Да, он берёт уже скопированные файлы на
винчестер с расширением avi. Для этого можно тем же mencoder-ом просто везде
copy поставить и привод меньше крутиться будет.
Что он делает. Вначале показывает фильм и показывает на сколько можно края
обрезать. Далее предлагает воспользоваться фильтрами для того, чтобы убрасть
черзстросность, которой богаты DVD с 2-мя и более фильмами на одной стороне
двд. Далее предлагает выбрать битрейт (ограничить по CD или выбрать свой).
Кстати, здесь написано для русифицированного mplayer-a!!! Если английский,
то надо исправить строки "Рекомендуемый битпоток для 700MB CD " и т.д. на
аналогичные английские. Да, все данный хранит в текстовых файлах. Думаю
разберётесь. Кстати, если у кого есть желание можно этот скрипт доработать.
Да, вопрос ко всем, может кто смог запустить скодированные фильмы менкодером
по офтопиковой финдой?
И ещё, есть ли возможность фильмы, скодированные таким образом перекинуть
обратно на DVD, для того, чтобы можно было бы проигрывать их на бытовом
проигрывателе?
С уважением, Косарев Дмитрий
#!/bin/sh
# проверяем правильность каталога с исходными файлами
IN_PATH=$1
if [ -z $IN_PATH ]
then
echo "Запуск команды encoding.sh inc_path [out_path]"
exit
fi
if ! `test -d $IN_PATH`
then
echo -e "\nКаталог \"$IN_PATH\" с исходными файлами не существует!
\n\nЗапуск команды encoding.sh inc_path [out_path]\n"
exit
fi
OUT_PATH=$2
if [ -z $OUT_PATH ]
then
OUT_PATH=/files/video/encoding/
fi
if ! `test -d $OUT_PATH`
then
echo -e "\nКаталог \"$OUT_PATH\" для окончательных файлов не существует!
\n\nЗапуск команды encoding.sh inc_path [out_path]\n"
exit
fi
echo -e "\nСохраняем файлы в $OUT_PATH\n"
#проверяем свободное место и показываем сколько занимает существующие файлы,
если место мало, то спрашиваем...
OUT_FREE=`df $OUT_PATH | awk '{if($1 ~ "/") print $4}'`
IN_FREE=`du -s $IN_PATH | awk '{print $1}'`
H_OUT_FREE=`df -h $OUT_PATH | awk '{if($1 ~ "/") print $4}'`
H_IN_FREE=`du -sh $IN_PATH | awk '{print $1}'`
if [ $OUT_FREE -le $IN_FREE ]
then
echo -n "Внимание! Места ($H_OUT_FREE) под готовые файлы ($H_IN_FREE)
может не хватить! Продолжить? (y/n)"
read F
if [ "$F" != "y" ]
then
echo "Прервано пользователем!"
exit 0
fi
echo -e "Продолжаем! \n"
fi
#Удаляем временные файлы
cd $IN_PATH
rm frameno.avi
rm *.frameno
rm *.bitrate
rm *.crop
rm *.txt
#Делаем обрезание черных сторон и вычисляем битрейт
echo `date` start encoding
for loop in *.avi
do
rm $loop.txt
mplayer -identify $loop -vf cropdetect
echo $ID_LENGTH
echo -n "Введите необходимое кадрирование (только значение):"
read CROP
echo $CROP > $loop.crop
#фильтры
echo -ne "Включить фильтр чрезстрочности? (y/n):\n"
read FILTER
if [ "$FILTER" = "y" ]
then
echo ",lavcdeint" > $loop.filter
else
echo "" > $loop.filter
fi
while :
do
echo -n -e "Введите битрейт \n1 - 700MB \n2 - 2x650MB\nили значение
битрейта (от 800):"
read BITRATE
if [ "$BITRATE" = "1" ]
then
echo "Битрейт будет вычислен для 700MB"
echo "Рекомендуемый битпоток для 700MB CD: ">
$IN_PATH$loop.frameno
break 1
elif [ "$BITRATE" = "2" ]
then
echo "Битрейт будет вычислен для 2 x 650MB"
echo "Рекомендуемый битпоток для 2 x 650MB CD: ">
$IN_PATH$loop.frameno
break 1
elif [ $BITRATE -gt 799 ]
then
echo "Битрейт выбран вручную: $BITRATE"
echo $BITRATE > $IN_PATH$loop.bitrate
break 1
else
echo "неверное значение!"
fi
done
done
#что делаем
for loop in *.avi
do
echo -ne "\nФайл $loop\n Битрейт: "
if `test -f $IN_PATH$loop.bitrate `
then
cat < $IN_PATH$loop.bitrate
else
echo "будет подсчитан для "
echo -ne | awk '$0 {print substr($0,27)}' < $IN_PATH$loop.frameno
fi
done
echo -n "Всё верно? Продолжить? (y/n)"
read F
if [ "$F" != "y" ]
then
echo "Прервано пользователем!"
rm *.frameno
rm *.bitrate
rm *.crop
exit 0
fi
for loop in *.avi
do
if `test -f $IN_PATH$loop.frameno`
then
mencoder $IN_PATH$loop -ovc frameno -oac copy -o frameno.avi >
$IN_PATH$loop.txt
FRAMENO=`cat < $IN_PATH$loop.frameno`
echo `grep "$FRAMENO" $IN_PATH$loop.txt | awk
'gsub("'"$FRAMENO"'","") {print $0}' > $IN_PATH$loop.bitrate`
rm frameno.avi
fi
BITRATE=`cat < $IN_PATH$loop.bitrate`
CROP=`cat < $IN_PATH$loop.crop`
FILTER=`cat < $IN_PATH$loop.filter`
if [ "$BITRATE" == "" ]
then
BITRATE="1500"
fi
mencoder $IN_PATH$loop -vf crop=$CROP,hqdn3d=2:1:2$FILTER -ovc
lavc -lavcopts
vcodec=mpeg4:vbitrate=$BITRATE:vme=5:vqcomp=0.8:vqblur=0.1:v4mv:trell:cbp:m
mencoder $IN_PATH$loop -vf crop=$CROP,hqdn3d=2:1:2$FILTER -ovc
lavc -lavcopts
vcodec=mpeg4:vbitrate=$BITRATE:vme=5:vqcomp=0.8:vqblur=0.1:v4mv:trell:cbp:m
rm divx2pass.log
#mencoder $IN_PATH$loop -vf crop=$CROP,hqdn3d=2:1:2 -ovc lavc -lavcopts
vcodec=mpeg4:vbitrate=$BITRATE:vme=5:vqcomp=0.8:vqblur=0.1:v4mv:trell:cbp:mv0:mpe
done
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 22416; Возраст листа: 832; Участников: 1451
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/468492