BASH mp32wav, wav2mp3 - p/linuxeros

Iniciado por D4RIO, 21 Diciembre 2008, 16:33 PM

0 Miembros y 1 Visitante están viendo este tema.

D4RIO

Hola amigos, hoy les dejo unos escrits ( :huh:) ... es decir scripts ( :xD) para el shell de Unix, especifya saben como icamente probados en bash. Usan ffmpeg para transformar archivos mp3 a wav y viceversa.

No es nada raro, pero es util y sirve para ver a bash en accion.

Tal vez la parte más interesante es cómo usar las expansiones de variables para crear los nombres nuevos, es decir, cambiar un holahola.wav a holahola.mp3... o tal vez a alguno le interese cómo es el tema de los colores en la consola, que ahi aparece.

Como sea, si tienen preguntas haganlas. Y no me vengan con comparar BASH con BATCH!!  >:(

Compartan ambos bajo GPLv2

Código (bash) [Seleccionar]
#!/bin/bash
################################################################################
# AUTOR: Dario A. Rodriguez                                                                                                                                                       #
# Convierte los ficheros MP3 de un directorio a WAV usando ffmpeg                                                                                           #
################################################################################

if [ $# -eq 0 ]
then
  FILES=`ls --color=never ./*.mp3`;
else
  case $1 in
    "-h")
        echo "USAGE:"
        echo "  mp32wav <file1.mp3> [<file2.mp3> <file3.mp3> ...]"
        echo "      Transform all given files to WAV"
        echo "  mp32wav -f <text_file>"
        echo "      Transform all files listed in the given text file to WAV"
        echo "  mp32wav"
        echo "      Transform all the mp3 files in the directory to WAV"
        echo "      this is case sensitive (only mp3, not MP3)"
        exit 0
    ;;
    "-f")
        FILES=`cat $2`
    ;;
    *)
        FILES="$*"
    ;;
  esac
fi

for fn in $FILES
do
  noextfn=${fn%.mp3}
  newfn="${noextfn}.wav"
  echo -e "\033[1m$fn\033[0m -------> \033[1m$newfn\033[0m"
  ffmpeg -i $fn $newfn
done


Código (bash) [Seleccionar]
#!/bin/bash
################################################################################
# AUTOR: Dario A. Rodriguez                                                                                                                                                       #
# Convierte los ficheros WAV de un directorio a MP3 usando ffmpeg                                                                                           #
################################################################################

if [ $# -eq 0 ]
then
  FILES=`ls --color=never ./*.mp3`;
else
  case $1 in
    "-h")
        echo "USAGE:"
        echo "  wav2mp3 <file1.mp3> [<file2.mp3> <file3.mp3> ...]"
        echo "      Transform all given files to MP3"
        echo "  wav2mp3 -f <text_file>"
        echo "      Transform all files listed in the given text file to MP3"
        echo "  wav2mp3"
        echo "      Transform all the mp3 files in the directory to MP3"
        echo "      this is case sensitive (only wav, not WAV)"
        exit 0
    ;;
    "-f")
        FILES=`cat $2`
    ;;
    *)
        FILES="$*"
    ;;
  esac
fi

for fn in $FILES
do
  noextfn=${fn%.wav}
  newfn="${noextfn}.mp3"
  echo -e "\033[1m$fn\033[0m -------> \033[1m$newfn\033[0m"
  ffmpeg -i $fn $newfn
done
OpenBSDFreeBSD

leogtz

#1
Hola D4RIO, ya lo probe, funciona perfecto.

A mi lo que me llamo la atencion fue el uso de
  ;;
*)

Hago bastante seguido Scripts en Batch para automatizar mi sistema, pero en Bash soy totalmente nuevo.

Cita de: D4RIO en 21 Diciembre 2008, 16:33 PM


Y no me vengan con comparar BASH con BATCH!!  >:(


Tranquilo, ya me habias dejado claro la superioridad de Bash.
http://foro.elhacker.net/foro_libre/test_linux_o_windows-t230958.60.html
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

D4RIO

jaja... lo que pasa es que todos preguntan, y despues dicen "Ah!, bash es el Batch de Linux??" , y noooo.... Bueno, te explico, cada caso en bash se finaliza con ";;" y el "*)" es el caso defult.

case <variable> in
    caso1)
        <sentencias>
    ;;
    caso2)
        <sentencias>
    ;;
            .
            .
            .

    *)
        <sentencias>
    ;;
esac

OpenBSDFreeBSD