Shell script to enumerate titles and chapters of a dvd and rip the longest one into avi using mencoder
BASH script to enumerate titles and chapters of a dvd and rip the longest one into avi using mencoder. DVD device can be a path to mounted iso (e.g. /mnt/iso/) or a real device (e.g. /media/cdrom0/).
To rip all titles and chapters, try this.
#!/bin/bash
# script to identify and rip the longest title of a dvd into xvid avi
# dvd-device can be a path to mounted iso (e.g. /mnt/iso/) or a real device (e.g. /media/cdrom0/)
# expects dvd as $1 and dvd name as $2
# error handling
function err_exit { echo -e 1>&2; exit 1; }
# Confirm two arguments were passed
if [ $# -ne 2 ]; then
ak@dt:~$ cat /usr/local/bin/dvd2xvid-longest
#!/bin/bash
# script to identify and rip the longest title of a dvd into xvid avi
# dvd-device can be a path to mounted iso (e.g. /mnt/iso/) or a real device (e.g. /media/cdrom0/)
# expects dvd as $1 and dvd name as $2
# error handling
function err_exit { echo -e 1>&2; exit 1; }
# Confirm two arguments were passed
if [ $# -ne 2 ]; then
echo -e 1>&2 "\n Usage error! Need two arguments.\n Example: $0 dvd-device My.DVD\n"
exit 1
fi
# Check if VIDEO_TS exists
ddir=$(echo "$1/VIDEO_TS" | sed 's_/\+_/_')
if ! [ -d "$ddir" ]; then
echo -e 1>&2 "\n Error!\n Can't find $ddir \n"
exit 1
fi
log="dvd2xvid-longest.log"
# remove log if exists
if [ -f $log ]; then
echo -e 1>&2 "\n Removing existing $log.."
rm $log || err_exit
fi
# test lsdvd
lsdvd -x $1 1> /dev/null || err_exit
# get longest track
title=$(lsdvd -x $1 2> /dev/null | grep "Longest track" | awk '{print$3}')
# get longest chapter of the longest title
chapter=$(lsdvd -c -t$title $1 2> /dev/null | sed 's/^\s\+//' | grep "Chapter:" | sort -k4r | head -1 | awk -F'Chapter: ' '{print$2}' | awk -F',' '{print$1}')
# log date
echo -e "$(date)" >> $log || err_exit
# real work starts here
rm -f divx2pass.log frameno.avi || err_exit
# define source
SRC="dvd://$title -chapter $chapter -dvd-device $1 -alang en"
# audio pass
echo -e "\n\n$(date +%H:%M:%S) started apass" >> $log || err_exit
nice -n 3 mencoder -oac mp3lame -lameopts mode=2:cbr:br=96:vol=0 \
-ovc frameno -o frameno.avi $SRC || err_exit && \
# video pass 1
echo -e "\n\n$(date +%H:%M:%S) started vpass1" >> $log || err_exit
nice -n 3 mencoder -sws 2 -oac copy -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2000:vhq:vpass=1 \
-ffourcc XVID $SRC -o /dev/null || err_exit && \
# video pass 2
echo -e "\n\n$(date +%H:%M:%S) started vpass2" >> $log || err_exit
nice -n 3 mencoder -sws 2 -oac copy -ovc lavc \
-lavcopts vcodec=mpeg4:vbitrate=2000:vhq:vpass=2 \
-ffourcc XVID $SRC -o "$2.longest.track.avi" || err_exit
# log more stuff
echo "$(date +%H:%M:%S) done" >> $log || err_exit
echo -e "\n\n\n" >> $log || err_exit
echo -e "\nLongest track is $title" >> $log || err_exit
echo "Longest chapter is $chapter" >> $log || err_exit
echo -e "\n########## lsdvd output ##########" >> $log || err_exit
echo "$(lsdvd -x $1)" >> $log || err_exit
1 Comment
1. Alain Kelder is a Giant D&hellip replies at 18th May 2010, 2:29 pm :
[…] To rip just the longest title, try this. […]
Leave a comment