rip-loop.sh: Ripping a few hundred CDs in a day
Last year after moving to a new house, I decided to finally set up some local backup functionality and found a Synology RS819 for a good price, added some drives to it, and started playing around with it.
From there, I decided to finally start ripping all the CDs that I had collected over the years that were taking up space in my office (where they still stand, only because I've conveniently forgotten to move them out to storage...) The main computer I have has an internal DVD drive but also some time ago I had purchased an external USB DVD writer (another thing that I had conveniently forgotten was that I actually already owned a DVD drive, especially a DVD writer). So as part of wanting to rip all the CDs I had, I reinstalled abcde, ripped a disc, and almost immediately got annoyed by having to restart abcde and remember which drive I was ripping from.
So I came up with a quick shell script, which I call rip-loop.sh:
#!/bin/bash
set -e
# trap ctrl-c and call ctrl_c()
trap ctrl_c INT
_disc="$1"
ctrl_c() {
echo "** Trapped CTRL-C on $_disc"
eject $_disc
exit 1
}
_rip() {
abcde -d $_disc -NGB;
}
_wait() {
sleep 10;
}
disc_ready() {
setcd -i $_disc | grep 'Disc found' | wc -l
}
while ( true ); do
echo "Checking if disc $_disc is ready"
if [ $( disc_ready $_disc ) -eq 1 ]; then
_rip $_disc
fi
echo "Sleeping"
_wait
done
The only dependency is on setcd for checking to see if the drive is ready. It's possible there's another tool that could perform this same functionality, but I found this one and it was easy to implement in to the workflow.
With ./rip-loop.sh /dev/sr0 and ./rip-loop.sh /dev/sr1 I could put a CD in, wait for abcde to finish it's process, and then replace the CD with the next one in the list. Everything was properly tagged and, from the magic of NFS on to the Synology, everything was written to the correct location automagically. I've provided the .abcde.conf below in case anyone needs it.
CDDBPROTO=6
HELLOINFO="`whoami`@`hostname`"
MP3ENCODERSYNTAX=lame
LAME=lame
LAMEOPTS='--preset insane'
OUTPUTTYPE="mp3"
CDROMREADERSYNTAX=cdparanoia
CDPARANOIA=cdparanoia
CDPARANOIAOPTS="--never-skip=40"
CDDISCID=cd-discid
OUTPUTDIR="/home/user/path/"
OUTPUTFORMAT='${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM} ${TRACKFILE}'
VAOUTPUTFORMAT='Various/${ALBUMFILE}/${TRACKNUM} ${TRACKFILE}'
VARIOUSARTISTSTYLE="forward-dash"
mungefilename ()
{
echo "$@" | sed s,:,-,g | tr / _ | tr -d \'\"\?\[:cntrl:\]
}
MAXPROCS=3
PADTRACKS=y
EXTRAVERBOSE=y
EJECTCD=y