viernes, 26 de octubre de 2007

Video del CIE, Segunda Ediciòn

Ayer por la tarde tuve que codificar una segunda versión del video promocional del CIE. Hice dos versiones: una FMP4/MP3VBR y otra H264/AAC. Esta última disponible en http://tinyurl.com/2jlmub.

Desafortunadamente, uno de los requisitos que no me habían dicho era que el dichoso video tiene que verse en un Windows (Vista/XP) vil y silvestre (out-of-the-box), sin ningùn codec extra instalado. Como era de esperarse, las capacidades multimedia del infame sistema operativo son miserables.

Utilizando el mencoder codifiqué una serie de vídeos en MPEG1/MP2CBR. Los vídeos generados se podían ver en Linux, en MacOSX y hasta con el reproductor multimedia de la LifeDrive, pero siempre fallaban en Windows. Al final encontré una combinación que funcionó. Por supuesto, no podía yo dejar de utilizar la técnica de las dos pasadas :-)


#!/bin/bash -x
#
# This one is to create a very basic MPG video/audio file
# playable with out-of-the-box stupid Windows
#
# It's is also playable with out-of-the-box Macintosh/QuickTime
#
# Even you can play it with totem!

time mencoder -quiet -ofps 30000/1001 -o pass1.mpg \
-of lavf -lavfopts format=mpg \
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \
-vf softskip,scale=320:240,harddup \
-oac lavc -srate 44100 -af lavcresample=44100 \
-lavcopts acodec=mp2:abitrate=224 \
-ovc lavc -lavcopts aspect=4/3:vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:vbitrate=1152:vrc_maxrate=1152:vmax_b_frames=0:trell:mbd=2:precmp=2:subcmp=2:cmp=2:cbp:mv0:turbo:vpass=1 \
$@

time mencoder -quiet -ofps 30000/1001 -o pass2.mpg \
-of lavf -lavfopts format=mpg \
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \
-vf softskip,scale=320:240,harddup \
-oac lavc -srate 44100 -af lavcresample=44100 \
-lavcopts acodec=mp2:abitrate=224 \
-ovc lavc -lavcopts aspect=4/3:vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:vbitrate=1152:vrc_maxrate=1152:vmax_b_frames=0:trell:mbd=2:precmp=2:subcmp=2:cmp=2:cbp:mv0:vpass=2 \
$@

lunes, 22 de octubre de 2007

AAC, OGG, MP3. Y el ganador es...

El fin de semana me puse a revisar mi colección de discos, y entre otras cosas, a probar el formato de audio del MPEG4: AAC. Así que agarré mi viejos programas para codificar los discos, y los peguè en uno solo. Pero no me gustaba la vieja idea de tener un archivote WAV y luego correr los tres codificadores, así que me di a la tarea de utilizar cauces (pipes). Si bien el programa funciona, no es a prueba de balas: falta agregar código para atrapar los errores en los cauces, pero ¿a quién le importa?

Hacer el programa fue divertido, pero los resultados no lo fueron tanto. Ya de antemano se que el OGG es por mucho superior al MP3. Pero había que probar las nuevas tencologías. Así cada pista fue codificada en los cuatro formatos: OGG(vorbis), MP3(vbr), AAC (que no acepta "tags") y MP4 (aac con tags).

Codificar los archivos fue fácil: reproducirlos fue otra historia. El mplayer tocó todos sin problemas. El XMMS nunca pudo tocar los archivos AAC, ni los MP4. Hice una prueba con el Pocket-Tunes de la Live Drive: los archivos MP4 se los salta y aunque logró reproducir los archivos AAC es imposible posisionar la melodìa pues no funciona la barra y hay que escucharlos de principio a fin. Por si fuera poco, la calidad del sonido deja mucho que desear. Para mí, en este momento, AAC/MP4 no es una buena opción :-(

Pero no todo se perdió: quitè las líneas del AAC/MP4 y ahora tengo un programa que codifica al mismo tiempo en MP3 y OGG. MP3 para los reproductores convencionales (¡rayos! me acabo de dar cuenta: el estéro, la grabadora portátil y el reproductor del coche TODOS son SONY), y OGG para cargar en la PALM. No me cabe duda: el mejor formato sigue siendo OGG. Larga vida al Vorbis.

faac-1.25-2.fc7
lame-3.97-1.fc7
vorbis-tools-1.1.1.svn20070412-2.fc7
icedax-1.1.6-1.fc7
perl-5.8.8-23.fc7
fedora-release-7-3


#!/usr/bin/perl -wls
#
# perl -wls cddb2all.lp
#
# Reads a CDDA to WAV, then uses LAME to encode at 96kbps
# Reads CDDB to insert ID3 tags
# Also encode with OGG VORBIS (why not?)
# comming soon: encode in AAC(mp4) format!
#
# Override Options:
#
# OGG QUALITY
# -QUALITY=3
#
# LAME PRESET
# -PRESET=fm
#
# TRACK INFO (not yet!)
# -ta=artist -tl=album -ty=year -tg=genre
# -tt='track1/track2/..' <- not yet!

use CDDB_get qw( get_cddb );

$QUALITY=3 unless $QUALITY;
$PRESET='fm' unless $PRESET;
$PREFIX='' unless $PREFIX;

# From CDDB_get
my %config;
# ask user if more than one possibility
$config{input}=0;

print "Trying get CDDB info...";

my %cd=get_cddb(\%config);

unless(defined $cd{title}) {
die "no cddb entry found";
}

{
print "artist: $cd{artist}";
print "title: $cd{title}";
print "category: $cd{cat}";
print "cddbid: $cd{id}";
print "trackno: $cd{tno}";

my $n=1;
foreach my $i ( @{$cd{track}} ) {
print "track $n: $i";
$n++;
}
}

print "Hit [Enter] to continue"; <>;

$id=$cd{id} unless $id;
$ta=$cd{artist} unless $ta;
$tl=$cd{title} unless $tl;
$ty=$cd{year} unless $ty;
$tg=$cd{genre} unless $tg;
$tn=0 unless $tn;

foreach my $tt ( @{$cd{track}} ) {
++$tn;
$tt =~ s/"//g; #" <- emacs get's confused #' twice!

$fn=$tt; $fn=~s/\W+//g; $fn=~s/\s+/_/g;

$bn=sprintf("%s%02d-%s", $PREFIX, $tn, $fn);
$of=sprintf("%s.mp3", $bn);
#
# LAME stuff
#
my $lame=qq(nice /usr/bin/lame --quiet);
$lame.=qq( --ta '$ta') if $ta;
$lame.=qq( --tl "$tl") if $tl;
$lame.=qq( --tt "$tt") if $tt;
$lame.=qq( --tn '$tn') if $tn;
$lame.=qq( --tg '$tg') if $tg;
$lame.=qq( --ty '$ty') if $ty;
$lame.=qq( --preset $PRESET - '$of');

print $lame;
#
# Now, the OGG stuff
#
$of=sprintf("%s.ogg", $bn);

$oggenc=qq(nice /usr/bin/oggenc --quiet);
$oggenc.=qq( -a '$ta') if $ta;
$oggenc.=qq( -l "$tl") if $tl;
$oggenc.=qq( -t "$tt") if $tt;
$oggenc.=qq( -N '$tn') if $tn;
$oggenc.=qq( -G '$tg') if $tg;
$oggenc.=qq( -d '$ty') if $ty;
$oggenc.=qq( -c '$tc') if $tc;
$oggenc.=qq( -q $QUALITY -o $of -);

print $oggenc;
#
# FAAC stuff
#
$of=sprintf("%s.aac", $bn);

$faac=qq(nice /usr/bin/faac);
$faac=qq( -o $of -);

print $faac;
#
# MP4 stuff
#
$of=sprintf("%s.mp4", $bn);

$mp4=qq(nice /usr/bin/faac);
$mp4.=qq( --artist '$ta') if $ta;
$mp4.=qq( --album "$tl") if $tl;
$mp4.=qq( --title "$tt") if $tt;
$mp4.=qq( --track $tn) if $tn;
$mp4.=qq( --genre '$tg') if $tg;
$mp4.=qq( --year '$ty') if $ty;
$mp4.=qq( -o $of -);

print $mp4;
#
# cdda2wav stuff
#
$cmd=qq(/usr/bin/icedax dev=/dev/cdrom --quiet -H -x -w -t $tn -);
print $cmd;
#
# run all of them!
#
open MP3, "| $lame" or die qq(Can't run $lame); binmode MP3;
open OGG, "| $oggenc" or die qq(Can't run $oggenc); binmode OGG;
open AAC, "| $faac" or die qq(Can't run $faac); binmode AAC;
open MP4, "| $mp4" or die qq(Can't run $mp4); binmode MP4;
open CDDA, "$cmd |" or die "Can't run $cmd"; binmode CDDA;
while(($bytes = sysread(CDDA, $buffer, 4096))>0) {
syswrite(MP3, $buffer, $bytes);
syswrite(OGG, $buffer, $bytes);
syswrite(AAC, $buffer, $bytes);
syswrite(MP4, $buffer, $bytes);
}
close CDDA;
close MP4;
close AAC;
close OGG;
close MP3;
}

miércoles, 29 de agosto de 2007

Videos del CIE

Después de vacilar un rato con el mencoder para re-codificar un par de vídeos del CIE, probando órdenes tan extrañas como:

#!/bin/bash -x

BITRATE=256

time mencoder -quiet -ofps 15000/1001 -vf softskip,crop=704:464:8:8,hqdn3d=2:1:2,scale=352:240 -ovc x264 -x264encopts bitrate=$BITRATE:psnr:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b:pass=1 -aspect 4:3 -nosound -o pass1.avi *vob

cp divx2pass.log divx2pass.log.pass1

for pass in 2 3
do
time mencoder -quiet -ofps 15000/1001 -vf softskip,crop=704:464:8:8,hqdn3d=2:1:2,scale=352:240 -ovc x264 -x264encopts bitrate=$BITRATE:psnr:subq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid:weight_b:pass=3 -aspect 4:3 -channels 1 -oac mp3lame -lameopts preset=voice -o pass$pass.avi *vob
cp divx2pass.log divx2pass.log.pass$pass
done


y descubrir que los vídeos jalan bien en Linux, en la PalmOS, con algunas complicaciones en Windows y ni remotamente en la Mac, decidí subirlos a Google Video:

Promocional 2007
Inauguración de Instalaciones 2007

Lo malo de tener una amd64 es que no hay plugin de flash nativo para 64 bits. Ahora todos pueden ver los vídeos, menos yo :-(

Pero no todo estuvo perdido: aprendí unas nuevas opciones para comprimir aún más los vídeos. Seguramente re-codificaré mis películas para la Palm LifeDrive.

jueves, 21 de junio de 2007

Instalando una impresora HP JetDirect

Hoy tuve que hacer un viaje al lado oscuro de la fuente.

Tenemos una impresora HP DesignJet 800 PS con puerto JetDirect. Le decimos plotter, a pesar de que no usa plumillas ni es vectorial. Más bien es como impresora de inyección de tinta gigante. Configurarla en Fedora Linux es extremadamente fácil: basta con indicarle al CUPS que se trata de una impresora JetDirect.

Pero en el lado oscuro es otra cosa. Ya teníamos el driver, pero no había forma de indicarle que no se trataba de una impresora local, sino de una JetDirect. Como siempre, el oráculo tuvo la respuesta: HP Install Network Printer Wizard.

Unos cuántos clicks y ya. Ahora tenemos una PCera que puede imprimir directamente al plotter, y los más importante: con un usuario capaz de hacerlo.

Al terminar este viaje al lado oscuro de la fuente, sentado frente a mi PCera-x86_64 con Fedora-7, me quedo pensando: aún queda un viaje al lado oscuro de la fuerza por terminar... pero esa es otra historia.

jueves, 14 de junio de 2007

Error 16: Inconsistent filesystem structure

Anoche dejé aplicando los updates a un servidor RHEL-WS-4, entre ellos un update del kernel. También programé un reboot automático. Hoy en la mañana, la máquina decía:

Error 16: Inconsistent filesystem structure.

Uno de esos errores que uno nunca ha visto en más de diez años de usar Linux. Creyendo que se trataba de un problema con la actualización del kernel, volví a reiniciar la máquina, y entré con el kernel anterior. Todo bien. Volví a generar el initrd con mkinitrd -v -f initrd-2.6.9-55.EL.img 2.6.9-55.EL y volví a arrancar. Volvió a fallar.

Siguente paso: pregúntale al oráculo:

16 : Inconsistent filesystem structure
This error is returned by the filesystem code to denote an internal error caused by the sanity checks of the filesystem structure on disk not matching what it expects. This is usually caused by a corrupt filesystem or bugs in the code handling it in GRUB.

Un fsck a la partición de boot... no problem. Volví a arrancar, y volvió a fallar. Pensando en qué podría ser el error de incosistencia recordé que la partición de arranque se encuentra en /dev/md0, el cual está formado por /dev/sda1 y /dev/sdb1 en configuración RAID. Un vistazo a /proc/mdstat me dió la razón del fallo:

Personalities : [raid1]
md0 : active raid1 sdb1[1]
248896 blocks [2/1] [_U]

Para recuperar el arreglo apliqué mdadm /dev/md0 --add /dev/sda1. Esperé a que terminara de sincronizar, y volví a reinicar. Ahora sí, ya funcionó.

La duda es: ¿por qué falló el sda? Le dejé corriendo badblocks /dev/sda. A ver que sale.

jueves, 7 de junio de 2007

Fedora 7 y el driver de nVidia

Acabo de instalar el Fedora 7 (moonshine). Se ve bonito. De entrada, no pude echar a andar el driver de nVidia para la quakeiza de hoy. Lo bueno que pude utilizar la version de Fedora 6 (zod) para eso. Ahora sí, con más calma, he logrado configurar el driver. Al parecer el instalador pone los archivos en la carpeta equivocada. Se corrigió con

rsync -av /usr/X11R6/lib64/modules/ /usr/lib64/xorg/modules/

Aunque ya corrìa el quake3, los FPS se caían periódicamente, como si el CPU estuviera ocuado en otra cosa. Una visita al registro de instalación para darme cuenta que hay que aplicar unas órdenes para el SELinux:

chcon -t texrel_shlib_t /usr/lib64/xorg/modules/drivers/nvidia_drv.so
chcon -t texrel_shlib_t /usr/lib64/xorg/modules/extensions/libglx.so.1.0.9631
chcon -t texrel_shlib_t /usr/lib64/xorg/modules/extensions/libglx.so.1.0.9755

Al parecer, funciona correctamente. Ya se verá conforme le vaya agregando cosas.

jueves, 31 de mayo de 2007

jueves, 3 de mayo de 2007

Top 10

Ayer vi una nota de Garaged, y no me pude quedar con las ganas de probar el script... con una pequeña modificación ;-P

$ history | awk '{print $2}'| awk -F \| '{print $1}' | sort | uniq -c | sort -rn | head -10

219 ls
165 cd
84 exec
45 man
24 ps
23 sync
23 rm
21 rpm
17 myflickrupload.pl
17 cat

La tercera línea es "exec ssh ...", pues frecuentemente me conecto a otros servidores, y no me gusta dejar ventanas abiertas al terminar la sesión.

La sexta línea "sync" es un vicio de la escuela antigua de Unix, y lo adquirí cuando fuí operador de las Altos Xenix en el Centro de Cómputo del Instituto Tecnológico de Mérida.

La novena "myflickrupload.pl" es un script (en perl) para subir fotos al flickr. Larga vida a la línea de órdenes.

Tampoco pude resistir la tentación de correr el script como root:

# history | awk '{print $2}'| awk -F \| '{print $1}' | sort | uniq -c | sort -rn | head -10

108 ls
94 cd
45 rpm
44 ps
40 yum
38 dmesg
27 vi
26 fdisk
23 sync
22 man

viernes, 20 de abril de 2007

Otra del iPod

Amor Se Llama El Juego Lyrics
Sabina Joaquin

Hace demasiados meses
que mis payasadas no provocan tus
ganas de reir
no es que ya no me intereses
pero el tiempo de los besos y el sudor
es la hora de dormir

Duele verte removiendo
la cajita de cenizas que el placer
tras de si dejó
mal y tarde estoy cumpliendo
la palabra que te di cuando juré
escribirte una canción

Un Dios triste y aburrido nos castigó
por trepar juntos al árbol
y atracarnos con la flor de la pasión
por probar aquel sabor.

El agua apaga el fuego
y al ardor los años
amor se llama el juego
en el que un par de ciegos
juegan a acerse daño
Y cada vez peor
y cada vez más rotos
y cada vez más tú
y cada vez más yo
sin rastro de nosotros.

Ni inocentes ni culpables
corazones que destroza el temporal
carnes de cañón
no soy yo ni tú ni nadie
son los dedos miserables que le dan
cuerda a mi reloj

Y no hay lágrimas que valgan para volver
a meternos en el coche
donde aquella noche en pleno carnaval
te empecé a desnudar.

El agua apaga el fuego
y al ardor los años
amor se llama el juego
en el que un par de ciegos
juegan a acerse daño
Y cada vez peor
y cada vez más rotos
y cada vez más tú
y cada vez más yo
sin rastro de nosotros.

jueves, 19 de abril de 2007

iPod

Hoy Saritah me prestó su iPod. Muchas canciones, muy buenas todas. Una en especial llamó me atención. Pero el iPod shuffle no tiene display, así que un googlazo y rápidamente: título, autor, y letra:

Pastillas Para No Soñar.
Joaquin Sabina.

Si lo que quieres es vivir cien años
no pruebes los licores del placer.
Si eres alérgico a los desengaños
olvídate de esa mujer.
Compra una máscara antigás,
manténte dentro de la ley.
Si lo que quieres es vivir cien años
haz músculos de cinco a seis.

Y ponte gomina que no te despeine
el vientecillo de la libertad.
Funda un hogar en el que nunca reine
más rey que la seguridad.
Evita el humo de los puros,
reduce la velocidad.
Si lo que quieres es vivir cien años
vacúnate contra el azar.

Deja pasar la tentación
dile a esa chica que no llame más
y si protesta el corazón
en la farmacia puedes preguntar:
¿Tiene pastillas para no soñar?

Si quieres ser Matusalén
vigila tu colesterol
si tu película es vivir cien años,
no lo hagas nunca sin condón.
Es peligroso que tu piel desnuda
roce otra piel sin esterilizar,
que no se infiltre el virus de la duda
en tu cama matrimonial.
Y si en tus noches falta sal,
para eso está el televisor.
Si lo que quieres es cumplir cien años
no vivas como vivo yo.

viernes, 13 de abril de 2007

runbt

#!/bin/bash -x
#
# Running bittorrent from inittab
#
#
# bt:2345:respawn:/bin/su -c '/home/turbo/bin/runbt' - turbo

test -x /usr/bin/launchmany-console &&
exec /bin/nice -20 /usr/bin/launchmany-console --peer_socket_tos 2 --tracker_proxy 132.248.30.3:3128 /home/BT

martes, 10 de abril de 2007

The certificate for *.cie.unam.mx has expired

Se me pasó hacer el cambio en semana santa, pero va:

# /bin/bash -x
#
# RTFM!

openssl req -new -key server.key -x509 -days 777 -passin file:pass.txt -out server.crt