Ripping automatico di un CD su un lettore MP3
Da MontelLUG WIKI.
Versione del 21 apr 2005 alle 20:54 di Cdron (discussione | contributi) (→Script per il ripping automatico di un CD)
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
# !/bin/bash # Script per rippare un CD e scaricarlo su chiave USB # 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 } # 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 } #Troppi pochi argomenti if [[ $# -lt 1 ]]; then showhelp fi if [[ -n $(echo $1 | grep 'h') ]]; then showhelp fi # togli lo spazio dai delimitatori IFS=${IFS// /} # 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/* # Calcola il numero di tracce cdparanoia -Q 2> $CDLOG NTR=$( grep -B 1 'TOTAL' $CDLOG | head -n 1 | cut -c 1-3) echo $NTR # Controlla l'opzione di ricerca nel CDDB if [[ -n $(echo $1 | 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; # Rippa le tracce e le comprime in MP3 x=1 while [[ $x -le $NTR ]]; do # 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 #Monta il lettore MP3 USB=/mnt/usb if [[ -z $(mount -l | grep $USB) ]]; then mount $USB echo Lettore MP3 Montato fi; # Cancella gli MP3 eventualmente presenti echo File precedentenente nel lettore >> $CDLOG find $USB -iname '.mp3' >> $CDLOG rm -f $USB/*.mp3 rm -f $USB/*.MP3 # 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 # Copia i file MP3 nel lettore cp $TEMP/*.mp3 $USB/ fi; umount $USB # Spegne il Computer se richiesto if [[ -n $(echo $1 | grep 'p') ]]; then poweroff fi