Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 11 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Dom Oct 19, 2008 11:00 pm
Mensajes: 90

Nota Publicado: Mar Feb 15, 2011 12:24 pm 
Arriba  
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
 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Mar Feb 15, 2011 12:40 pm 
Arriba  
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) --

 Perfil WWW  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Feb 15, 2011 12:42 pm 
Arriba  
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 ]

 Perfil Email WWW  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Dom Oct 19, 2008 11:00 pm
Mensajes: 90

Nota Publicado: Mar Feb 15, 2011 1:19 pm 
Arriba  
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.

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Mar Feb 15, 2011 1:38 pm 
Arriba  
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) --

 Perfil WWW  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Mar Feb 15, 2011 1:56 pm 
Arriba  
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 ]

 Perfil Email WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Mar Feb 15, 2011 2:12 pm 
Arriba  
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) --

 Perfil WWW  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Dom Oct 19, 2008 11:00 pm
Mensajes: 90

Nota Publicado: Mié Feb 16, 2011 3:55 pm 
Arriba  
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.

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mié Feb 09, 2011 3:43 am
Mensajes: 326
Ubicación: /HOME

Nota Publicado: Jue Feb 17, 2011 2:52 am 
Arriba  
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) --

 Perfil WWW  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Dom Oct 19, 2008 11:00 pm
Mensajes: 90

Nota Publicado: Jue Feb 17, 2011 10:08 am 
Arriba  
Si le añado echo (sea con o sin comillas) me vuelve a dar el error de: "demasiados argumentos".

Salud.

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Abr 11, 2007 11:00 pm
Mensajes: 8550
Ubicación: tras la pantalla (...)

Nota Publicado: Jue Feb 17, 2011 5:13 pm 
Arriba  
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 ]

 Perfil Email WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 11 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO