#!/bin/bash #usage # $0 tmpfile path RIPPER="cdparanoia" RIPPER_TEST_OPTIONS="-Q" RIPPER_OPTIONS="-Be" RIPPER_FILES="track*.cdda.wav" RIPPER_FILES_EXT="wav" ENCODER="ffmpeg" ENCODER_OPTIONS="" ENCODER_EXT="ogg" CDDRIVE="/dev/hda" function realpath() { filename=`basename "$1"` dirname=`dirname "$1"` cd "$dirname" && echo `pwd`/$filename } TMP_PATH=`realpath "$1"` OUTPUT_PATH=`realpath "$2"` if [ ! -d "$TMP_PATH" ] || [ ! -d "$OUTPUT_PATH" ]; then echo Usage: $0 temp_path output_path exit 1 fi function show_progress() { POS=`tail $1 | grep read | tail -n1 | sed -e 's/^.* @ //'` SECTORS=`grep -m1 to\ sector $1 | sed -e 's/[^0-9]*\([0-9]*\).*/\1/'` PERCENT=`echo scale=2\;$POS \* 100 / 1176 / $SECTORS | bc 2>/dev/null` #echo Pos: $POS Sectors: $SECTORS Percent: $PERCENT if [ -n "$PERCENT" ]; then echo -n $'\r' echo -n $PERCENT% completed fi } function realpath() { filename=`basename "$1"` dirname=`dirname "$1"` cd "$dirname" && echo `pwd`/$filename } $RIPPER $RIPPER_TEST_OPTIONS echo echo Ripping in 10 seconds sleep 10 TMPDIR=`mktemp -dp "$TMP_PATH"` RIPPER_OUTPUT=$TMPDIR/ripper_output cd "$TMPDIR" $RIPPER $RIPPER_OPTIONS 2>&1 | cat > "$RIPPER_OUTPUT" & RIPPER_PID=$! while [ 1 ]; do if ls $RIPPER_FILES >/dev/null 2>&1; then IFS=$'\n' for i in `ls $RIPPER_FILES 2>/dev/null`; do SIZE=`du "$i" | sed -re 's/[[:blank:]]+.*//'` for (( j=0; j < 15 ; j++ )); do show_progress $RIPPER_OUTPUT; sleep 1; done if [ $SIZE -eq `du "$i" | sed -re 's/[[:blank:]]+.*//'` ]; then echo echo Encoding $i $ENCODER $ENCODER_OPTIONS -i "$i" "$OUTPUT_PATH/`basename "$i" $RIPPER_FILES_EXT`$ENCODER_EXT" echo Encoding finished - deleting $i rm -f "$i" #tail -f $RIPPER_OUTPUT & #TAIL_PID=$! fi done else if ! kill -0 $RIPPER_PID >/dev/null 2>&1; then break fi fi sleep 2; done echo Finished rm -rf "$TMPDIR" eject $CDDRIVE