Hace algún tiempo Ferdy puso un script por aquí para ripear CDs. Pero como yo lo perdí y no me apetecía buscarlo
aproveché la ocasión para no perder la costumbre y volver a escribir un script que hiciese lo mismo.
Así, este script tiene dos modos de operación: ripear el cd completo (filtrando la salida de cdda2wav --info, se detectará el número de pistas del CD y no habrá que introducirlo), o ripear algunas pistas:
Código:
#!/bin/bash
# cd2file.sh - Script que ripea CDs de audio
# Requiere cdda2wav, lame, oggenc
# Este script: ricardo at zonasiete.org - Ricardo Cervera (lical)
# Idea original: ferdy at ferdyx.org - Fernando Pereda (Ferdy)
# GPL Licensed.
# CONFIGURACION #
DEV=/dev/cdrom
#
function read_track()
{
NUMTRACK=$1
OUTPUTF=$2
MODE=$3
if [ $MODE = "--mp3" ]; then
cdda2wav -t "$NUMTRACK" -O wav -D "$DEV" -q -Q - 2>/dev/null | \
lame -q 2 - "$OUTPUTF".mp3 --quiet
return $?
elif [ $MODE = "--ogg" ]; then
cdda2wav -t "$NUMTRACK" -O wav -D "$DEV" -q -Q - 2>/dev/null | \
oggenc -q 4 - -o "$OUTPUTF".ogg -Q
return $?
fi
}
function get_num_tracks()
{
SAL=`cdda2wav -J -D "$DEV" 2>&1`
NUMTRACKS=`echo $SAL | sed -e 's/.*tracks:\([0-9]*\),.*/\1/g'`
echo $NUMTRACKS
}
function uso()
{
echo "$0: Ripea CDs"
echo "---------"
echo "El primer argumento debe ser \"--mp3\" o bien "
echo "\"--ogg\", indicando asi el formato de salida."
echo " "
echo "El segundo argumento debe ser \"--fullcd\" para"
echo "ripear el CD completo. En ese caso ya estaria todo"
echo "Si pretendes ripear pistas sueltas, debes ingresar"
echo "como segundo argumento \"--tracks\". A continuacion"
echo "se te pedira que ingreses los numeros de pista"
echo "separados por espacios"
echo " "
echo "Ejemplos:"
echo " "
echo "$0 --ogg --fullcd"
echo " "
echo "$0 --mp3 --tracks"
echo "1 3 8 11"
}
## FLOW
if [ "$1" = "--mp3" ]; then
MOD=$1
elif [ "$1" = "--ogg" ]; then
MOD=$1
else
uso
exit 1
fi
echo "Espere, leyendo informacion del disco..."
N=`get_num_tracks`
echo "El CD tiene $N pistas"
sleep 3
case $2 in
--fullcd)
TRACK_ACT=1
while [ $TRACK_ACT -le $N ]; do
NAME=$TRACK_ACT
if [ $NAME -lt 10 ]; then
NAME="0$NAME"
fi
echo "Extrayendo pista $NAME ..."
read_track $TRACK_ACT $NAME $MOD
TRACK_ACT=$[$TRACK_ACT+1]
done
rm -f audio*.inf
echo "Hecho."
;;
--tracks)
echo "Introduzca los numeros de pista: "
read LIST
echo "Siguiendo..."
for i in $LIST; do
if [ $i -gt $N ]; then
exit 1
fi
NAME=$i
if [ $NAME -lt 10 ]; then
NAME="0$NAME"
fi
echo "Extrayendo pista $NAME ..."
read_track $i $NAME $MOD
done
rm -f audio*.inf
echo "Hecho."
;;
*)
uso
exit 1
;;
esac
Espero que sea útil. Claro está, se admiten mejoras
Un saludo,