29 de julio de 2007

Instalar AMSN 0.97RC1 en Debian Etch

A continuación detallo los pasos a seguir para instalar la última versión del programa de mensajería AMSN en nuestra Debian Etch.

1. En caso de tener instalada la versión 0.96 que viene en los repositorios de Debian Etch, desinstalamos el paquete. Si no lo hemos instalado, nos logueamos como root y pasamos al paso 2.

Nos logueamos como usuario "root":
# su -
password:

Desinstalamos AMSN:
# aptitude purge amsn

También tenemos que borrar el directorio oculto en el que se encuentra la de configuración del amsn. Dicho directorio se encuentra en tu home de usuario.

# rm -R ~usuario/.amsn


2. Descargamos el archivo con el código fuente de la página oficial.
# wget http://mesh.dl.sourceforge.net/sourceforge/amsn/amsn-0.97RC1.tar.bz2


3. Descomprimimos el archivo.
# bzip2 -dc amsn-0.97RC1.tar.bz2 | tar -xv

Nos habrá creado dentro de /root el directorio "amsn-0.97RC1"


4. Accedemos al directorio y empezamos a compilar nuestro paquete .deb que posteriormente instalaremos:

# cd amsn-0.97RC1

Antes de compilar, hay que resolver algunas dependencias. Para ello instalamos éstos paquetes:
# aptitude install docker imlib-base imlib11 sox tcltls tcl8.4-dev tk8.4-dev libpng12-dev libjpeg62-dev debhelper fakeroot g++

Ahora compilamos:
# cd amsn-0.97RC1

# ./configure
checking for prefix by checking for wish... /usr/bin/wish
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking tcl build dir... using tcl library in /usr/lib/tcl8.4
checking tk build dir... using tk library in /usr/lib/tk8.4
checking for main in -lstdc++... yes
checking how to run the C preprocessor... gcc -E
checking for X... libraries , headers
checking for gethostbyname... yes
checking for connect... yes
checking for remove... yes
checking for shmat... yes
checking for IceConnectionNumber in -lICE... yes
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for png_read_info in -lpng... yes
checking png.h usability... yes
checking png.h presence... yes
checking for png.h... yes
checking for jpeg_CreateDecompress in -ljpeg... yes
checking jpeglib.h usability... yes
checking jpeglib.h presence... yes
checking for jpeglib.h... yes
checking jerror.h usability... yes
checking jerror.h presence... yes
checking for jerror.h... yes
checking for ftello... yes
checking for fseeko... yes
checking for getpt... yes
checking for strcasestr... yes
checking for memmem... yes
checking for dlopen... no
checking for pthread_create in -lpthread... yes
checking if mmx should be used... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating ./utils/linux/capture/config.h

compile time options summary
============================

X11 : yes
Tcl : 8.4
TK : 8.4
DEBUG : no
STATIC : no


5. Creamos nuestro paquete .deb y procedemos a su instalación:

# make deb

Seguramente nos dará éste error.

dh_builddeb --destdir="./distrib/DEB" --filename="amsn_0.97RC1-svn.deb"
dpkg-deb - error: Debian revision (`svn') no contiene ningún dígito
dpkg-deb: 1 errores en el fichero de control
dh_builddeb: command returned error code 512
make[1]: *** [binary-arch] Error 1
make[1]: se sale del directorio `/root/amsn-0.97RC1'
make: *** [deb] Error 2

Yo he conseguido compilar modificando el fichero Makefile.ini. Es algo chapuza pero funciona. Si alguien conoce el origen de éste error, (según he leído es porque no está cogiendo la versión del paquete) y como solucionarlo, agradecería mucho que dejara un comentario en éste post.

Vamos a parchear el Makefile para que nos termine de crear el paquete. Lo editamos con nuestro editor de consola preferido (para mi el vi), buscamos la etiqueta #misc y modificamos como se muestra a continuación:

# vi Makefile

# misc
PACKAGE := amsn
BASEVERSION := 0.97RC1
ifeq (no,yes)
RELEASEVERSION := 1
else
RELEASEVERSION := svn`which svnversion > /dev/null && svnversion`
endif
VERSION := $(BASEVERSION)-1.0
#VERSION := $(BASEVERSION)-$(RELEASEVERSION)

Sustituimos la línea "#VERSION := $(BASEVERSION)-$(RELEASEVERSION) " por "VERSION := $(BASEVERSION)-1.0". Grabamos y salimos de vi.

Ahora volvemos a crear nuestro paquete:

# make deb
mkdir -p ./distrib/DEB
sed "s/#VERSION#/0.97RC1-1.0/" debian/changelog.in > debian/changelog
fakeroot debian/rules clean
make[1]: se ingresa al directorio `/root/amsn-0.97RC1'
dh_testdir
dh_testroot
rm -f build-stamp
# Add here commands to clean up after the build process.
/usr/bin/make clean
make[2]: se ingresa al directorio `/root/amsn-0.97RC1'
find . -name \*~ -print | xargs rm -f
find . -name \*.o -print | xargs rm -f
find . -name \*.a -print | xargs rm -f
find . -name \*.dep -print | xargs rm -f
rm -f ./utils/TkCximage/src/TkCximage.cpp.so ./utils/TkCximage/src/TkCximage.cpp.o ./utils/TkCximage/src/PhotoFormat.cpp.o ./utils/TkCximage/src/procs.cpp.o ./utils/TkCximage/src/CxImage/libCxImage.a
rm -f ./utils/TkCximage/src/TkCximage.cpp.so ./utils/TkCximage/src/TkCximage.cpp.o ./utils/TkCximage/src/PhotoFormat.cpp.o ./utils/TkCximage/src/procs.cpp.o ./utils/TkCximage/src/CxImage/libCxImage.a
rm -f ./utils/TkCximage/src/TkCximage.cpp.so ./utils/TkCximage/src/TkCximage.cpp.o ./utils/TkCximage/src/PhotoFormat.cpp.o ./utils/TkCximage/src/procs.cpp.o ./utils/TkCximage/src/CxImage/libCxImage.a
rm -f ./utils/TkCximage/src/CxImage/libCxImage.a ./utils/TkCximage/src/CxImage/ximadsp.cpp.o ./utils/TkCximage/src/CxImage/ximaexif.cpp.o ./utils/TkCximage/src/CxImage/ximagif.cpp.o ./utils/TkCximage/src/CxImage/ximainfo.cpp.o ./utils/TkCximage/src/CxImage/ximajpg.cpp.o ./utils/TkCximage/src/CxImage/ximalyr.cpp.o ./utils/TkCximage/src/CxImage/ximapng.cpp.o ./utils/TkCximage/src/CxImage/ximatga.cpp.o ./utils/TkCximage/src/CxImage/ximatran.cpp.o ./utils/TkCximage/src/CxImage/ximabmp.cpp.o ./utils/TkCximage/src/CxImage/ximaenc.cpp.o ./utils/TkCximage/src/CxImage/ximage.cpp.o ./utils/TkCximage/src/CxImage/ximahist.cpp.o ./utils/TkCximage/src/CxImage/ximaint.cpp.o ./utils/TkCximage/src/CxImage/ximalpha.cpp.o ./utils/TkCximage/src/CxImage/ximapal.cpp.o ./utils/TkCximage/src/CxImage/ximasel.cpp.o ./utils/TkCximage/src/CxImage/ximath.cpp.o ./utils/TkCximage/src/CxImage/xmemfile.cpp.o
rm -f ./utils/webcamsn/src/webcamsn.so ./utils/webcamsn/src/webcamsn.o ./utils/webcamsn/src/kidhash.o ./utils/webcamsn/src/libmimic.a
rm -f ./utils/webcamsn/src/webcamsn.so ./utils/webcamsn/src/webcamsn.o ./utils/webcamsn/src/kidhash.o ./utils/webcamsn/src/libmimic.a
rm -f ./utils/tcl_siren/src/libsiren.a ./utils/tcl_siren/src/common.o ./utils/tcl_siren/src/dct4.o ./utils/tcl_siren/src/encoder.o ./utils/tcl_siren/src/decoder.o ./utils/tcl_siren/src/huffman.o ./utils/tcl_siren/src/rmlt.o
rm -f ./utils/tcl_siren/src/libsiren.a ./utils/tcl_siren/src/common.o ./utils/tcl_siren/src/dct4.o ./utils/tcl_siren/src/encoder.o ./utils/tcl_siren/src/decoder.o ./utils/tcl_siren/src/huffman.o ./utils/tcl_siren/src/rmlt.o
rm -f ./utils/tcl_siren/src/tcl_siren.so ./utils/tcl_siren/src/tcl_siren.o ./utils/tcl_siren/src/libsiren.a
rm -f ./utils/linux/capture/capture.so
rm -f ./utils/linux/capture/libng/libng.a ./utils/linux/capture/libng/grab-ng.o ./utils/linux/capture/libng/devices.o ./utils/linux/capture/libng/writefile.o ./utils/linux/capture/libng/parse-mpeg.o ./utils/linux/capture/libng/parse-dvb.o ./utils/linux/capture/libng/color_common.o ./utils/linux/capture/libng/color_packed.o ./utils/linux/capture/libng/color_lut.o ./utils/linux/capture/libng/color_yuv2rgb.o ./utils/linux/capture/libng/convert.o ./utils/linux/capture/libng/misc.o
rm -f ./utils/linux/capture/libng/plugins/conv-mjpeg.so ./utils/linux/capture/libng/plugins/drv0-v4l2.so ./utils/linux/capture/libng/plugins/drv1-v4l.so ./utils/linux/capture/libng/plugins/sn9c10x.so
rm -f ./utils/linux/traydock/libtray.so ./utils/linux/traydock/libtray.o
rm -f ./utils/linux/linflash/flash.so ./utils/linux/linflash/flash.o
make[2]: se sale del directorio `/root/amsn-0.97RC1'
dh_clean
make[1]: se sale del directorio `/root/amsn-0.97RC1'
fakeroot debian/rules binary VERSION=0.97RC1-1.0
make[1]: se ingresa al directorio `/root/amsn-0.97RC1'
dh_testdir
# Add here commands to compile the package.
/usr/bin/make
make[2]: se ingresa al directorio `/root/amsn-0.97RC1'
CXX utils/TkCximage/src/TkCximage.cpp.o
CXX utils/TkCximage/src/PhotoFormat.cpp.o
CXX utils/TkCximage/src/procs.cpp.o
CXX utils/TkCximage/src/CxImage/ximadsp.cpp.o
CXX utils/TkCximage/src/CxImage/ximaexif.cpp.o
CXX utils/TkCximage/src/CxImage/ximagif.cpp.o
CXX utils/TkCximage/src/CxImage/ximainfo.cpp.o
CXX utils/TkCximage/src/CxImage/ximajpg.cpp.o
CXX utils/TkCximage/src/CxImage/ximalyr.cpp.o
CXX utils/TkCximage/src/CxImage/ximapng.cpp.o
CXX utils/TkCximage/src/CxImage/ximatga.cpp.o
CXX utils/TkCximage/src/CxImage/ximatran.cpp.o
CXX utils/TkCximage/src/CxImage/ximabmp.cpp.o
CXX utils/TkCximage/src/CxImage/ximaenc.cpp.o
CXX utils/TkCximage/src/CxImage/ximage.cpp.o
CXX utils/TkCximage/src/CxImage/ximahist.cpp.o
CXX utils/TkCximage/src/CxImage/ximaint.cpp.o
CXX utils/TkCximage/src/CxImage/ximalpha.cpp.o
CXX utils/TkCximage/src/CxImage/ximapal.cpp.o
CXX utils/TkCximage/src/CxImage/ximasel.cpp.o
CXX utils/TkCximage/src/CxImage/ximath.cpp.o
CXX utils/TkCximage/src/CxImage/xmemfile.cpp.o
AR utils/TkCximage/src/CxImage/libCxImage.a
ar: creando utils/TkCximage/src/CxImage/libCxImage.a
LDX utils/TkCximage/src/TkCximage.cpp.so
LDX utils/TkCximage/src/TkCximage.cpp.so
cp utils/TkCximage/src/TkCximage.cpp.so utils/TkCximage/TkCximage.so
CC utils/webcamsn/src/webcamsn.o
CC utils/webcamsn/src/kidhash.o
CC utils/webcamsn/src/bitstring.o
CC utils/webcamsn/src/deblock.o
CC utils/webcamsn/src/encode.o
CC utils/webcamsn/src/idct_dequant.o
CC utils/webcamsn/src/mimic.o
CC utils/webcamsn/src/vlc_decode.o
CC utils/webcamsn/src/colorspace.o
CC utils/webcamsn/src/decode.o
CC utils/webcamsn/src/fdct_quant.o
CC utils/webcamsn/src/vlc_common.o
CC utils/webcamsn/src/vlc_encode.o
AR utils/webcamsn/src/libmimic.a
ar: creando utils/webcamsn/src/libmimic.a
LD utils/webcamsn/src/webcamsn.so
cp utils/webcamsn/src/webcamsn.so utils/webcamsn/webcamsn.so
CC utils/tcl_siren/src/tcl_siren.o
CC utils/tcl_siren/src/common.o
CC utils/tcl_siren/src/dct4.o
CC utils/tcl_siren/src/encoder.o
CC utils/tcl_siren/src/decoder.o
CC utils/tcl_siren/src/huffman.o
CC utils/tcl_siren/src/rmlt.o
AR utils/tcl_siren/src/libsiren.a
ar: creando utils/tcl_siren/src/libsiren.a
LD utils/tcl_siren/src/tcl_siren.so
cp utils/tcl_siren/src/tcl_siren.so utils/tcl_siren/tcl_siren.so
CC utils/linux/capture/capture.o
CC utils/linux/capture/libng/grab-ng.o
CC utils/linux/capture/libng/devices.o
CC utils/linux/capture/libng/writefile.o
CC utils/linux/capture/libng/parse-mpeg.o
CC utils/linux/capture/libng/parse-dvb.o
CC utils/linux/capture/libng/color_common.o
CC utils/linux/capture/libng/color_packed.o
CC utils/linux/capture/libng/color_lut.o
CC utils/linux/capture/libng/color_yuv2rgb.o
CC utils/linux/capture/libng/convert.o
CC utils/linux/capture/libng/misc.o
AR utils/linux/capture/libng/libng.a
ar: creando utils/linux/capture/libng/libng.a
LD utils/linux/capture/capture.so
CC utils/linux/capture/libng/plugins/conv-mjpeg.o
LD utils/linux/capture/libng/plugins/conv-mjpeg.so
CC utils/linux/capture/libng/plugins/drv0-v4l2.o
CC utils/linux/capture/libng/plugins/struct-v4l2.o
CC utils/linux/capture/libng/plugins/struct-dump.o
LD utils/linux/capture/libng/plugins/drv0-v4l2.so
CC utils/linux/capture/libng/plugins/drv1-v4l.o
CC utils/linux/capture/libng/plugins/struct-v4l.o
LD utils/linux/capture/libng/plugins/drv1-v4l.so
CC utils/linux/capture/libng/plugins/sn9c10x.o
LD utils/linux/capture/libng/plugins/sn9c10x.so
CC utils/linux/traydock/libtray.o
LD utils/linux/traydock/libtray.so
CC utils/linux/linflash/flash.o
LD utils/linux/linflash/flash.so
make[2]: se sale del directorio `/root/amsn-0.97RC1'
#docbook-to-man debian/amsn.sgml > amsn.1
touch build-stamp
dh_testdir
dh_testroot
dh_clean
dh_installdirs
# Add here commands to install the package into debian/amsn.
/usr/bin/make install DESTDIR=/root/amsn-0.97RC1/debian/amsn
make[2]: se ingresa al directorio `/root/amsn-0.97RC1'
rm -Rf /root/amsn-0.97RC1/debian/amsn/usr/share/amsn
mkdir --parents /root/amsn-0.97RC1/debian/amsn/usr/share/amsn
mkdir --parents /root/amsn-0.97RC1/debian/amsn/usr/bin
mkdir --parents /root/amsn-0.97RC1/debian/amsn/usr/share/applications/
mkdir --parents /root/amsn-0.97RC1/debian/amsn/usr/share/pixmaps/
find /root/amsn-0.97RC1/debian/amsn/usr/share/amsn -name '.svn' -print | xargs rm -Rf
chmod -R +rx /root/amsn-0.97RC1/debian/amsn/usr/share/amsn
ln -sf /usr/share/amsn/amsn /root/amsn-0.97RC1/debian/amsn/usr/bin/amsn
ln -sf /usr/share/amsn/amsn-remote /root/amsn-0.97RC1/debian/amsn/usr/bin/amsn-remote
ln -sf /usr/share/amsn/amsn-remote-CLI /root/amsn-0.97RC1/debian/amsn/usr/bin/amsn-remote-CLI
cp ./amsn.desktop /root/amsn-0.97RC1/debian/amsn/usr/share/applications/
ln -sf /usr/share/amsn/desktop-icons/32x32/apps/amsn.png /root/amsn-0.97RC1/debian/amsn/usr/share/pixmaps/
make[2]: se sale del directorio `/root/amsn-0.97RC1'
dh_testdir
dh_testroot
dh_installdocs
dh_installexamples
dh_installman
dh_link
dh_strip -XlibTclxml3.1.so
dh_compress
dh_fixperms
dh_installdeb
dh_shlibdeps -XlibTclxml3.1.so
dh_gencontrol
dh_md5sums
dh_builddeb --destdir="./distrib/DEB" --filename="amsn_0.97RC1-1.0.deb"
dpkg-deb: construyendo el paquete `amsn' en `./distrib/DEB/amsn_0.97RC1-1.0.deb'.
make[1]: se sale del directorio `/root/amsn-0.97RC1'
rm -f debian/changelog
rm -rf debian/amsn

Sólo queda instalarlo así:

# dpkg -i distrib/DEB/amsn_0.97RC1-1.0.deb
Seleccionando el paquete amsn previamente no seleccionado.
(Leyendo la base de datos ...
90302 ficheros y directorios instalados actualmente.)
Desempaquetando amsn (de .../DEB/amsn_0.97RC1-1.0.deb) ...
Configurando amsn (0.97RC1-1.0) ...

# exit

Bueno, espero que lo disfruen.

Saludos y Suerte.
Domi - Gran Canaria (Islas Canarias)

15 de julio de 2007

Descargar y reproducir vídeos de youtube

1. Para descargarnos vídeos desde youtube, necesitamos instalar el paquete "youtube-dl" incluido en los repositorios oficiales de debian y para posteriormente reproducirlo, instalamos también el paquete "mplayer". Abrimos una terminal y tecleamos:

$ su -
password:

# aptitude install youtube-dl mplayer
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se instalarán automáticamente los siguientes paquetes NUEVOS:
libconfhelper-perl libdvdread3 liblircclient0 liblogfile-rotate-perl mplayer-skin-blue
Se instalarán los siguiente paquetes NUEVOS:
libconfhelper-perl libdvdread3 liblircclient0 liblogfile-rotate-perl mplayer mplayer-skin-blue youtube-dl
0 paquetes actualizados, 7 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 4789kB de ficheros. Después de desempaquetar se usarán 10,7MB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.fr.debian.org etch/main liblogfile-rotate-perl 1.04-3 [19,1kB]
Des:2 http://security.debian.org etch/updates/main mplayer 1.0~rc1-12etch1 [4421kB]
Des:3 http://ftp.fr.debian.org etch/main libconfhelper-perl 0.12.5 [9708B]
Des:4 http://ftp.fr.debian.org etch/main libdvdread3 0.9.7-2 [56,0kB]
Des:5 http://ftp.fr.debian.org etch/main liblircclient0 0.8.0-9.2 [56,1kB]
Des:6 http://ftp.fr.debian.org etch/main mplayer-skin-blue 1.6-1 [221kB]
Des:7 http://ftp.fr.debian.org etch/main youtube-dl 2006.11.12-1 [5602B]
Descargados 4789kB en 46s (104kB/s).
Preconfigurando paquetes ...
Seleccionando el paquete liblogfile-rotate-perl previamente no seleccionado.
(Leyendo la base de datos ...
89094 ficheros y directorios instalados actualmente.)
Desempaquetando liblogfile-rotate-perl (de .../liblogfile-rotate-perl_1.04-3_all.deb) ...
Seleccionando el paquete libconfhelper-perl previamente no seleccionado.
Desempaquetando libconfhelper-perl (de .../libconfhelper-perl_0.12.5_all.deb) ...
Seleccionando el paquete libdvdread3 previamente no seleccionado.
Desempaquetando libdvdread3 (de .../libdvdread3_0.9.7-2_i386.deb) ...
Seleccionando el paquete liblircclient0 previamente no seleccionado.
Desempaquetando liblircclient0 (de .../liblircclient0_0.8.0-9.2_i386.deb) ...
Seleccionando el paquete mplayer-skin-blue previamente no seleccionado.
Desempaquetando mplayer-skin-blue (de .../mplayer-skin-blue_1.6-1_all.deb) ...
Seleccionando el paquete mplayer previamente no seleccionado.
Desempaquetando mplayer (de .../mplayer_1.0~rc1-12etch1_i386.deb) ...
Seleccionando el paquete youtube-dl previamente no seleccionado.
Desempaquetando youtube-dl (de .../youtube-dl_2006.11.12-1_all.deb) ...
Configurando liblogfile-rotate-perl (1.04-3) ...
Configurando libconfhelper-perl (0.12.5) ...
Configurando libdvdread3 (0.9.7-2) ...

Configurando liblircclient0 (0.8.0-9.2) ...

Configurando youtube-dl (2006.11.12-1) ...
Configurando mplayer-skin-blue (1.6-1) ...

Configurando mplayer (1.0~rc1-12etch1) ...
Configuring mplayer ...

# exit (Salimos del entorno root)


NOTA IMPORTANTE:
Si descargamos vídeos desde el portal www.youtube.com no tendremos problemas, pero si los descargamos desde el portal en español es.youtube.com nos dará un error, ya que éste script está adaptado para reconocer la URL www.youtube.com. La solución. más abajo.


2. Una vez instalado, accedemos a www.youtube.com y elegimos un vídeo. Fíjate que en la parte derecha de la pantalla hay un cajón con 2 direcciones; URL y Embed. Copia la dirección completa que aparece en el cajón URL y desde la consola construimos el comando para descargarnos el archivo:

$ youtube-dl http://www.youtube.com/watch?v=nWUsaIJg374
Retrieving video webpage... done.
Extracting video URL parameters... done.
Video data found at http://lax-v194.lax.youtube.com/get_video?video_id=nWUsaIJg374
Retrieving video data... 9117k of 9117k done.
Video data saved to nWUsaIJg374.flv

Nos habrá descargado el fichero "nWUsaIJg374.flv"

¿Qué pasa si queremos descargar vídeos del portal español es.youtube.com?
No nos dejará. Pero hay solución.

Nos logueamos como usuario root y ejecutamos éstos comandos:
$ su -
password:

# cp /usr/bin/youtube-dl /usr/bin/youtube-dl-es

Editamos el archivo que hemos creado y sustituimos en el siguiente trozo de código las "www" por "es".

# vi /usr/bin/youtube-dl-es

# Global constants
const_video_url_str = 'http://www.youtube.com/watch?v=%s'
const_video_url_re = re.compile(r'http://(?:www\d*\.)?youtube\.com/(?:v/|(?:watch(?:\.php)?)?\?v=)([^&]+).*')
const_login_url_str = 'http://www.youtube.com/login?next=/watch%%3Fv%%3D%s'
const_login_post_str = 'current_form=loginForm&next=%%2Fwatch%%3Fv%%3D%s&username=%s&password=%s&action_login=Log+In'
const_age_url_str = 'http://www.youtube.com/verify_age?next_url=/watch%%3Fv%%3D%s'
const_age_post_str = 'next_url=%%2Fwatch%%3Fv%%3D%s&action_confirm=Confirm'
const_video_url_params_re = re.compile(r'player2\.swf\?([^"]+)"', re.M)
const_video_url_real_str = 'http://www.youtube.com/get_video?%s'
const_1k = 1024
const_block_size = 10 * const_1k

Debe quedar así:
# Global constants
const_video_url_str = 'http://es.youtube.com/watch?v=%s'
const_video_url_re = re.compile(r'http://(?:es\d*\.)?youtube\.com/(?:v/|(?:watch(?:\.php)?)?\?v=)([^&]+).*')
const_login_url_str = 'http://es.youtube.com/login?next=/watch%%3Fv%%3D%s'
const_login_post_str = 'current_form=loginForm&next=%%2Fwatch%%3Fv%%3D%s&username=%s&password=%s&action_login=Log+In'
const_age_url_str = 'http://es.youtube.com/verify_age?next_url=/watch%%3Fv%%3D%s'
const_age_post_str = 'next_url=%%2Fwatch%%3Fv%%3D%s&action_confirm=Confirm'
const_video_url_params_re = re.compile(r'player2\.swf\?([^"]+)"', re.M)
const_video_url_real_str = 'http://es.youtube.com/get_video?%s'
const_1k = 1024
const_block_size = 10 * const_1k

Una vez terminado, grabamos el archivo y salimos. Accedemos al portal español es.youtube.com, elegimos un vídeo, copiamos la URL y construimos el comando:

# exit (Salimos del entorno root)

$ youtube-dl http://es.youtube.com/watch?v=12Z3J1uzd0Q
Retrieving video webpage... done.
Extracting video URL parameters... done.
Video data found at http://sjl-v16.sjl.youtube.com/get_video?video_id=12Z3J1uzd0Q
Retrieving video data... 24918k of 24918k done.
Video data saved to 12Z3J1uzd0Q.flv

Nos habrá descargado el fichero "12Z3J1uzd0Q.flv"


3. Para reproducir los 2 ficheros descargados aquí, utilizaremos el reproductor "mplayer". También funciona el VLC. Con el Kaffeine no se oye el sonido y todavía no he averiguado el por qué.

$ mplayer nWUsaIJg374.flv

$ mplayer 12Z3J1uzd0Q.flv

Desde konqueror, si no tenemos asociada la extensión .flv con mplayer, hacemos lo siguiente:
Botón derecho sobre el archivo .flv / PROPIEDADES / Picamos en el Icono de Configuración / en el cuadro "órden de preferencia de aplicación" picamos en AÑADIR / MULTIMEDIA / MPLAYER / ACEPTAR / ACEPTAR. Ya tenemos hecha la asociación.


4. Gracias a un comentario hecho por Andro en éste post, a continuación añado cómo convertir el vídeo descargado a formato mpg. Hay que instalar el paquete "ffmpeg". Desde una consola hacemos:

$ su -
password:

# aptitude install ffmpeg
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Construir la base de datos de etiquetas... Hecho
Se instalarán automáticamente los siguientes paquetes NUEVOS:
libavformat0d libdc1394-13
Se instalarán los siguiente paquetes NUEVOS:
ffmpeg libavformat0d libdc1394-13
0 paquetes actualizados, 3 nuevos instalados, 0 para eliminar y 0 sin actualizar
.
Necesito descargar 501kB de ficheros. Después de desempaquetar se usarán 1335kB.
¿Quiere continuar? [Y/n/?] y
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.fr.debian.org etch/main libdc1394-13 1.1.0-3+b1 [32,9kB]
Des:2 http://ftp.fr.debian.org etch/main libavformat0d 0.cvs20060823-8 [286kB]
Des:3 http://ftp.fr.debian.org etch/main ffmpeg 0.cvs20060823-8 [182kB]
Descargados 501kB en 6s (81,5kB/s).
Seleccionando el paquete libdc1394-13 previamente no seleccionado.
(Leyendo la base de datos ...
89253 ficheros y directorios instalados actualmente.)
Desempaquetando libdc1394-13 (de .../libdc1394-13_1.1.0-3+b1_i386.deb) ...
Seleccionando el paquete libavformat0d previamente no seleccionado.
Desempaquetando libavformat0d (de .../libavformat0d_0.cvs20060823-8_i386.deb) ..
.
Seleccionando el paquete ffmpeg previamente no seleccionado.
Desempaquetando ffmpeg (de .../ffmpeg_0.cvs20060823-8_i386.deb) ...
Configurando libdc1394-13 (1.1.0-3+b1) ...

Configurando libavformat0d (0.cvs20060823-8) ...

Configurando ffmpeg (0.cvs20060823-8) ...

# logout

Ahora para convertir el archivo hacemos:

$ ffmpeg -i nWUsaIJg374.flv video.mpg
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard
configuration: --enable-gpl --enable-pp --enable-pthreads --enable-vorbis --e
nable-libogg --enable-a52 --enable-dts --enable-libgsm --enable-dc1394 --disable
-debug --enable-shared --prefix=/usr
libavutil version: 0d.49.0.0
libavcodec version: 0d.51.11.0
libavformat version: 0d.50.5.0
built on Mar 26 2007 15:50:40, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-
21)

Seems that stream 1 comes from film source: 1000.00 (1000/1) -> 29.97 (30000/100 1)
Input #0, flv, from 'nWUsaIJg374.flv':
Duration: 00:03:45.0, bitrate: N/A
Stream #0.0: Audio: mp3, 22050 Hz, mono
Stream #0.1: Video: flv, yuv420p, 320x240, 29.97 fps(r)
Output #0, mpeg, to 'video.mpg':
Stream #0.0: Video: mpeg1video, yuv420p, 320x240, q=2-31, 200 kb/s, 29.97 fps( c)
Stream #0.1: Audio: mp2, 22050 Hz, mono, 64 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 6744 q=18.4 Lsize= 7564kB time=224.9 bitrate= 275.6kbits/s
video:5729kB audio:1757kB global headers:0kB muxing overhead 1.041009%

Se habrá creado el archivo "video.mpg", tal como especifiqué en la línea de comandos.


Más información:
$ youtube-dl --help
$ mplayer --help

Saludos y Suerte.
Domi - Gran Canaria (Islas Canarias)