jueves, 27 de febrero de 2014

Mini aplicación bash con barra de progreso en zenity para pasar de MP3 a WAV




Hace poco quise grabar unos temas que estaban en MP3 y pasarlos a un CD de audio, para "quemarlo" en K3b indefectiblemente hay que convertir estos MP3 a WAV, para hacer esto, hay varias aplicaciones, pero yo quise hacerlo de la manera más sencilla así que buscando un poco, encontré el programa mpg321 que podemos bajarlo desde la terminal y ejecutarlo desde ahí, simplemente tecleando el comando

sudo apt-get install mpg321

o el equivalente a su distro yo lo uso así porque estoy en Linux Mint,

Para ajustar el programa a mis necesidades, osea convertir todos las pistas de MP3 A WAV realicé esta mini-aplicación en bash y le agregué un pequeño aditivo para que quede más paquete, más chulo, más copado, como quieran decirlo, lo decoré con una ventana de progreso utilizando la aplicación Zenity que viene incorporada en la mayoría de los entornos Gnome en mi caso XFCE

Zenity no es más que una herramienta para crear cajas de dialogo simples.
Si quieren aprender más sobre el uso de Zenity pueden dirigirse a este link https://help.gnome.org/users/zenity/stable/index.html.es






Explicación del código:

totalfich=$(find -iname "*.mp3" | wc -l);a=0;

en la variable totalfich guardo la cantidad total de ficheros mp3 en el directorio, (esto va a ser necesario para calcular el porcentaje de la barra de progreso)

IFS=$(echo -en "\n\b");

IFS se usa para evitar el salto de linea en los nombres de ficheros con espacios,

for i in  $(find -iname "*.mp3")
do
mpg321 -w "`basename "$i" .mp3`".wav "$i"


dentro del bucle for vuelvo a usar el comando find pero esta vez iterando cada archivo mp3 para procesarlo finalmente con la aplicación mpg321 que convertirá estos ficheros a wav

porcentaje=$(($a * 100 / $totalfich));

la variable porcentaje se encarga de calcular el estado del procedimiento
y ese porcentaje va a ser usado para alimentar el dispooler (barra de progreso).

...

Como veran es un script sencillo los detalles sobre uso de zenity o mpg321 pueden averiguarlo con el comando man o con nuestro amigo Google

Qué no hace el programa:
Al crear los archivos wav no borra los archivos mp3 originales asi que no hay que preocuparse por eso,
Lamentablemente no tengo demasiado tiempo para agregar un explorador de directorios,
tampoco normaliza el audio al pasarlo a wav.

Posibles mejoras:
espero les sea útil, y puedan mejorarlo agregándole por ejemplo un explorador de archivos, un sonido de notificación, o lo que se les ocurra.

Uso:
guardamos el script en un archivo con extensión .sh (por ej podria llamarse mp32wav.sh) le damos permiso de ejecución y lo colocamos adentro de la carpeta donde tengamos los temas en mp3

y ya que lo vamos a usar con entorno gráfico lo podemos ejecutar dándole doble click.

Nota: el script esta probado pero no esta libre de errores, usesé bajo su propia responsabilidad

#!/bin/bash
####################################################################
# Convierte todos los archivos .mp3 a .wav mostrando un dispooler
# Creado por Daniel Martín [ jue, 27 feb. 2014 ]
# licencia GNU GPL 2.0
# versión 1.0.0
# https://www.facebook.com/pages/Taller-de-Scripts/199500890074622
####################################################################
totalfich=$(find -iname "*.mp3" | wc -l);a=0;
IFS=$(echo -en "\n\b");
(
for i in  $(find -iname "*.mp3")
do
mpg321 -w "`basename "$i" .mp3`".wav "$i";
let a=a+1;
porcentaje=$(($a * 100 / $totalfich));
echo $porcentaje;
echo "# Convirtiendo MP3 a WAV\n $porcentaje% completado $a de $totalfich" ;
done
) |
zenity --progress --auto-close --auto-kill
zenity --info \
     --text="Conversion MP3 a WAV finalizada." 
Reacciones:

0 comentarios: