Descargar videos de Youtube (y otros sitios) desde una terminal

Bueno, vamos con una nueva entrada. Esta vez vamos a ver cómo hacer para bajar videos desde una terminal. Si lo que quremos es bajar los videos de Youtube, lo más cómodo va a ser instalarse “youtube-dl”, asi que como ya es costumbre, Linux nos lo pone fácil. En Debian/Ubuntu será:

$ sudp apt-get install youtube-dl

En caso de que de esta manera no instalemos la última versión porque nuestros repositorios no sean los más actualizados, tendremos que actualizar a mano la versión de youtube-dl

 $ sudo youtube-dl -U

Ahora copiamos la URL del vídeo que nos queramos descargar y la pegamos detrás de la orden :

$ youtube-dl http://www.youtube.com/watch?v=R4rs8FGb86A

(Por cierto, no he visto el video de arriba, pero parece interesante).

Si queremos usar wget, podríamos usar:

$ wget -O output_file.extension $(youtube-dl -g http://www.youtube.com/watch?v=R4rs8FGb86A)

ya que $(  ) usará como variable lo que se obtenga de lo que se ejecute dentro de los paréntesis. La opción -g nos da sólo la url de descarga  video, pero sin bajárselo, entonces lo que hacemos es conseguir la URL del video con youtube-dl y la usamos para  wget.

Alguien podrá decir, “bueno, yo uso dirpy.com para bajarme los videos, que tiene muchas opciones”. Pues youtube-dl también las tiene, solo hay que mirar el su página del man.

Además podríamos crear un fichero de texto plano con todas las URLs de los videos que queramos bajarnos (una por línea), y con un bucle, nos podemos bajar todos. No lo he probado, pero esto debería funcionar:

 $ for i in $(cat urls.txt); do youtube-dl $i; done

Se podría elaborar más y currárselo para que se pueda ir poniendo nombres a los videos a medida que nos lo vamos bajando, si lo combinamos con wget.

¿Qué pasa si lo que queremos no es de youtube, sino de una web cualquiera que requiere login, por ejemplo los  videos de cursos de coursera?

Pues aquí entra en juego el poder de wget. También vamos a necesitar las famosas Cookies en el formato de Netscape:

-Para ello yo he usado Chrome ( o Chromium) y desde la Chrome Web Store instalamos la EXTENSION “cookies.txt export”.

– Vamos a la página en cuestión y nos logeamos con nuestro nombre de usuario y contraseña.

– Vamos a la página donde estén los videos y ahí hacemos uso de la extensión (arriba  a la derecha saldrá el iconito de la extensión cookies.txt).

– Pinchamos sobre ella y nos saldrá una ventanita con información de las cookies para esa página. Copiamos ese texto en un fichero que creemos como cookies.txt . Este será el fichero que usarmeos para wget.

– Ahora necesitmos los links a los videos. A mi se me ocurre que estando en la página de descarga de los videos, presionamos “Ctrl +  U” para obtener el código fuente de la página, lo copiamos a un fichero de texto temp.txt y extraemos los links con grep:

$ grep '.mp4' temp.txt > urls.txt

y lo editamos para que sólo nos quede en cada linea  algo parecido a “https://resto/de_la/direccion/del_video/id=#” ( ¡sin las comilllas! )

$ wget --load-cokies cookies.txt -i urls.txt

Para el nombre de los archivos como ya he dicho antes,  habría que hacer algo un poco mas elaborado, pero seguro que trasteando un poco se puede conseguir.

Pues gracias por leer hasta aquí, y espero que sea útil. Cualquier mejora, comentario,  idea o lo que sea, será censurad….digo bienvenida!

Advertisements

¡Inauguramos el blog!

¡Hola a todos! Si habéis leído hasta aquí, muchas gracias. Ya es más de lo que me esperaba.  Este blog nace con la idea de organizar y mantener vivo este cuadernito que tengo aquí a mi derecha. No lo ves, pero yo te voy a contar lo que contiene. Básicamente son esos comandos de Linux, Jmol, Octave, Gnuplot, etc, que sabemos que existen pero que como hacía lustros que no los usábamos, se nos ha olvidado la sintaxis y nos toca volver a buscar en el man o en algún buscador. Así que esta será la semilla que plante en este blog, y espero que pueda servir de ayuda en algún momento puntual a cualquier persona del planeta. Hacia dónde evolucionará, ya no te lo puedo decir, pero esperemos que vaya dando frutos. El tiempo lo dirá.

Para sacarle el jugo a este blog, (que aún tiene poco) hay que ser usuario de Linux (posiblemente los mismos comandos, funcionen para iOS, pero no lo puedo asegurar).

Y como lo mejor es predicar con el ejemplo, vamos a abrir boca con la siguiente situación. Tenemos  “un montón” de archivos, como

foto_casa_1.jpg foto_casa_2.jpg foto_casa_3.jpg
foto_casa_4.jpg foto_calle_1.jpg foto_calle_2.jpg
foto_calle_3.jpg foto_calle_4.jpg foto_jardin_1.jpg
foto_jardin_2.jpg foto_jardin_3.jpg foto_jardin_4.jpg 

y queremos borrar todos excepto los de “casa”.

En una terminal escribiremos:

shopt

(Mnemonic shopt = SHell OPTions)

saldrá una lista. Nos fijamos si extglob está en on. Si es así, perfecto. Si no, escribiremos:

shopt -s extglob

para “setear” la opción de extglob, la cual activa las “Pathname Expansion

Ahora, antes de borrar nada en la terminal siempre conviene ver qué es lo que vamos a borrar, porque aquí no hay papeleras de reciclaje. Así que hacemos:

ls foto_!(casa)*.jpg

y nos debería aparecer todos los archivos con ese patrón y que  NO contengan “casa” en donde le hemos indicado.Si nos aparecen los ficheros que queremos borrar (es decir, los foto_calle_*.jpg y foto_jardin_*.jpg) , entonces ya podemos sustituir “ls” por “rm“. Con la siguiente combinación de teclas, lo haremos más rápido:

Flecha arriba para que aparezca la última orden que hemos introducido (debería ser justo la orden que nos muestra los ficheros que queremos eliminar)

Ctrl-A para ir al principio de la línea.

Alt-D para eliminar la palabra sobre el cursor (en este caso debería ser “ls“)

– Ya sólo queda escribir rm y la linea debería quedar tal que así:

 rm fotos_!(casa)*.jpg 

Podemos hacerlo un poco más complejo. Si lo que queremos es mantener las de casa y las de jardín, emplearemos el operador | para separar los patrones de búsqueda, de manera que para listar todos los elementos excepto los que incluyan casa o jardín escribiremos:

 ls fotos_!(casa|jardin)*.jpg 

si aparecen los elementos que queremos borrar, solo queda sustituir ls por rm ( o por cp si lo que queremos es copiarlos), etc.
Por supuesto, esto es un ejemplo muy sencillote, pero pueden darse situaciones más complejas donde esta opción sea realmente útil. Para más información al respecto busca en:

 man bash 

y dentro de esa página del manual puedes buscar en el apartado “pathname expansion”.
¡Todas las ideas, comentarios y/o mejoras son más que bienvenidas!