Hoy Fer nos cuenta cómo grabar programas de radio en mp3 con linux, una genial idea para grabar esos programas que no siempre podemos escuchar en directo (concretamente Arus en la 100 que empieza a las 6:00 de la mañana).
Hablando con fer hemos comentado la posibilidad de mejorar ligeramente el script, un pequeño problema que tiene es que hay que grabar primero el asf, luego convertir a wav (que ocupa horrores!!!!) y finalmente convertirlo a mp3. Otro pequeño inconveniente es que realmente si el mplayer es capaz de reproducir el stream de audio, ¿No podrÃa bastar para hacerlo todo?. Finalmente la respuesta es casi-sÃ, con el MPlayer y Lame (que suele ser una dependencia de mencoder) podemos:
¡¡¡ Grabar en MP3 al vuelo directamente del MPlayer !!!
después de darle unas cuantas vueltas el script resultante queda asÃ.
update: el script lo puedes bajar de aquÃ
#!/bin/bash
# Script para la grabacion de un programa de radio por internet.
# Idea original de fer (www.tabernadelturco.com)
#
# Pplux (www.pplux.com)
#emisora
emisora=mms://live.c100.edgestreams.net/reflector:34743
#numero de minutos
minutos=1
#Nombre del programa
programa=arus
#Directorio donde grabarlo ('.' = actual)
dir=.
# Nombre del fichero
nombre=${dir}/${programa}_`date +%y_%m_%d`.mp3
#------------------------------------------------#
#Creamos un pipe
[ -e /tmp/radio_pipe ] && rm /tmp/radio_pipe
mkfifo /tmp/radio_pipe
#Lame
lame /tmp/radio_pipe $nombre 2>/dev/null 1>/dev/null &
#mplayer
mplayer $emisora -cache 32 -ao pcm:file=/tmp/radio_pipe 2>/dev/null </dev/null &
#Esperamos el tiempo marcado
sleep $(($minutos * 60))
#acabamos con el mplayer
kill %2
#borramos el pipe
rm /tmp/radio_pipe
Cosas raras del script para los más avispados:
- Como MPlayer no puede sacar el audio por la salida estándar (lo que nos permitirÃa usar Lame directamente con un pipe entre comandos) utilizamos mkfifo para crear un pipe con nombre. La función es la misma que el pipe entre comandos, solo que con un fichero intermedio
- Para que MPlayer pueda funcionar en background hay que usar el <dev/null para que no de problemas.
- Primero lanzamos Lame y luego MPlayer, ¿No deberÃa ser al revés? Lame es capaz de quedarse esperando a recibir sonido por el fichero o por la entrada estandar, y además es más rápido que el MPlayer produciendo sonido(si no, no se podrÃa hacer al vuelo). MPlayer podrÃa dar problemas si se lanza primero a escribir sobre un pipe del que no está esperando leer nadie.
- kill %2 ¿Qué es eso? , Tiene que ver con la gestión de tareas(jobs) del BASH (mirar man bash, para más info). Cuando lanzamos tareas en background con el bash ocurre esto:
pplux$ commando & [1] 14592
El [1] es el número de tarea, y el 14592 el PID (identificador de proceso) del commando lanzado en background. Una de las muchas opciones de control de tareas que podemos realizar es precisamente la de mandar señales a las tareas, eso se realiza con kill y para mandar una señal a una tarea (sin necesidad de conocer su PID) podemos usar %n donde n es el nuestro número de la tarea. En este caso como hemos lanzado el MPlayer en segundo lugar en background con %2 le mandamos a él la señal.
- ¿Y hace falta lanzar el MPlayer en background realmente? Jejeje, pues no lo se, pero no he encontrado la forma de decirle al MPlayer que lea del stream de audio durante x minutos y luego pare, asà que la opción es lanzarlo en backround, hacer un sleep del tiempo necesario y luego pararlo mandándole una señal (que por defecto kill manda la señal de parar ordenadamente)
- $((5+5)) esta sintáxis de doble paréntesis permite realizar operaciones matemáticas en el BASH, muy útil para multiplicar el número de minutos $minutos por 60 segundos para pasárselo al sleep (que solo entiende de segundos)
Todo lo demás, de cómo usar el cron se puede leer en el blog de fer… Para otro post queda ese aspecto interesante del cron que es poder programar tareas a nivel de usuario y no como root siempre.
PpluX | 04-Sep-05 at 7:30 pm | Permalink
Según la versión que tengáis de MPlayer puede ser que donde pone:
tengáis que poner:
Fernando | 04-Sep-05 at 8:51 pm | Permalink
Te ha quedado mucho más compacto, la verdad
Voy a actualizar mis post.
La Taberna del Turco » Crear tus podcast de programas de radio automáticamente en Linux | 04-Sep-05 at 10:03 pm | Permalink
[...] Actualización En Sopa de Ganso podéis encontrar un script más sofisticado, y es que donde hay nivel, hay nivel. El enlace es este: Grabando de la radio mp3 al vuelo. [...]
kanuso | 05-Sep-05 at 5:46 pm | Permalink
Si en lugar de usar mplayer usais mencoder, puede que podais usar el parámetro “-endpos” para el tiempo de grabación y “-oac lavc –lavcopts acodec:mp3″ o “-oac lame” para comprimir directamente a mp3. Asà os ahorrais crear pipes y jugar con los jobs de bash, y de paso el script es multiplataforma
.
PpluX | 05-Sep-05 at 6:45 pm | Permalink
me encantarÃa poder usar mencoder
, peeero no hemos (varios, yo entre ellos) conseguido que se pueda usar sin stream de video. Si lo consigues, avisa
Tessonec | 15-Sep-05 at 7:09 pm | Permalink
Estoy como Pplux, si no tiene stream de video no he podido. Este script es buenÃsimo. Está bueno que se pueda usar también con protocolo rtsp://. Alguien sabe como bajar el rtsp:// pelado (es decir hacer un dump del stream)?
Carlos | 10-Oct-05 at 11:03 pm | Permalink
Muy bueno el script
Voy a ver si consigo modificarlo para que grabe en OGG-Vorbis.
jao | 11-Oct-05 at 12:13 am | Permalink
Si no funciona, a parte de comprobar que estén instalados los programas que necesita (mplayer, lame…), se puede probar a cambiar la ruta donde se crea la tuberÃa (/tmp/) por otra con mejor acceso (“.” por ejemplo).
carpelo | 12-Ene-06 at 10:07 am | Permalink
Yo el problema que tengo es que el mplayer se queda en “Cache fill: xx%” y subre muuuuuuy lentamente, y eso que simplemente querÃa probarlo con 1 minuto. O sea, que pasa el minuto y sigue subiendo el cache fill. Sabéis por qué puede ser?
Sin embargo, pasandole al Kaffeine la direccion mms, se pone a reproducir en 5 segundos, pero no se guardar a un flujo…
carpelo | 12-Ene-06 at 1:34 pm | Permalink
Por cierto, ahora que caigo: no hay “&” al final de la linea de mplayer? Lo he copiado tal cual y no aparece, y acabo de leer que estaba en segundo plano… Claro, el mplayer se quedaba abierto y el kill se cargaba el lame
carlos | 12-Ene-06 at 2:58 pm | Permalink
Solucionado:
))
aparte del “&” he añadido “- nocache” como opción a la linea del mplayer
PpluX | 13-Ene-06 at 9:18 am | Permalink
sà cierto, faltan cosas en el script que no se ve por culpa de que al actualizar el wordpress se ha perdido el plugin que coloreaba (y arreglaba los problemas de visualización) del código. Sorry!!
Y sÃ, lo de -nocache ayuda, pero claro algo de cache siempre viene bien (se puede ajustar el tamaño de la cache, y creo que estaba pero el wordpress se lo ha zampao)
Intentaré arreglarlo cuando pueda.
antonio | 19-Ene-06 at 5:00 pm | Permalink
¿Sabe alguien como oir y sobreo todo grabar m80 ahora?
Parece que la url ha cambiado, ahora parece ser:
http://www.los40.com/nuevo_player/player_radio_listen_m80.html
por lo menos, poniendo eso en el ReplayRadio en windows funciona, y en el internet explorer también, pero en el firefox (en linux) no.
tupacamaru | 30-Ene-06 at 5:53 pm | Permalink
Entonces el scrip este funciona?
——————–
PpluX Jan 13th, 2006 at 9:18 am
sà cierto, faltan cosas en el script que no se ve por culpa de que al actualizar el wordpress se ha perdido el plugin que coloreaba (y arreglaba los problemas de visualización) del código. Sorry!!
Y sÃ, lo de -nocache ayuda, pero claro algo de cache siempre viene bien (se puede ajustar el tamaño de la cache, y creo que estaba pero el wordpress se lo ha zampao)
Intentaré arreglarlo cuando pueda.
tupacamaru2 | 31-Ene-06 at 1:28 pm | Permalink
Copiado tal cual y añadiendo un & al mplayer me crea un fichero llamado audiodump.wav, el lame se arranca pero no hace su tarea.
Aquà hay otro script aunque parece que el mplayer era más viejo y las opciones del mplayer son distintas:
http://www.jayraldyn.net/index.php?zona=tekky/grabarradio.html
PpluX | 31-Ene-06 at 1:31 pm | Permalink
Perdona! estoy un poco liado ahora mismo para comprobarlo, déjame que lo mire esta tarde o mañana y dejo colgado el script en el servidor para que no haya ningún tipo de duda.
Un saludo y perdona por la espera.
Irrati programak grabatzen - TOLON | 08-Feb-06 at 6:51 pm | Permalink
[...] Nik probak 5 minutuko emisioakin egin ditut. Gabaz ordu erdi edo ordubeteko saioa grabatuko det. Honi buruz beste artikulu on bat hemen [...]
icarus | 18-Abr-06 at 12:32 am | Permalink
creo que he logrado echar andar el script con la opcion de conversión directa desde el mplayer:
#emisora
emisora=mms://sistemachiapaneco.dyn.nu:8000/listen.pls
#numero de minutos
minutos=120
#Nombre del programa
programa=XHTGU
#Directorio donde grabarlo (‘.’ = actual)
dir=.
# Nombre del fichero
nombre=${dir}/${programa}_`date %y_%m_%d_%H:%M`.mp3
#————————————————#
#mplayer (el demuxer para forzar grabacion a MP3
mplayer -demuxer 17 -dumpaudio -dumpfile $nombre -cache 200 -playlist $emisora 2>/dev/null&
#Esperamos el tiempo marcado
sleep $(($minutos * 60))
#acabamos con el mplayer
kill %1
# y eso serÃa todo…..
PpluX | 10-Jun-06 at 8:47 pm | Permalink
Después de mucho tiempo he depurado el script que se habÃa mal-formado al editar la noticia y he dejado un enlace permamente al fichero mplayer-al-vuelo.sh
Un saludo.
Estribiyo | 01-Ago-06 at 12:52 am | Permalink
Me he permitido el lujo de modificar el script para que en conjuncion con el cron me permita grabar cualquier programa, de la duración que sea, permitiendo poner el nombre del mismo al grabarlo en el directorio que deseemos.
Espero que a alguien le sirva de ayuda, un saludo.
———————8
# Radio Galega: mms://85.91.64.23/RadioGalega
# Onda Cero: mms://a562.l507241195.c5072.e.lm.akamaistream.net/D/562/5072/v0001/reflector:41195
if [ $# != "3" ]
then
echo “Sintaxis: radio.sh ”
exit
fi
#emisora
emisora=$1
#numero de minutos
minutos=$2
#Nombre del programa
programa=$3
#Directorio donde grabarlo (?.? = actual)
dir=/mnt/temporais
pipe=${dir}/${programa}_pipe
# Nombre del fichero
nombre=${dir}/${programa}_`date +%y%m%d`.mp3
#????????????????#
#Creamos un pipe
[ -e $pipe ] && rm $pipe
mkfifo $pipe
#Lame
lame $pipe $nombre 2>/dev/null 1>/dev/null &
#mplayer
mplayer $emisora -cache 64 -ao pcm:file=$pipe 2>/dev/null
Estribiyo | 01-Ago-06 at 12:54 am | Permalink
Bueno, acabo de intentar subir el script, pero los filtros lo han jodido completamente, si a alguien le interesa, que me avise y se lo mando. Hasta otra
Manuel | 06-Dic-06 at 4:33 am | Permalink
Comentario poco constuctivo y desesperado:
¡Por qué leches no me graba ningún mp3 cuando lo lanzo desde cron!
Este es el problema.
Uso una ubuntu edgy… le he dado permisos a todo dios para escribir en la carpeta etc etc
Si alguien me puede ayudar, lo agradecerÃa
Manuel | 06-Dic-06 at 4:36 am | Permalink
perdón, se me olvidaba comentar que la tuberÃa sà que la crea y que en el log de sistema aparece lanzado el proceso…
Me “Funciona”, pero sólo a medias.
Manuel | 06-Dic-06 at 7:38 am | Permalink
Bueno, parece que al fin y al cabo la cosa es culpa de la Kubuntu edgy, de kde o de cron:
La cuestión es que si reinicio cron desde el panel de control de kde (como administrador) la cosa funciona, sinembargo si lo hago desde la consola (“sudo /etc/init.d/cron restart”)
No funciona…
¿Se os ocurre algo?
Manuel | 07-Dic-06 at 2:36 am | Permalink
SOLUCIONADO
No sé lo que habrá sido, pero creo que está relacionado con mailx… y ¿por qué creo esta tonterÃa?…
Pues porque lo instalé (no se me instaló por defecto) para ver los errores que me daba, y aunque no me daba ningún error… RESULTA QUE EN REALIDAD NO HABIA ERROR, SE HABIA ARREGLADO…
No lo entiendo, ¿es mailx necesario para que esto funcione?
Saludos.
PpluX | 07-Dic-06 at 10:33 am | Permalink
Hola Manuel,
, si me pasara a mi sospecharÃa del orden en el que se lanzan las tareas de cron o de ver si cuando se inicializa el cron al arrancar también se intenta lanzar el script y eso lo bloquea, o… ni idea, básicamente para mi tienes un poltergeist en el ordenador XD.
no tengo ni la más remota idea de qué te puede estar pasando
Un saludo
alejandro | 05-Ago-07 at 12:28 pm | Permalink
Fantástico el script
Luis Becerra | 25-Sep-07 at 1:21 am | Permalink
Creo que una forma facil de hacerlo es instalar el programa StreamRipper (esta en los repositorios de ubuntu) e instalar la interfaz de KDE KStreamRipper.
luego le das añadir, pones la direccion http que se encuentra en el archivo pls (lo ves abriendo con cualquier editor de texto el archivo pls) le pones un nombre y comentario y pulsas ok.
luego inicias a rippear y el te baja los archivos en una carpeta donde le dijiste con sus IDTags en archivos separados.
ojala les sirva.
Luis
debian-ar.org » Blog Archive » Como escuchar radios en debian | 27-Mar-08 at 4:36 am | Permalink
[...] pplux Posted in Aplicaciones, General | Leave a [...]
Fede | 05-Feb-09 at 11:34 am | Permalink
Me pasaba igual que a Manuel, en Ubuntu Intrepid, funcionaba perfectamente desde consola, pero desde cron no, aunque el script se lanzaba correctamente (creaba pipe, borraba pipe, y la salida del ps se veÃan ambos procesos, lame y mplayer), no dejaba el MP3 en el disco. Probé muchas cosas. Finalmente, instalé el mailx, como decÃa él, y… comenzó a funcionar a la perfección. Cosas raras… ¿qué estará pasando?
walter_manriquez_gebert ¿como grabar una radio online hacia un mp3? en Linux en modo comando ? | 01-Dic-09 at 1:30 pm | Permalink
[...] (con vlc) y otras visuales (con streamripper), pero finalmente me quedé con la mostrada en este artículo.La idea es grabar el programa en el que participo los Miércoles "Aqui Estamos Los Que [...]
Walter Manriquez Gebert ¿como grabar una radio online hacia un mp3 en Linux en modo comando ? | 01-Dic-09 at 2:31 pm | Permalink
[...] (con vlc) y otras visuales (con streamripper), pero finalmente me quedé con la mostrada en este artículo.La idea es grabar el programa en el que participo los Miércoles "Aqui Estamos Los Que [...]
walter manriquez gebert ¿como grabar una radio online en linux ubuntu hacia un mp3? | 27-Mar-10 at 2:30 am | Permalink
[...] Me costó llegar a la solución, pero siempre gracias al "tio google" lo logré (ya oh! tambien gracias a ubuntu linux). Encontré varias soluciones, algunas manuales (con vlc) y otras visuales (con streamripper), pero finalmente me quedé con la mostrada en este artículo. [...]
como se juega al poker | 18-Ago-10 at 5:36 pm | Permalink
on el Streamripper funciona mucho mejor, al principio probé con Mplayer pero me daba errror de lenjuage, quizás por la versión que uso. DesistÃ, anque no tengo ni idea de lo qe fallaba…