| Autor |
Mensaje |
elmohino

Forista Menor
Registrado: Dom Oct 19, 2008 11:00 pm Mensajes: 90
|
 Publicado: Mar Feb 15, 2011 12:24 pm |
|
Hola a todos/as. Me he creado este sencillo script en bash para poder volcar emisiones en streaming o en descarga codificándolas automáticamente a MP3: Código: #!/bin/bash
# Este script sirve para volcar y codificar a MP3 una emisión en streaming o en descarga de audio o vídeo # CÓMO USAR: ./mp3enc2 [URL_de_streaming] [bitrate] [frecuencia{8|11.025|12|16|22.05|24|32|44.1|48}]
# NOTA: NO es posible usar: cat "[nombre_lista]" | while read URL; do ./mp3enc2 .....
mkfifo /tmp/MP3
KEY=$(echo $1 | cut -d'/' -f3) NOW=$(date +%F-%H.%M.%S)
lame -h -b $2 --resample $3 /tmp/MP3 "$KEY"_"$NOW".mp3 &
mplayer -novideo $1 -ao pcm:file=/tmp/MP3
rm /tmp/MP3
mp3gain -c -r -d 5.0 "$KEY"_"$NOW".mp3 Bien. Si invoco el script con solamente una URL, p.e.: Código: ./mp3enc2 http://www.ivoox.com/cofrentes-accion-greenpeace-15-02-11-1-conexion_md_535136_1.mp3 32 44.1 el volcado y codificado a 32kbps con 44100 Hz en MP3 es correcto. El problema viene cuando intento pasarle al script un archivo de texto con un listado de URL's a volcar de la siguiente manera: Código: cat [archivo_texto] | while read URL; do ./mp3enc2 $URL 32 44.1; done De la anterior manera solamente se me vuelca la primera URL de la lista y el script se detiene. No entiendo qué es lo que falla. Con otros scripts no me pasa. Muchas gracias. Salud.
Última edición por elmohino el Mar Feb 15, 2011 1:13 pm, editado 1 vez en total
|
|
|
|
 |
victorhck

Forista Medio
Registrado: Mié Feb 09, 2011 3:43 am Mensajes: 326 Ubicación: /HOME
|
 Publicado: Mar Feb 15, 2011 12:40 pm |
|
Hola! En [nombre_lista] estan las URL's que quieres descargar? Y cada una está en una línea? Puedes saber el número de lineas que tiene el fichero [nombre_lista] con: Código: lineas=$(wc -l $HOME/ruta/nombre_lista.txt) y despues con un while ir linea por linea metiendo en una variable el nombre de la URL Código: while [ $lineas != 0 ] do archivo=$(head -$lineas $HOME/ruta/nombre_lista.txt | tail -1) .... let lineas-- done
Asi tengo yo un proyecto de script que recorre un archivo con nombres de archivos (valga la redundancia) Saludos...
_________________ Registered user: #528067 openSUSE 12.1 KDE Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1) Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo. Algunos de nosotros simplemente hemos ido más lejos. Richard Dawkins -- Visita mi blog (victorhckinthefreeworld) --
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Mar Feb 15, 2011 12:42 pm |
|
prueba con esta sintaxis: Código: for LINEA in $(cat fichero); do loquesea ;done 
_________________ #446716
--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me... (from comp.os.linux.misc) [ DNFD ] - [ F4A ] - [ dotfiles ]
|
|
|
|
 |
elmohino

Forista Menor
Registrado: Dom Oct 19, 2008 11:00 pm Mensajes: 90
|
 Publicado: Mar Feb 15, 2011 1:19 pm |
|
Gracias, amiga niky45: FUNCIONA su método. Muchas gracias. Sr. victorhck, gracias también por su respuesta. Sí, el [nombre_lista] lleva las URL's una por una en cada línea. Pero he modificado mi script de la siguiente manera: Código: #!/bin/bash
# Este script sirve para volcar y codificar a MP3 una emisión en streaming o en descarga de audio o vídeo # CÓMO USAR: ./mp3enc2 [URL_de_streaming] [bitrate] [frecuencia{8|11.025|12|16|22.05|24|32|44.1|48}]
# NOTA: NO es posible usar: cat "[nombre_lista]" | while read URL; do ./mp3enc2 .....
mkfifo /tmp/MP3
lineas=$(wc -l $1)
while [ $lineas != 0 ]
do archivo=$(head -$lineas $1 | tail -1)
KEY=$(echo $archivo | cut -d'/' -f3) NOW=$(date +%F-%H.%M.%S)
lame -h -b $2 --resample $3 /tmp/MP3 "$KEY"_"$NOW".mp3 &
mplayer -novideo $archivo -ao pcm:file=/tmp/MP3
mp3gain -c -r -d 5.0 "$KEY"_"$NOW".mp3
done
rm /tmp/MP3 y me devuelve el error: Código: usuario@usuario-desktop:~/Escritorio/bbb$ ./mp3enc2 des.txt 32 44.1 ./mp3enc2: línea 13: [: demasiados argumentos usuario@usuario-desktop:~/Escritorio/bbb$ Salud.
|
|
|
|
 |
victorhck

Forista Medio
Registrado: Mié Feb 09, 2011 3:43 am Mensajes: 326 Ubicación: /HOME
|
 Publicado: Mar Feb 15, 2011 1:38 pm |
|
No decrementabas 1 la variable lineas para que el while recorriera todos los archivos con el comando Código: let lineas-- No sé si tendrá que ver... De todas formas me alegro que resolvieras el problemilla. Saludos...
_________________ Registered user: #528067 openSUSE 12.1 KDE Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1) Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo. Algunos de nosotros simplemente hemos ido más lejos. Richard Dawkins -- Visita mi blog (victorhckinthefreeworld) --
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Mar Feb 15, 2011 1:56 pm |
|
victorhck escribió: No decrementabas 1 la variable lineas para que el while recorriera todos los archivos con el comando Código: let lineas-- No sé si tendrá que ver... De todas formas me alegro que resolvieras el problemilla. Saludos... es importante, pero no para el error (aka, sin el let lineas-- no hace lo que queremos, pero el error no viene de ahi) el error esta en la linea 13 que es la del condicional. sin embargo, si en el script estan los espacios como en el codigo de aqui, no veo el error. tal vez.. metiendo las cosas entre comillas funcione?? Código: while [ "$lineas" != "0" ] ;do ... no obstante, liarse con let, y con tanto head y tail, me parece complicarse innecesariamente la vida, cuando con un simple cat se solcuiona.  (pero no obstante, quiero saber que es el error que esta dando. porque yo sigo sin entender como es que no ve la condicional... si esta correcta  )
_________________ #446716
--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me... (from comp.os.linux.misc) [ DNFD ] - [ F4A ] - [ dotfiles ]
|
|
|
|
 |
victorhck

Forista Medio
Registrado: Mié Feb 09, 2011 3:43 am Mensajes: 326 Ubicación: /HOME
|
 Publicado: Mar Feb 15, 2011 2:12 pm |
|
en mi script aunque lo utilizo para otra cosa (que de momento no se como hacerlo  ) si que funciona el while sin comillas y sin error... Tampoco veo donde puede dar el problema...
_________________ Registered user: #528067 openSUSE 12.1 KDE Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1) Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo. Algunos de nosotros simplemente hemos ido más lejos. Richard Dawkins -- Visita mi blog (victorhckinthefreeworld) --
|
|
|
|
 |
elmohino

Forista Menor
Registrado: Dom Oct 19, 2008 11:00 pm Mensajes: 90
|
 Publicado: Mié Feb 16, 2011 3:55 pm |
|
Buenas noches de nuevo, damas y caballeros. Bien. He añadido las modificaciones que me sugieren Vds. así de esta manera: Código: #!/bin/bash
# Este script sirve para volcar y codificar a MP3 una emisión en streaming o en descarga de audio o vídeo # CÓMO USAR: ./mp3enc2 [URL_de_streaming] [bitrate] [frecuencia{8|11.025|12|16|22.05|24|32|44.1|48}]
# NOTA: NO es posible usar: cat "[nombre_lista]" | while read URL; do ./mp3enc2 .....
mkfifo /tmp/MP3
lineas=$(wc -l $1)
while [ "$lineas" != "0" ]
do archivo=$(head -$lineas $1 | tail -1)
KEY=$(echo $archivo | cut -d'/' -f3) NOW=$(date +%F-%H.%M.%S)
lame -h -b $2 --resample $3 /tmp/MP3 "$KEY"_"$NOW".mp3 &
mplayer -novideo $archivo -ao pcm:file=/tmp/MP3
mp3gain -c -r -d 5.0 "$KEY"_"$NOW".mp3
let lineas--
done
rm /tmp/MP3 Y el script comienza a volcar el streaming, pero crea un bucle infinito que vuelca sin parar la última URL de la lista...Salud y gracias por su ayuda.
|
|
|
|
 |
victorhck

Forista Medio
Registrado: Mié Feb 09, 2011 3:43 am Mensajes: 326 Ubicación: /HOME
|
 Publicado: Jue Feb 17, 2011 2:52 am |
|
|
Prueba con el While sin comillas (a mi me funciona sin comillas). Puedes poner un echo de la varible $lineas como control para ver que valores va tomando. Saludos...
_________________ Registered user: #528067 openSUSE 12.1 KDE Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz - 4 Gb Ram - nVidia [GeForce 9400 GT] (rev a1) Todos somos ateos con respecto a la mayoría de los dioses en los que las diversas sociedades han ido creyendo. Algunos de nosotros simplemente hemos ido más lejos. Richard Dawkins -- Visita mi blog (victorhckinthefreeworld) --
|
|
|
|
 |
elmohino

Forista Menor
Registrado: Dom Oct 19, 2008 11:00 pm Mensajes: 90
|
 Publicado: Jue Feb 17, 2011 10:08 am |
|
|
Si le añado echo (sea con o sin comillas) me vuelve a dar el error de: "demasiados argumentos".
Salud.
|
|
|
|
 |
niky45

Forista Ancestral
Registrado: Mié Abr 11, 2007 11:00 pm Mensajes: 8550 Ubicación: tras la pantalla (...)
|
 Publicado: Jue Feb 17, 2011 5:13 pm |
|
elmohino escribió: Si le añado echo (sea con o sin comillas) me vuelve a dar el error de: "demasiados argumentos".
Salud. puedes pegar el codigo?? a una condicional no le puedes decir [ echo $var == valor ], le tienes que decir [ $(echo $var) == valor ]. y aun asi es redundante. lo logico es [ $var == valor ] *pongo igual por poner algo. 
_________________ #446716
--Not me, guys. I read the Bash man page each day like a Jehovah's Witness reads the Bible. No wait, the Bash man page IS the bible. Excuse me... (from comp.os.linux.misc) [ DNFD ] - [ F4A ] - [ dotfiles ]
|
|
|
|
 |
|
|
|