Auto Podcast

Efecto Tábano es el programa radial de mi amigo Fernando Barraza. Objetivamente, uno de los mejores programas radiales de Argentina.

Lamentablemente, desde que me vine a Córdoba tuve que conformarme con los fragmentos de entrevistas o especiales que Fernando subía a la web. Pero ahora que la Radio Calf-UNC está online, la alegría está completa.

El único problema que queda es que no todos los días tengo el tiempo de escucharlo de 16 a 18hs, Necesitaba grabarlo para escucharlo offline.

Bien podría haber hecho esto localmente pero como al sitio lo administro yo, dije... ¿por qué no grabar el programa directamente desde el servidor, y que cualquiera pueda bajarlo cuando quiera?

Aquí está mi podcaster automático para Efecto Tábano.

La idea

Todo se basa en el glorioso Mplayer, Mplayer es capaz de reproducir casi cualquier formato en streaming.

Por supuesto, no habrá sonido en esa "reproducción" sobre el servidor, pero lo que queremos es la info para grabarla.

En vez de enviarla a la placa de sonidos, la información cruda (el sonido WAV) lo enviamos a un archivo fifo desde donde lame obtendrá su fuente de datos para comprimir a MP3 on the fly.

Todo esto, claro, se ejecutará al horario del programa (y durante el tiempo que se indique, en este caso casi 2 horas) mediante una tarea cron

Instalando lo necesario

Como anticipé, hace falta mplayer y lame. Estos programas en general no se encuentran en el servidor (por ejemplo Dreamhost) así que hay que instalarlos. Como tampoco somos root (la gran mayoría de las veces) habrá que compilarlos desde las fuentes e instalarlos a nivel usuario.

primero crear, si no existiése, un directorio /bin donde irán nuestros programas.

mkdir bin
chmod 775 bin

Mplayer y mencoder

wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
bunzip2 essential-20061022.tar.bz2
tar -xf essential-20061022.tar
mv essential-20061022 $HOME/lib
wget http://www3.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2
bunzip2 MPlayer-1.0rc1.tar.bz2
tar -xf MPlayer-1.0rc1.tar
cd MPlayer-1.0rc1
./configure --prefix=$HOME --codecsdir=$HOME/lib/essential-20061022
make
make install

LAME

wget http://nchc.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
tar -zxvf lame-3.97.tar.gz
cd lame-3.97
./configure "--prefix=$HOME" "--enable-shared"
make
make install

Con eso ya tendríamos los programas necesarios en ./bin

El script podcaster-efectotabano.sh

#!/bin/sh
#
# recorder — wrapper to pull remote audio stream and convert contents
# to mp3

# Path and arguments to lame (mp3 encoder)
lame="$HOME/bin/lame -S -b 32 -m m"

# Path and arguments to mplayer (stream decoder)
mplayer="$HOME/bin/mplayer -quiet"

# Where to put the output files
odir="$HOME/efectotabano.com.ar/podcast"

showname="efectotabano-`date +%Y-%m-%d`"
duration="6660"
url="http://78.159.108.83:8690/"

fifo="${showname}_fifo"
ofile="$odir/${showname}.mp3"

#- end config ----------------------------------------------------

mkfifo $fifo
$lame $fifo $ofile &
$mplayer  -vc null -vo null -ao pcm:file=$fifo $url &

sleep 5
pids=`ps auxww | grep $fifo | awk '{print $duration}'`

sleep `echo ${duration} | bc`

kill $pids
rm $fifo

La primera parte permite configurar las rutas y parámetros de los programas a usar, así como el formato y destino del mp3 de salida.

En este caso los parámetros de lame indican que se grabará a 32kbps en mono.

Los mp3 de salida irán a este destino

Este script se ejecuta de lunes a viernes a las 12:09 hora del servidor (16:09 en argentina) y durante 6660 segundo, de modo que termina tentativamente junto con la finalización del programa.

Para configurar la tarea en cron ejecutar crontab -e. La tarea a agregar luce así:

09 12 * * 1-5 ~/bin/podcaster-efectotabano.sh

Eso es todo. Todos los días, de lunes a viernes tendré mi programa para descargar.

TO DO

Por supuesto, para que esto sea un podcast le falta la sindicación. Por lo tanto, habría que agregar la tarea de injectar información pertinente en una base de datos del cual generar el XML de sindicación.

Comentarios

Comments powered by Disqus