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)

15 comentarios:

Anónimo dijo...

Con gmplayer yo puedo abrir los FLV desde un entorno gráfico (por ejemplo, doble click en el archivo en Konqueror).

Anónimo dijo...

Con el vlc se ven y oyen los archivos .flv. Yo no utilizo este programa para descargarme los vídeo de youtube, no es necesario. Si tras ver el vídeo en youtube vais, inmediatamente, al directorio /tmp, allí se encuentra el archivo del vídeo. Lo único que hay que hacer es llevarlo a otra ubicación y renombrarlo con la extensión .flv. ¡Ah!, y esto funciona sea cual sea la página del youtube sin necesidad de modificar scripts.

Anónimo dijo...

Cierto, me parece que ha sido esta misma mañana que el apt-get upgrade me ha actualizado el VLC a la versión 0.8.6a (estoy con Etch) y ya tiene los codecs de Flash Video incorporados.

Bueno, y para obtener los FLV hay un montón de métodos, todo depende de lo cómodo que sea para cada uno. A mí me gusta obtenerlo directamente de la caché del navegador (aunque mis directorios no coinciden con el de anónimo), pero la extensión VideoDownloader (y el widget equivalente para Opera) se usan bastante por ahí fuera.

Romario dijo...

Hola.
Mced. Gracias por la info. Al final tenía mal configurado el gmplayer. Ya funciona perfectamente. Edito el post.

Para el compañero anónimo.
He probado con el VLC y perfecto. Me gusta el truco que utilizas para descargarlo.
Muchas gracias por compartirlo.

Saludos.

Andro dijo...

Yo los videos los descargo con el plug-in de Iceweasel/Firefox Download Helper.

Despues el flv lo convierto en mpg con
ffmpeg -i video.flv video.mpg

Romario dijo...

Hola Andro.
El plugin que me dices no lo he probado aun. Si utilicé el Video Download pero nunca me funcionó.

He añadido a la guía el comando para convertir el video.

Muchas gracias por compartir tu experiencia.

Saludos.

Anónimo dijo...

Hola, yo hace tiempo hice un script para el kommander para descargar y convertir automáticamente los vídeos de varios sitios webs (es básicamente lo que se explica en este post pero con un sólo click de ratón).

La verdad es que hace mucho tiempo que no lo actualizo :-S y creo que ahora mismo no funciona con los vídeos de Youtube. A ver si después de los exámenes de septiembre saco algo de tiempo y lo actualizo, que tengo totalmente abandonado todo lo que he hecho (sólo hace falta ver la fecha de la última entrada en mi blog, que verguenza :-P).

En cualquier caso, es GPL, si alguien se anima a ayudar, bienvenido sea.

¡Ah! que se me olvidaba, la url:

http://www.khertz.net/archives/36

Un saludo.

Anónimo dijo...

Si pones -t al final del comando el nombre archivo descargado se cambia por el titulo que tenia el video en youtube.
Ej.: youtube-dl http://es.youtube.com/watch?v=12Z3J1uzd0Q -t
En vez de que darte un 12Z3J1uzd0Q.flv te qudara el tiulo_del_video.flv

Romario dijo...

Hola Franco.
He probado la opción que comentas y no me funciona. Lo único que he visto parecido en el "man" del comando es la opción -o

-o FILE, --output=FILE
output video file name

Saludos.
Domi

Romer Riera dijo...

Los archivos tienen un enlace de descarga como por ejemplo http://www. ...... Cuando se hace clic en este enlace, Windows muestra una ventana "Descarga de archivos" que te da dos opciones: Abrir o Guardar. Pregunta ¿ Existe algún programa ( reproductor ) que, metiendole este enlace de descarga, reproduzca el archivo sin abrir esta ventana de windows ?.
Gracias.
Romer

Anónimo dijo...

uy shusha,... no me atrevo a seguir todo ese procedimiento.. soy ocioso lo reconozco... para bajar utilizo bajaryotube.com/watch?.... luego lo reproduzco con el media coder

Romario dijo...

Hola Romer Riera.
Desconozco si hay algún programa para ello. Google quizás te pueda ayudar ;-)

Hola Anónimo.
Gracias por la info. Desconocía ese método.

Saludos y suerte.
Domi

publicidad en adwords dijo...

Muy util tu entrada .

Trucos facebook dijo...

Con gmplayer yo puedo abrir los FLV y es bueno}.

viagra online pharmacy dijo...
Este comentario ha sido eliminado por un administrador del blog.