Archive for septiembre 2007

h1

Problema de teclado en tightvncserver y gnome

30/09/2007

Si al instalar tightvncserver, vino o vncserver sobre una versión actual de Gnome se produce una desconfiguración del teclado al acceder por vnc (mientras que en sesión local, ssh u otras funciona correctamente) talque al escribir por ejemplo «asd» lo interpreta como «abf», se puede corregir (mientras se espera que incluyan una solución oficial los desarrolladores) de la siguiente manera:

1.- Ejecutar /usr/bin/gconf-editor(mediante la navegación con el ratón por los directorios del sistema con Nautilus).

2.- Buscar la entrada /desktop/gnome/peripherals/keyboard/kbd

3.- Editar la entrada «layouts», borrando todos sus valores y dejando sólo uno incorrecto (si sólo existe uno US-145 por ejemplo, cambiarlo por «asd» por ejemplo).

4.- Cerrarlo y reiniciar.

El método no es muy ortodoxo pero soluciona el problema temporalmente. Fuente.

h1

Programar la grabación de emisoras de radio online mediante el cron

23/09/2007

Update Jan/2012:
– Conversión de todo lo grabado a Ogg. Es necesario instalar el paquete «pacpl«.

Update Dic/2011:
– correcciones en la grabación de protocolos MMS para no grabar más de lo previsto.
– Actualización de algunas emisoras de radio y programas.
– Limpieza del código.

Una utilidad que uso a menudo es la grabación online de emisoras de radio (Ondacero, Puntoradio, etc), mediante la programación de esta tarea en el cron.

Para ello hago uso de este script: (salvarlo en un fichero de texto y darle permiso de ejecución)

#!/bin/bash

# Script para la grabacion de un programa de radio por internet.

# 1º) Idea original de http://www.tabernadelturco.com)
# 2º) Modificación de Pplux (www.pplux.com)
# 3º) Modificación actual: Carlos Gacimartín (cgacimartin@gmail.com)

#PARÁMETROS:
#grabar_radio ondacero 120 <- graba Ondacero durante 120 minutos a partir de su ejecución inmediata, por lo que se programa desde el cron.
#grabar_radio julianenlaonda 120 /dev/null #El valor devuelto (0, 1 o 2) se guarda automáticamente en $?
if [ $? -ne 0 ] ; then
echo «- Error 3: Streamripper no encontrado. Por favor instale ‘Streamripper’ para poder ejecutar correctamente la grabación»
echo «- Error 3: Streamripper no encontrado. Por favor instale ‘Streamripper’ para poder ejecutar correctamente la grabación» >> /var/log/grabar_radio.log
exit 0
fi

which mimms > /dev/null #El valor devuelto (0, 1 o 2) se guarda automáticamente en $?
if [ $? -ne 0 ] ; then
echo «- Error 3: mimms no encontrado. Por favor instale ‘mimms’ para poder ejecutar correctamente la grabación»
echo «- Error 3: mimms no encontrado. Por favor instale ‘mimms’ para poder ejecutar correctamente la grabación» >> /var/log/grabar_radio.log
exit 0
fi

#Sanear entrada, comprobar que al menos están los dos parámetros requeridos y son válidos:
#Comprobar parámetro 1: Comprar con los valores posibles:

#La hora la establece el propio script si el programa es conocido y no se ha indicado ninguna (ej: GOmaespuma, que va de 16:00 a 19:00 y no hace falta que el usuariola introduzca)
#variable software: como Streamripper no soporta el protocolo MMS y el prog. MiMMS no soporta streaming por http, hay que incluir a los dos y utilizar el que corresponda con cada emisora.

software=streamripper
minutos=$2

case $1 in
julian* | Julia* | JULIA* )
echo «Emisora: Gomaespuma en Ondacero»
emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_madrid
software=mimms
#horaInicio=16:00 #Ver como se maneja las horas con este formato
#horaFinal=19:00
minutos=175
programa=JuliaenLaOnda

;;
josemi* | JOSEMI* | Josemi* )
echo «Josemi Rodríguez Sieiro en Herrera en la Onda, Ondacero»
emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_madrid
#emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_madrid
software=mimms
#minutos=27
minutos=2
programa=Josemi.Rodriguez.Sieiro.Rodriguez.Vila.Carlos.Herrera.Onda.Cero
;;

rosav* | ROSAV* | larosa* | LAROSADE* )
echo «La Rosa de los Vientos, Juan Antonio Cebrián, Ondacero»
emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_madrid
software=mimms
minutos=150
#horaInicio=1:30
#horaFinal=4:00
programa=LaRosaDeLosVientos
;;

galicia* | GALICIA* )
echo «Galicia – Alba»
emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_santiago
software=mimms
minutos=90
#horaInicio=1:30
#horaFinal=4:00
programa=OndaceroGalicia
;;

ondace* | ONDACE* )
echo «Ondacero»
emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_madrid
software=mimms
minutos=$2
programa=Ondacero
;;

lucesenlaoscuridad* | LUCESENLAOSCURIDAD* | LucesEnLaOscuridad* | Lucesenlaoscuridad* )
echo «Luces en la oscuridad, Pedro Ribas, Puntoradio»
emisora=http://streaming.puntoradio.com
software=streamripper
programa=Luces.En.La.Oscuridad
minutos=210
;;

puntor* | PUNTOR* | Puntor* | PuntoR* )
echo «Puntoradio»
emisora=http://streaming.puntoradio.com
software=streamripper
programa=Puntoradio
;;

los40* | LOS40* | 40P | 40p* )
echo «Los 40 Principales»
emisora=http://a992.l783922627.c7839.e.lm.akamaistream.net/D/992/7839/v0001/reflector:22627
software=streamripper
programa=Los40principales
;;

SERDIGIT* | serdigit* | SERdigit* | Serdigit* | SERDigit* )
echo «SER Digital, Chema Lapuente»
emisora=mms://a874.l784138873.c7841.e.lm.akamaistream.net/D/874/7841/v0001/reflector:38873
minutos=25
software=mimms
programa=SERdigital
;;

Lascript* | lascript* | LaScript* )
echo «El cine de lo que yo te diga, Cadena SER»
emisora=mms://a874.l784138873.c7841.e.lm.akamaistream.net/D/874/7841/v0001/reflector:38873
minutos=120
software=mimms
programa=ElCineDeLoQueYoTeDiga
;;

SER | ser | CadenaSer | Cadenaser | cadenaSer | cadenaser )
echo «Cadena SER»
emisora=mms://a874.l784138873.c7841.e.lm.akamaistream.net/D/874/7841/v0001/reflector:38873
software=mimms
programa=CadenaSER
;;

m80 | M80 )
echo «M80»
emisora=http://a624.l857421577.c8574.e.lm.akamaistream.net/D/624/8574/v0001/reflector:21577
software=streamripper
programa=M80
;;

Cadenadial | cadenadial | CadenaDial | cadenaDial )
echo «Cadena Dial «
emisora=http://a371.l1136133678.c11361.e.lm.akamaistream.net/D/371/11361/v0001/reflector:33678
software=streamripper
programa=CadenaDial
;;

MaximaFM | MaxFM | maximafm | maximaFM | maxfm | Maximafm )
echo «Maxima FM «
emisora=http://a225.l857520540.c8575.e.lm.akamaistream.net/D/225/8575/v0001/reflector:20540
software=streamripper
programa=MaximaFM
;;

rne1 | rneradio1 | RNE1 | RNEradio1 | RNERadio1 )
echo «Radio Nacional de España Radio 1 «
emisora=http://a729.l830022151.c8300.e.lm.akamaistream.net/D/729/8300/v0001/reflector:22151
software=streamripper
programa=RNE1
;;

rneradioclasica | RNEradioclasica | RNERadioClasica | radioclasica | RadioClasica | radioClasica | Radioclasica )
echo «Radio Nacional de España Radio Clásica «
emisora=http://a1247.l910622804.c9106.e.lm.akamaistream.net/D/1247/9106/v0001/reflector:22804
software=streamripper
programa=RNE_RadioClasica
;;

rneradio3 | RNEradio3 | RNERadio3 | radio3 | Radio3 )
echo «Radio Nacional de España Radio 3 «
emisora=http://a1830.l830120550.c8301.e.lm.akamaistream.net/D/1830/8301/v0001/reflector:20550
software=streamripper
programa=RNE_Radio3
;;

rneradio4 | RNEradio4 | RNERadio4 | radio4 | Radio4 )
echo «Radio Nacional de España Radio 4 «
emisora=hmms://a783.l1041530780.c10415.e.lm.akamaistream.net/D/783/10415/v0001/reflector:30780
software=mimms
programa=RNE_Radio4
;;

rneradio5 | RNEradio5 | RNERadio5 | radio5 | Radio5 )
echo «Radio Nacional de España Radio 5»
emisora=http://a1360.l910520572.c9105.e.lm.akamaistream.net/D/1360/9105/v0001/reflector:20572
software=streamripper
programa=RNE_Radio5
;;

rneradioexteriordeespaña | RNEradioexter* | radionacionaldeespañaradioext* | radioexter* | RadioExt* | Radioext* )
echo «Radio Nacional de España Radio Exterior»
emisora=http://a259.l773120483.c7731.e.lm.akamaistream.net/D/259/7731/v0001/reflector:20483
software=streamripper
programa=RNE_radioexterior
;;

RadioMarca | radiomarca | Radiomarca | radioMarca | Marca | marca )
echo «Radio Marca «
emisora=mms://wmedia.recoletos.es/radiomarca
software=mimms
programa=RadioMarca
;;

Cadena100 | cadena100 | cad100 | c100 | cadenacien | CadenaCien | cadenaCien | Cadenacien )
echo «Cadena 100 «
emisora=mms://live.c100.edgestreams.net/reflector:34743
software=mimms
programa=Cadena100
;;

COPE | cope | Cope | CadenaCop* | CadenaCOP* | cadenacope |CADENACOPE )
echo «COPE «
emisora=mms://live.cope.edgestreams.net/reflector:34744
software=mimms
programa=COPE
;;

EuropaFM | europaFM | Europafm | europafm )
echo «Europa FM «
emisora=mms://a1537.l507234296.c5072.e.lm.akamaistream.net/D/1537/5072/v0001/reflector:34296
software=mimms
programa=EuropaFM
;;

mqm* | MQM* | Mqm* )
echo «MQM Dance «
emisora=http://win20ca.audiovideoweb.com/avwebwinlive8161
software=streamripper
programa=MQMDance
;;

Kiss* | KISS* | kiss*)
echo «Kiss FM «
emisora=http://win60ny.audiovideoweb.com/ny60winlive7001?WMThinning=0
software=streamripper
programa=KissFM
;;

RadioEusk* | RADIOEUSK* )
echo «Radio Euskadi»
emisora=mms://a943.l881320881.c8813.e.lm.akamaistream.net/D/943/8813/v0001/reflector:20881
software=mimms
programa=RadioEuskadi
;;

OnaC* | onac* | ONAC* )
echo «Ona catalana» #Para los más susceptibles, catalana va en minúculas al no ser nombre propio. Debería ser Cataluña, Euskadi, Madrid…
emisora=mms://217.11.251.145/onacatalana
software=mimms
programa=»OnaCatalana» #Para los más susceptibles, aquí si que «Catalana» va en mayúsculas para facilitar la identificación.
;;

OndaMadrid | Ondamadrid | ondamadrid | ondaMadrid | ONDAMADRID )
echo «Onda Madrid»
emisora=mms://a1644.l1904942498.c19049.e.lm.akamaistream.net/D/1644/19049/v0001/reflector:42498
software=mimms
programa=»OndaMadrid»
;;

* )
echo «Emisora no reconocida, disponibles: «
echo «- Error 1: Emisora o programa desconocido: «$1 > /var/log/grabar_radio.log # /var/log/grabar_radio.log
exit 0
;;

esac

# Tercer parámetro: tiempo a grabar.

#Directorio donde grabarlo (’.’ = actual) Como por cada minuto se utiliza 1mega de espacio, en un futuro se puede comprobar el espacio en el destino para avisar de si se podrá salvar o no.
if [ «$3» != «» ]; then
dir =$3
else
dir=/home/carlos/radio
fi

#Convertirlo en OGG, estándar superior al ASF y MP3, mayor compresión y calidad, de código fuente abierto y gratuito. Actualmente todos los reproductores ya incluyen este formato, y los que su firmware es actualizable suelen disponer de una actualización para poder reproducirlo.

sync
segundos=`expr 60 \* $minutos`

if [ «$software» == «streamripper» ] ; then
nombre=${dir}/»$programa»_20`date +%y_%m_%d`.mp3
streamripper $emisora -l $segundos -a $nombre -d $dir

elif [ «$software» == «mimms» ] ; then
nombre=${dir}/»$programa»_20`date +%y_%m_%d`.asf

#mplayer’s «endpos» options is not working in this version for streams, so applying workaround
mplayer -really-quiet -nolirc -noframedrop -dumpfile $nombre -dumpstream $emisora &
PID=»$!»
sleep «${segundos}»
kill «${PID}»
fi
sync
pacpl -t ogg $nombre

#OTRAS OPCIONES SON:
#mplayer -dumpstream salida mms://a17.l507220396.c5072.e.lm.akamaistream.net/D/17/5072/1006358696/reflector:20396
#para el tema de la calidad de sonido, lo saca en ASF.

echo «Grabación de » $nombre «realizada con éxito y guardada en » $PWD
echo «Grabación de » $nombre «realizada con éxito y guardada en » $PWD > /var/log/grabar_radio.log

#Añadir opción de mandar el fichero por SCP u otro medio a otro ordenador.

Como se ve, los comandos son muy sencillos, indicándose la emisora y el nº de minutos a grabar, nada más, empezando a grabar en cuanto se ejecutase el script. Conectaría con la emisora online según el protocolo (stream o mms) e iría guardando la emisión (en MP3 y ASF respectivamente). Ejemplos:

1º) Grabar la emisora Ondacero durante 10 minutos.

#./grabar_radio.sh Ondacero 10

2º) Grabar el programa «Josemi»

#./grabar_radio.sh josemi

En este segundo caso se puede ver la personalización de un programa, modificando el script. Éste ya sabe la cantidad de minutos a salvar y con qué nombre guardarlo:


echo "Josemi Rodríguez Sieiro en HErrera en la Onda, Ondacero"
emisora=mms://ondacerolivewm.fplive.net/ondacerowmlive-live/oc_madrid
software=mimms
#horaInicio=11:05
#horaFinal=11:32
minutos=27
programa=Josemi

Se puede modificar el script a voluntad.

Por ultimo, la gran utilidad de esto es poder grabar las emisiones sin que tengamos que intervenir, igual que se hace con un DVD o VHS. Para ello se puede utilizar el cron:


#sudo crontab -e

Añadiendo una línea por cada programa que se desee grabar. Para entender el programador de tareas de GNU/Linux Cron se puede consultar este enlace.. Dos ejemplos de programaciones serían:

Grabación de Ondacero (lo que estén emitiendo) durante diez minutos los sábados y domingos a la 1:30 am.

30 01 * * 7,1 /home/carlos/radio/grabar_radio.sh Ondacero 10

Grabación del programa de Josemi de lunes a viernes a las 12:07pm.

07 12 * * 1-5 /home/carlos/radio/grabar_radio.sh josemi

Actualización 2009/10/03:
– Corrección de la URL de Ondacero.
– Sustitución de «mimms» por «mplayer»

Actualización 2011/12/11:
– Corrección de la URL de Ondacero (oc_convencional -> oc_madrid).
– Añadido Ondacero Galicia.

h1

Convertir SWF en AVI y salvar videos de Youtube

11/09/2007

Era inevitable hablar algún dia de esto… En Linux se pueden dar ambos casos:

1º) Querer salvar un video de Youtube, para lo cual

1.1 Descargar el video a a través de YouTubeX o cualquier otro gestor de descargas de Youtube, obtenido un fichero tipo «get_video» de formato flv.

1.2 Convertirlo de flv a avi mediante el comando:

ffmpeg -i get_video miVideo.avi

2º) Cuando se tiene una animación en Flash en formato SWF, es necesario pasarla primero a FLV y posteriormete a AVI como ya hemos visto. Para ello:

2.1 Descargar PyVNCwSWF ,descomprimir e instalarlo.

2.2 Ejecutarlo:

carlos@pushit:~/Desktop/pyvnc2swf/pyvnc2swf-0.8.2.1/pyvnc2swf$ ./edit.py -o out.mpg get_video.swf
Using PIL 1.1.5
MPEGVideoStream is not supported.

produciendo este error que se arregla instalando la librería PyMedia (enlace a .deb) así como otras dependencias (Python 2.4 y Pygame). Después ya solo queda convertir según el formato de salida que queramos.

$ edit.py -o out.mpg input.swf

$ edit.py -o out.flv input.swf

Nota: este método solo vale para Versiones Flash 7.0 o superiores.