#! /bin/bash S_LENGTH=`mplayer -identify dvd:// -dvd-device source -frames 1 -ao null -vo null 2>/dev/null | grep LENGTH | sed -e 's/^.*=//' | sort -nr | head -n1` CHAPTER=`mplayer -identify dvd:// -dvd-device source -frames 1 -ao null -vo null 2>/dev/null | grep $S_LENGTH | cut -d "_" -f 4` MIDDLE=`echo $S_LENGTH/2 | bc` ASPECT=`mplayer -identify dvd://${CHAPTER} -dvd-device source -frames 1 -ao null -vo null 2>/dev/null | grep VIDEO_ASPECT | tail -n 1 | cut -d "=" -f 2` CROP=`mplayer dvd://$CHAPTER -dvd-device source -ss $MIDDLE -frames 3 -vf cropdetect -ao null -vo null 2>/dev/null | grep "\[CROP\]" | sed -e 's/^.*(//' -e 's/).*//' -e 's/-vf //'` # Make screenshot mplayer -sws 1 -aspect $ASPECT -ss $MIDDLE -frames 1 -vf $CROP -vo jpeg: outdir=. -ao null dvd://${CHAPTER} -dvd-device source 1>/dev/null 2>/dev/null mplayer -identify dvd://$CHAPTER -dvd-device source -frames 1 -ao null -vo null 2> /dev/null | grep "ac3 (5.1)" > s-list SOUND_LIST=`cat s-list` SOUND_NUM=`cat s-list | wc -l` SOUND_SEQ=`seq 1 ${SOUND_NUM}` SOUND_LANG=`cat s-list | sed -e 's/^.*language: //' -e 's/ .*$//'` SOUND_AID=`cat s-list | sed -e 's/^.*aid: //' -e 's/\..*$//'` echo "General rip information" echo "-----------------------" echo "Movie length: ${S_LENGTH} secs. (1/2: $MIDDLE)" echo "DVD chapter used: ${CHAPTER}" echo "Cropping parameters: ${CROP}" echo -e "Sound tracks available:\n${SOUND_LIST}" N=1 for i in ${SOUND_LANG}; do SOUNDS_LANG[$N]=$i N=$((N+1)) done N=1 for i in ${SOUND_AID}; do SOUNDS_AID[$N]=$i N=$((N+1)) done SSIZE=0 MUXLANG="" MUXLANGS="" TRACKORDER="--track-order 0:0" TRACKNUM=1 # Encode sound for i in ${SOUND_SEQ}; do # Common INPUT=source OUT=audio-${SOUNDS_LANG[$i]}.aac AID=${SOUNDS_AID[$i]} echo -n "Encoding audio channel ${AID} for language ${SOUNDS_LANG[$i]}... " mencoder dvd://$CHAPTER -dvd-device $INPUT -of rawaudio -channels 6 -o $OUT \ -aid $AID -vf harddup -ovc frameno -oac faac -faacopts object=1:tns:quality=75 > a-${SOUNDS_LANG[$i]} 2> e-${SOUNDS_LANG[$i]} mencoder dvd://$CHAPTER -ss $MIDDLE -frames 750 -dvd-device $INPUT -of rawaudio -channels 6 -o sample-$OUT \ -aid $AID -vf harddup -ovc frameno -oac faac -faacopts object=1:tns:quality=75 > a-${SOUNDS_LANG[$i]} 2> e-${SOUNDS_LANG[$i]} SOUNDS_SIZE[$i]=`du -ab $OUT | cut -f 1` SSIZE=$((${SOUNDS_SIZE[$i]}+$SSIZE)) MUXLANG=${MUXLANG}" --language 0:${SOUNDS_LANG[$i]} -a 0 -D -S $OUT" MUXLANGS=${MUXLANGS}" --language 0:${SOUNDS_LANG[$i]} -a 0 -D -S sample-$OUT" TRACKORDER="${TRACKORDER},${TRACKNUM}:0" TRACKNUM=$((TRACKNUM+1)) echo "done" done echo "Sounds size: $SSIZE bytes" # Calculate bitrate DVDFACTOR=3 TARGET=`echo "(4700000000/${DVDFACTOR})/(1024^2)" | bc` echo "Using STANDARD target 1/${DVDFACTOR} DVD-5 (${TARGET} Mb)" BITRATE=`echo "(4700000000/${DVDFACTOR}-${SSIZE}-1024^2)*8/${S_LENGTH}/1000" | bc` echo "Target bitrate: $BITRATE kbit/s" # Make sample echo -n "Encoding sample 30 sec... " mencoder -ss $MIDDLE -frames 750 -sws 1 -aspect $ASPECT -vf softskip,pullup,${CROP},harddup -ovc x264 \ -x264encopts pass=1:qp=26:8x8dct:no-fast-pskip:partitions=i8x8:subme=5:no-psnr:bframes=3:ref=2:b-pyramid:weightb:mixed-refs:analyse=all:threads=2 \ -nosound $FPS -o source-sample.avi dvd://$CHAPTER -dvd-device source 1>/dev/null 2>/dev/null echo -n "2-nd pass... " mencoder -ss $MIDDLE -frames 750 -sws 1 -aspect $ASPECT -vf softskip,pullup,${CROP},harddup -ovc x264 \ -x264encopts pass=2:bitrate=$BITRATE:subq=6:no-fast-pskip:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b-pyramid:weightb:analyse=0x3,0x133:mixed-refs:me_range=16:chroma_me=1:rceq=blurCplx\^\(1-qComp\):qpmin=10:qpmax=51:qpstep=4:qcomp=0.60:threads=2 \ -nosound $FPS -o source-sample.avi dvd://$CHAPTER -dvd-device source 2>.enclog 1>/dev/null echo "done." # Mux sample mkvmerge -o "source-sample.mkv" -d 0 -A -S source-sample.avi $MUXLANGS $TRACKORDER echo "Go and check sample." echo "Encoding video stream. This process takes a plenty of time, from 5 to 8 hrs usually." mencoder -sws 1 -aspect $ASPECT -vf softskip,pullup,${CROP},harddup -ovc x264 \ -x264encopts pass=1:qp=26:8x8dct:no-fast-pskip:partitions=i8x8:subme=5:no-psnr:bframes=3:ref=2:b-pyramid:weightb:mixed-refs:analyse=all:threads=2 \ -nosound $FPS -o source.avi dvd://$CHAPTER -dvd-device source 2> /dev/null echo "Ok. Bits calculation done. 2-nd pass in progress... " mencoder -sws 1 -aspect $ASPECT -vf softskip,pullup,${CROP},harddup -ovc x264 \ -x264encopts pass=2:bitrate=$BITRATE:subq=6:no-fast-pskip:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b-pyramid:weightb:analyse=0x3,0x133:mixed-refs:me_range=16:chroma_me=1:rceq=blurCplx\^\(1-qComp\):qpmin=10:qpmax=51:qpstep=4:qcomp=0.60:threads=2 \ -nosound $FPS -o source.avi dvd://$CHAPTER -dvd-device source 2>.enclog grep x264 .enclog > codeparams # Mux mkvmerge -o "source.mkv" -d 0 -A -S source.avi $MUXLANG $TRACKORDER \ --attachment-mime-type "text/plain charset=us-ascii" --attachment-name codeparams --attach-file codeparams echo -n "Cleanup... " rm *.aac rm *.avi rm *.log rm .enclog rm ?-* echo "done." echo "Ripping complete. Enjoy ;-)"