Grabando de la radio en mp3 al vuelo
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.
Según la versión que tengáis de MPlayer puede ser que donde pone:
tengáis que poner:
Te ha quedado mucho más compacto, la verdad 🙂
Voy a actualizar mis post.
[…] 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. […]
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 :P.
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 😀
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)?
Muy bueno el script 😉 Voy a ver si consigo modificarlo para que grabe en OGG-Vorbis.
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).
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… 🙁
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 🙁
Solucionado:
aparte del «&» he añadido «- nocache» como opción a la linea del mplayer :)))
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.
🙂
¿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.
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.
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
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.
[…] Nik probak 5 minutuko emisioakin egin ditut. Gabaz ordu erdi edo ordubeteko saioa grabatuko det. Honi buruz beste artikulu on bat hemen […]
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…..
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.
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
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
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 😉
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.
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?
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.
Hola Manuel,
no tengo ni la más remota idea de qué te puede estar pasando 😛 , 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.
Un saludo
Fantástico el script
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
[…] pplux Posted in Aplicaciones, General | Leave a […]
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?
[…] (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 […]
[…] (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 […]
[…] 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. […]