====COMO PASAR ARCHIVOS WMA DE TODO UN DISCO A ARCHIVOS OGG DE CADA TRACK=== PASAR DE WMA A WAV: * Con Xine: xine -A file -H --no-logo --no-splash file:"zz top - La Grange.wma" -A file: el output de sonido es un archivo (otros posibles eran oss, alsa, esd...). -H: no video Cuando acabe de reproducir (no se oye nada, escribe al archivo xine-out.wav) quitar la ventana de controles de xine y matar el proceso en la consola con CTR+C. El invento necesita mucho espacio en disco, un archivo wma de 1,8 Mb se convierte un un wav de 38,8 Mb. No parece haber posibilidad de mandar a un archivo concreto wav (especificando su nombre). Siempre escribe en xine-out.wav, por lo que al loro no machacar unos con otros. xine -A file -H --no-logo --no-splash -pq file:"zz top - La Grange.wma" -pq: cuando el comando finaliza, sale de xine sin tener que hacer CTR+C (util para automatizar el comando). Automatizarlo: Convertir de wma a wav automaticamente todos los archivos wma de un directorio: for i in `find /home/martintxo/pruebas/garraxi/wma -maxdepth 1 -type f -name \*.wma` ; do echo $i | xine -A file -H --no-logo --no-splash -pq file:"$i";mv xine-out.wav `basename $i .wma`.wav;done Para que funcione los nombres de los archivos wma no tienen que tener espacios (es el mismo problema que no he solucionado del script de cron que controla los ficheros de programas de la radio), asi que antes de empezar quitar los espacios a todos los nombres. * Con Mplayer (mas facil y rapido): mplayer -noconsolecontrols -ao pcm:file=Kansas.wav Kansas.wma -ao pcm:file=: el ouput de audio es en formato wav y se redirige al archivo especificado (no es siempre el mismo nombre). -noconsolecontrols: para que no pueda ser parado por error desde el teclado. Automatizado: for i in `find /home/martintxo/pruebas/garraxi/SDF -maxdepth 1 -type f -name \*.wma` ; do echo $i | mplayer -noconsolecontrols -ao pcm:file=`basename $i .wma`.wav "$i";done ------------- SEPARAR LOS TRACKS DE ARCHIVOS DE TODO UN ALBUM: Separar los tracks de los archivos que son un solo archivo para el album entero con gramofile en una xterm (procesando un wav cada vez de los convertidos desde wma). Para que el procedimiento funcione el wav tiene que estar guardado a 44100 muestras/s (Hz) y si no es asi no permite cambiar nada, simplemente informa de que no puede hacer nada con el archivo. (No era el caso del ejemplo). Una forma de solucionarlo facilmente con sox es correr el comando (no parece haber problemas de calidad): sox infile(no44100).wav -r 44100 outfile(44100).wav 1. Arrancar gramofile en una terminal 2. Ir al punto "3. Locate tracks" y dar enter. Seleccionar el archivo wav a separar y pasar a la siguiente pantalla. 3. Seleccionar las settings adecuadas. Yo he probado con las por defecto y no van del todo mal en el album de Santana, pero han mejorado algo poniendo: * Global silence factor (0.1 %) : 350 * Minimal length of inter-track silence (blocks) : 10 * Number of extra blocks at track start : 4 * Number of extra blocks at track end : 6 4. A pesar de todo, no acaba de pillar bien el principio y final del track, por lo que es necesario abrir el wav con el xmms y buscar los puntos de arranque y final que ha detectado gramofile en el archivo archivo.wav.tracks. Si no son del todo adecuados modificarlos con un editor de texto en dicho archivo .tracks, mirando al cronometro de xmms. Apañar tambien, si es necesario, el numero total de tracks, y el numero del inicio y final del track. Guardar el archivo .tracks. 5. En gramofile, ir al punto "4. Process the audio signal", seleccionar el mismo archivo wav de antes, e ir a la siguiente ventana. 6. Pillar el filtro "Copy Only" de entre los availables dandole intro. Ir a los selected filters con tabulador, seleccionar los otros que haya y borrarlos dando a la tecla R. Pasar a la siguiente ventana. 7. Seleccionar un nombre para los archivos wav cortados, como por ejemplo archivo-track.wav. De esta manera, los archivos wav de cada track se llamaran archivo-track01.wav... 8. Dar a start y asi empieza el proceso de separacion. Tambien parece que habia la posibilidad de pasar cada archivo a ogg directamente desde gramofile, poniendole en este ultimo paso 7 un "nombre de archivo" del tipo `|oggenc -q 2 -c "ARTIST=zz top" -o archivo-track.ogg -`, de forma que pasara el output de gramofile al oggenc en una pipe, pero no me ha funcionado. Otra forma de separar los tracks con wavsplit (por si acaso): Escuchar el wav con xmms y apuntar minuto:segundo de la separacion de tracks. Instalar wavsplit y utilizarlo tal que asi: wavsplit CarsGreatest-CompleteEntireAlbum.wav 03:42 09:51 13:42 17:32 21:14 Los valores dados son los minutos y segundos donde mas o menos esta la mitad del silencio entre dos tracks. Otra forma de separar los tracks mas grafica (con phonoripper): Con el programa grafico phonoripper tambien se pueden separar los tracks de un archivo (ademas de grabar desde una fuente externa, normalizar el sonido y pasar los archivos a un cd de audio, por ejemplo). Tiene de bueno que representa el sonido en una onda (waveform, similar a la de audacity) a traves de la que se le puede escuchar la musica en cualquier punto, establecer los puntos de corte de manera automatica, editarlos despues manualmente... Pero este programa siempre asume que el archivo a separar en tracks es un wav grabado a 44100 muestras/s (Hz) y si no es asi no permite cambiar nada, por lo que el sonido no sale bien. La solucion tambien seria la explicada antes (sox). ------- PASAR TODOS LOS ARCHIVOS WAV DE TRACKS A OGG CON OGGENC: 1. Poner todos los archivos wav de track de un mismo album en un mismo directorio. 2. Para encodear los archivos de un dir: oggenc -b 128 -a "nombre_artista" -l "titulo_album" -t "titulo_track/track01" archivo-track01.wav -t "titulo_track/track02" archivo-track02.wav [...] -n "%a - %t.ogg" En la linea del comando hay que poner todos los nombres de los archivos archivo-trackXX.wav que tengamos en el directorio, precedidos con el titulo del track (o su numero si no se conoce). Esto crea archivos ogg para cada wav, haciendo lo siguiente: -b 128: la calidad del ogg resultante sera de media 128 kb/s. -a "nombre_artista": todos los archivos ogg resultantes tendran una etiqueta ARTIST con el nombre que le pongamos aqui. -l "titulo_album": todos los archivos ogg resultantes tendran una etiqueta ALBUM con el nombre que le pongamos aqui. -t "titulo_track/trackNN": sera la etiqueta de titulo del track que llevara el archivo resultante de encodear el wav que viene a continuacion en la linea de comandos. Si no conocemos el titulo de la cancion se puede poner track01...). archivoencuestion-track02.wav son los nombres de los archivos que vamos a encodear, se pondran tantos como archivos queramos encodear, cada uno precedido por la opcion -t anterior. -n "%a - %t.ogg": El archivo ogg resultante de encodear el wav anterior tendra de nombre "nombre-artista - titulo_track/trackNN.ogg". Otros: -N "track-number": todos los archivos ogg resultantes tendran una etiqueta track con el numero que le pongamos aqui. -n "%a-%l-%n.ogg": El archivo ogg resultante de encodear el wav anterior tendra de nombre "artista-album-tracknº.ogg". Automatizarlo: Tras separar los tracks de los wav, tenemos una estructura de dir y archivos wav tal que asi /wma/ |-> Artista-Album/ |-> Artista-Album-track.wav Hacemos un script que busca todos estos wav, separa del nombre del archivo variables para el artista, el album y el track; separa otra variable con el path completo del directorio donde esta cada wav; cambia a dicho directorio por cada archivo encontrado y por cada uno lo encodea en ogg de 128 Kb/s aprox., con etiquetas para el artista, album y track; y con nombre del ogg del tipo "artista-album-tracknº.ogg". for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do a=`echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s`; b=`echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s`; c=`echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s`; d=`echo $i | cut --delimiter="/" -f '-7' -s`; cd $d && oggenc -b 128 -a "$a" -l "$b" -N "$c" $i -n "%a-%l-%n.ogg" ;done ---------------------------------------------------- Otras pruebas de automatizacion del encodeo (para tener ejemplos): martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav -printf '%f\n'` ; do echo $i ;done Thepolice-Singles-02.wav Thepolice-Singles-01.wav TheCure-Hotpatatoes-01.wav martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` -printf '%f\n' ; do echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s;done Thepolice Thepolice TheCure martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav -printf '%f\n'` ; do echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s; echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s; echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s ;done Thepolice Singles 02 Thepolice Singles 01 TheCure Hotpatatoes 01 martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav -printf '%f\n'` ; do a=`echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s`; b=`echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s`; c=`echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s`; echo "$a + $b + $c" ;done Thepolice + Singles + 02 Thepolice + Singles + 01 TheCure + Hotpatatoes + 01 -> Pero finalmente el script no encodea porque no encuentra los archivos, dado que $i no tiene info de los directorios donde estan. Hay que quitar el -printf '%f\n'. SIN -printf: martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do echo $i ;done /home/martintxo/pruebas/garraxi/asdf/Thepolice-Singles/Thepolice-Singles-02.wav /home/martintxo/pruebas/garraxi/asdf/Thepolice-Singles/Thepolice-Singles-01.wav /home/martintxo/pruebas/garraxi/asdf/TheCure-Hotpatatoes/TheCure-Hotpatatoes-01.wav martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s;done Thepolice Thepolice TheCure martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s; echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s; echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s ;done Thepolice Singles 02 Thepolice Singles 01 TheCure Hotpatatoes 01 martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do a=`echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s`; b=`echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s`; c=`echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s`; echo "$a + $b + $c" ;done Thepolice + Singles + 02 Thepolice + Singles + 01 TheCure + Hotpatatoes + 01 martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do a=`echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s`; b=`echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s`; c=`echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s`; oggenc -b 128 -a "$a" -l "$b" -N "$c" $i -n "%a-%l-%n.ogg" ;done Abriendo con el módulo wav: WAV file reader Codificando "/home/martintxo/pruebas/garraxi/asdf/Thepolice-Singles/Thepolice-Singles-02.wav" a "Thepolice-Singles-02.ogg" a una tasa de bits media aproximada de 128 kbps (codificación VBR activada) [ 99,5%] [quedan 0m00s ] \ Codificación del fichero finalizada "Thepolice-Singles-02.ogg" Longitud del fichero: 1m 48,0s Tiempo consumido: 0m 35,5s Tasa: 3,0516 Tasa de bits media: 108,9 kb/s -> Pero esto encodea todos los archivos revueltos en el dir raiz donde se lanza el script. SACAR EL DIR SOLO PARA PODER CD'ar: martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do a=`echo $i | cut --delimiter="/" -f '-7' -s`; echo "$a";done /home/martintxo/pruebas/garraxi/asdf/Thepolice-Singles /home/martintxo/pruebas/garraxi/asdf/Thepolice-Singles /home/martintxo/pruebas/garraxi/asdf/TheCure-Hotpatatoes Y EL SCRIPT QUEDA: martintxo@fundy:~/pruebas/garraxi/asdf$ for i in `find /home/martintxo/pruebas/garraxi/asdf -type f -name \*.wav` ; do a=`echo $i | basename $i .wav | cut --delimiter="-" -f 1 -s`; b=`echo $i | basename $i .wav | cut --delimiter="-" -f 2 -s`; c=`echo $i | basename $i .wav | cut --delimiter="-" -f 3 -s`; d=`echo $i | cut --delimiter="/" -f '-7' -s`; cd $d && oggenc -b 128 -a "$a" -l "$b" -N "$c" $i -n "%a-%l-%n.ogg" ;done Abriendo con el módulo wav: WAV file reader Codificando "/home/martintxo/pruebas/garraxi/asdf/Thepolice-Singles/Thepolice-Singles-02.wav" a "Thepolice-Singles-02.ogg" a una tasa de bits media aproximada de 128 kbps (codificación VBR activada) [ 99,5%] [quedan 0m00s ] \ Codificación del fichero finalizada "Thepolice-Singles-02.ogg" Longitud del fichero: 1m 48,0s Tiempo consumido: 0m 35,2s Tasa: 3,0791 Tasa de bits media: 108,9 kb/s