|
Некоторым из нас, кого уже слегонца подпарило смотреть фильмы на маленьких 15 или 17 дюймовых экранах и хочется посмотреть фильму на любимом DVD или просто ЦД плаере, на большом (в моем случает 29" экране), но влом таскать комп или проводить кабель в другую комнату… Да и файлов у тебя скопилось, наверное уже немало… Неплохо было бы просто делать видео ЦД и составить свою видеотеку. Итак приступим: VCD — обычный видео сидюк с потоком MPEG-1 352×288, и битрейтом 1150kbps для видео и 224kbps для аудио. На сидюк поместится ровно столько сколько там написано минут (74 — 80) SVCD — MPEG-2 стрим, 480×576. Битрейт до 2600kbps и для аудио от 34 до 384kbps. Обычно вмещается от 40 до 55 минут, в зависимости от битрейта. XVCD, CVCD — модификации с различным битрейтом и могут не работать на некоторых DVD плаерах (на моем работает). Используя невысокий битрэйт можно запихнуть и до 90 минут на сидюк. Нам понадобится: MPlayer, Transcode (http://theorie.physic.uni-goettingen.de/~ostreich/transcode), MJEG Tools (http://mjpeg.sourceforge.net), VCDImager (http://www.vcdimager.org), perl и калькулятор:) Дальше я приведу скрипты, зачем ломать голову, если можно предоставить работу машине? Ну а потом просто запустить как Divx2VCD Итак Divx2VCD — считает размер, добавляет поля, если нужно,короче переводит потом в стандарт VCD: #!/bin/bash DIR=`pwd` TEMPFOLDER=/tmp/divx2vcd-$RANDOM TEMP_TEMPLATE=/tmp/tcm-template-$RANDOM # для 74 минут (650М) => CDSIZE=735 # для 80 минут (700М) => CDSIZE=795 # здесь тебе придется вручную, хотя и это, я думаю, можно # автоматизировать VIDEORATE=1150 AUDIORATE=224 if [ $# -eq 0 ]; then echo «Usage:» echo " divx2vcd « exit 1 fi FILE=$1 if [ „$1“ == „`basename \“$l»`" ]; then FILE="$DIR\$1" fi mkdir $TEMPFOLDER cd $TEMPFOLDER tcprobe -i «$FILE» > $TEMPFOLDER/info WIDTH=`grep '\[avilib\] V:' $TEMPFOLDER/info | \ perl -e ' $line=; $line = ~ /width=(\d+)/; print $1 ` HEIGHT=`grep '\[avilib\] V:' $TEMPFOLDER/info | \ perl -e ' $line=; $line = ~ /height=(\d+)/; print $1 ` FPS=`grep '\[avilib\] V:' $TEMPFOLDER/info | \ perl -e ' $line=; $line =~ /V: (.+?) fps/; print $1 ` FPS 1= `echo «scale=1; $FPS/1»| bc -l` FRAMES=`grep '\[avilib\] V:' $TEMPFOLDER/info | \ perl -e ' $line=; $line =~ /frames=(d+)/; print $1 ` SECONDS_TOTAL=`echo «scale=0; ($FRAMES / $FPS)»| bc -l' ` HOURS=`echo «scale=0; ($SECONDS_TOTAL / 3600)»| bc -l' ` MINUTES=`echo «scale=0; (($SECONDS_TOTAL — 3600 * $HOURS) / 60)»| bc -l' ` SECONDS=`echo «scale=0; ($SECONDS_TOTAL % 60)»| bc -l' ` echo «**************FILE INFO*******************» echo «Frame Size: ${WIDTH}x${HEIGHT} — FPS: $FPS» echo «Lenght: $FRAMES — Seconds: $SECONDS_TOTAL» echo «$HOURS Hours, $MINUTES Minutes, $SECONDS Seconds» if [ $FPS_1 == «29.9» -o $FPS_1 == «30» -o $FPS_1 == «23.9» ]; then WIDTH_OUT=352 HEIGHT_OUT=240 else WIDTH_OUT=352 HEIGHT_OUT=288 fi echo «Video output: ${WIDTH_OUT}x${HEIGHT_OUT}» #А сейчас нужно посчитать размеры бордюров B_WIDTH_1_1_OUT=`echo “ ($HEIGHT_OUT / ¾)”| bc –l` B_HEIGHT_OUT=`echo “ ($HEIGHT / ($WIDTH / $B_HEIGHT_OUT))”| bc –l ` #выравниваем B_HEIGHT_OUT=`echo “scale=0; $B_WIDTH_1_1_OUT/1)”| bc –l ` # теперь нужно удостоверится, что они парные B_HEIGHT_OUT=`echo “scale=0; $B_HEIGHT_OUT+$B_HEIGHT_OUT%2” | bc –l ` BORDER=`echo “scale=0; ($HEIGHT_OUT-$B_HEIGHT_OUT)/2” | bc –l` echo “Высота без бордура: $HEIGHT_OUT, с бордюром: $BORDER” #стираем рабочие исходники rm –F Movie.mlv Movie.mpa cd $TEMPFOLDER echo “transcode –i \”$FILE\” –V –x mplayer –y mpeg2enc, mp2enc \ -F l –Z ${WIDTH_OUT}x$B_HEIGHT-OUT –Y -$BORDER, 0,-$BORDER, 0 \ -export_asr 2 –E 44100 –b $AUDIORATE –o $DIR/Movie” transcode –i “$FILE” –V –x mplayer –y mpeg2enc,mp2enc \ -F l –Z ${WIDTH_OUT}x$B_HEIGHT-OUT –Y -$BORDER, 0,-$BORDER, 0 \ -export_asr 2 –E 44100 –b $AUDIORATE –o $DIR/Movie rm –rf $TEMPFOLDER cd $DIR [ -f Movie.mlv –a –f Movie.mpa ] || exit 1 rm –f Movie*.mpg echo “maxFileSize = $CDSIZE” > $TEMP_TEMPLATE tcmplex –i Movie.mlv –p Movie.mpa –o Movie.mpg \ -m 1 –F $TEMP_TEMPLATE rm $TEMP_TEMPLATE # и наконец создаем образы for i in `ls Movie*.mpg; do vcdimager –t vcd2 –c $i.bin done И таким образом нам создаст архивы VCD готовые для продигания. Divx2CVCD: этот скрипт нам посчитает автоматически все опции и размеры avi файла так, чтобы он влез на балванку. Можно пробовать с различными значениями QUANTUM (от 2 до 31)(2 – наивысшее качество). Можно так же модифицировать AUDIORATE. Весь скрипт я привожить не буду, поскольку он похож на предыдущий, просто покажу, где и что нужно вставить/изменить: CDSIZE=795 #это место так же как и в предыдущем, а дальше меняем QUANTUM=5 #MAXRATE=900 #в данном случае автоматически AUDIORATE=128 Divx2SVCD: тот же скрипт. Можно менять CDSIZE, QUANTUM, MAXVIDEORATE и AUDIORATE. CDSIZE=795 QUANTUM=7 MAXVIDEORATE=4000000 AUDIORATE=160 #дальше идет все тоже до if [ $FPS ==”29.9” –o $FPS == “30” –o $FPS ==”23.9” ]; then WIDHT_OUT=480 HEIGHT_OUT=480 MPEG_OPTIONS=s, 3,$TEMPLATE else WIDTH_OUT=480 HEIGHT_OUT=576 MPEG_OPTIONS=s, 3,$TEMPLATE Субтитры: Здесь все просто: нужно переименовать файл с субтитрами точно такий же именем как и файл avi и положить в ту же дирректорию. Приятного посмотра! |