Ripping automatico di un CD su un lettore MP3

Da MontelLUG.
Versione del 21 apr 2005 alle 21:52 di Cdron (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Script per il ripping automatico di un CD

Si tratta di uno script per automatizzare il ripping di un CD su una chiave USB. Visto che lo uso per avere il lettore USB carico al mattino per andare al lavoro, è prevista anche una opzione per spegnere il PC in automatico una volta finito il lavoro. In pratica lo script esegue le seguneti operazioni:

  • Raccoglie le informazioni sul CD (numero di tracce) e, se richiesto, scarica i dati dal CDDB
  • Rippa una ad una le tracce in una cartella temporanea (/tmp/newCD di default)
  • Converte le tracce in MP3
  • Monta, se non lo è già, il lettore MP3
  • Elimina le eventuali tracce MP3 già presenti nel lettore
  • Copia le tracce compresse nel lettore
  • Smonta il lettore e, se richiesto spegne il PC

La sintassi è visibile con il comando ./cd2mp3usb -h

Dipendenze: per eseguire lo script, sono necessari i seguenti pacchetti:

  • cdparanoia, per il ripping dei CD in WAV
  • lame, per la compressione MP3
  • cddb.pl, per interrogare il CDDB (è un pacchetto che si trova nella maggior parte delle distribuzioni)
  • discid, piccolo programma in C che ricava l'ID del CD audio, reperibile su sourceforge


  1.  !/bin/bash
  1. Script per rippare un CD e scaricarlo su chiave USB
  2. Autore: CD-RON

function showhelp(){ echo "Script per il ripping dei CD su chiave USB" echo echo Sintassi: echo echo -e "\tcd2mp3usb [phlc] Artista Album" echo echo "Opzioni:"; echo -e " c \t Cerca i titoli nel CDDB" echo -e " l \t Non cerca nel CDDB, usa i parametri da riga di comando" echo -e " p \t Spegne il computer dopo aver terminato" echo -e " h \t Mostra questo help" echo echo "Artista e album possono contenere spazi, se inclusi tra apici" exit 0 }

  1. Funzione che esegue le funzioni di ripping

function rippa(){ echo $NOME cdparanoia -- $x $NOME.wav lame -h -b 128 $NOME.wav $NOME.mp3; rm -f $NOME.wav }

  1. Troppi pochi argomenti

if $# -lt 1 ; then showhelp fi

if grep 'h') ; then showhelp fi

  1. togli lo spazio dai delimitatori

IFS=${IFS// /}

  1. Inizializza la cartella temporanea di ripping

TEMP=/tmp/newCD CDLOG=$TEMP/CD-ripping.log if !(test -d $TEMP); then mkdir $TEMP; fi rm -f $TEMP/*

  1. Calcola il numero di tracce

cdparanoia -Q 2> $CDLOG NTR=$( grep -B 1 'TOTAL' $CDLOG | head -n 1 | cut -c 1-3) echo $NTR

  1. Controlla l'opzione di ricerca nel CDDB

if grep 'c') ; then # Verifica che sia posssibile connettersi al server if !(ping -c 1 freedb.freedb.org >> $CDLOG); then echo "Impossibile connettersi al database" >> $CDLOG echo "Inserisco i dati di default nei nomi" >> $CDLOG if $# -eq 3 ; then ARTISTA=$2 ALBUM=$3 TRACCIA="" CDDBOK=1 else ARTISTA="Unknown" ALBUM="NoAlbum" TRACCIA="" CDDBOK=1 fi; else # Trova i dati cel CD nel CDDB cddb.pl -s # Recupera i dati dal file CDDB ID=$(discid | cut -c 1-8) FILEIN=$(find /tmp/xmcd -iname $ID) cp $FILEIN $TEMP/CDDB-output.txt grep 'DTITLE=' $TEMP/CDDB-output.txt | cut -c 8- | cut -d / -f1 grep 'DTITLE=' $TEMP/CDDB-output.txt | cut -c 8- | cut -d / -f2 | cut -c 2- CDDBOK=0 fi; else # Non e' stata data l'opzione di cercare in CDDB if $# -eq 3 ; then ARTISTA=$2 ALBUM=$3 TRACCIA="" CDDBOK=1 else ARTISTA="Unknown" ALBUM="NoAlbum" TRACCIA="" CDDBOK=1 fi; fi;


  1. Rippa le tracce e le comprime in MP3

x=1 while $x -le $NTR ; do

  1. Crea il nome file

if $CDDBOK -eq 0 ; then TRACCIA=-$(grep TTITLE$(($x-1)) | cut -d = -f2); fi if test $x -le 9; then NOME=$TEMP/$ARTISTA-$ALBUM-0$x$TRACCIA else NOME=$TEMP/$ARTISTA-$ALBUM-$x$TRACCIA fi; rippa x=$(($x+1)) done

  1. Monta il lettore MP3

USB=/mnt/usb if grep $USB) ; then mount $USB echo Lettore MP3 Montato fi;

  1. Cancella gli MP3 eventualmente presenti

echo File precedentenente nel lettore >> $CDLOG find $USB -iname '.mp3' >> $CDLOG rm -f $USB/*.mp3 rm -f $USB/*.MP3

  1. Controlla che lo spazio sia sufficiente

SPAZIO=$(df $USB | grep $USB | cut -c 41-51) DIM=$(du -sk $TEMP | cut -f 1) if $DIM -ge $SPAZIO ; then echo File MP3 troppo grandi! >> $CDLOG exit 1 else

  1. Copia i file MP3 nel lettore

cp $TEMP/*.mp3 $USB/ fi; umount $USB

  1. Spegne il Computer se richiesto

if grep 'p') ; then poweroff fiInsert non-formatted text here