Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/04/2003, 14:21
Avatar de lical
lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 22 años, 5 meses
Puntos: 0
Script para ripear CDs

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,
__________________
lical-> Usuario registrado de Linux #254225

ZonaSiete.ORG - GNU/Linux eminentemente práctico