Una forma de bajar videos de YouTube para aprender

Como bien dice el título del post, este forma de bajar videos de youtube no es de las mejores, sino que se trata de una forma de aprender como funciona los programas para este fin como los que hemos visto aquí (youtube-dl,  que por cierto tienen muchas posibilidades y es excelente, lo recomiendo).

El método consiste en usar comandos comunes de GNU/Linux para este fin, como lo son curl y muchas utilidades de bash y python que pueden servir para realizar scripts. Cabe destacar que el método no es automático sino, requiere de que el usuario intervenga.

Primero, localizamos un video para hacer la «prueba».

video_target

Después obtenemos el contenido de la página por medio de un script que lo guardamos y lo ejecutaremos de la siguiente manera:

"nombre del script" "url de youtube"
Ejemplo:
./script_url https://www.youtube.com/watch?v=1r-bWx3WZfQ

#!/bin/bash
ip=$(curl ifconfig.me)
for ((i=0;i<=10;i++))
do
curl -s $1 | grep "r$i---" | grep "expire" | grep "$ip" | grep "http" | grep "ratebypass" | grep "itag"
done

Descripción del script:

Se establece una variable para la ip que se usará pronto, seguido se comienza un bucle para probar diferentes números en la variable «$i», después la siguiente linea es para obtener el contenido y los filtros de palabras para «facilitar» la localización del enlace que nos interesa.

Cuando ejecutamos el script anterior nos devuelve una salida así:

código_obtenido

Bueno, pensarán que esto no tiene sentido, pero en realidad es más fácil de lo que parece. De la salida que obtuvieron, buscamos, seleccionamos y copiamos un supuesto enlace que se esconde en el contenido, por lo general tiene esta forma:

http%3A%2F%2Fr2---sn-j5caxvoq5-2ute.googlevideo.com%2Fvideoplayback%3Fitag%3D5%26sver%3D3%26source%3Dyoutube%26mv%3Dm%26id%3Dd6bf9b5b1dd665f4%26ip%3D190.XXX.XX.XX%26key%3Dyt5%26upn%3DOPyez7xDXx0%26expire%3D1394709761%26sparams%3Did%252Cip%252Cipbits%252Citag%252Csource%252Cupn%252Cexpire%26ms%3Dau%26fexp%3D935640%252C927904%252C932250%252C910207%252C927860%252C916611%252C937417%252C913434%252C936910%252C936913%252C902907%252C934022%26mt%3D1394685288%26signature%3D0A96F682936F3E20015E95DC15AC3D291372CDD5.BF5B9EFF421155747A2267148C8F35B018D4A689%26ipbits%3D0

En realidad se trata de muchos enlaces así, pero no todos funcionan. Puede ser un poco complicado buscarlo, así que para este trabajo debemos encontrar las palabras http, ipbits, upn, signature y que terminen con varios caracteres y números de la forma BF5B9EFF421155747A2267148C8F35B018D4A689; ya con estos objetos en el supuesto enlace, lo copiamos.

Hay que notar que muchas veces el enlace puede ser erróneo, por lo menos en mi caso tuve que hacerlo con 3 enlaces distintos, sin embargo, funciona.

Ese código que copiamos se trata en realidad de una dirección a un recurso (que en este caso es el video), sin embargo, está escrita en forma de caracteres para que los use el lenguaje HTML, como por ejemplo los números que comienzan con el signo de porcentaje (%).

Como lo que queremos es una dirección que «legible» tipo «http://», debemos convertir esos códigos en carácteres, por lo que lo haremos con un script hecho en python:

#!/usr/bin/python
def parse_conv(dvar):
df=""
count=0
global chain
chain=""
for dc in dvar:
if dc=="%" and count==0:
count=1
elif count==1 or count==2:
df=df+dc
if count==1:
count=2
else:
count=0
chf=chr(int(df,16))
chain+=chf
df=""
else:
chain+=dc
dvar=input("Código a convertir: ")
parse_conv(dvar)
parse_conv(chain)
print(chain)

Igual que con el otro script, lo guardan y lo ejecutan. Les aparecerá algo así, justo allí le pegan la dirección anterior y le dan enter; les aparecerá una dirección tipo «http://»:

direccion_legible

Con esto utilizaremos wget para descargar el video, de la siguiente manera:

wget -c "http://r2---sn-j5caxvoq5-2ute.googlevideo.com/videoplayback?itag=5&sver=3&source=youtube&mv=m&id=d6bf9b5b1dd665f4&ip=190.XXX.XX.XX&key=yt5&upn=OPyez7xDXx0&expire=1394709761&sparams=id,ip,ipbits,itag,source,upn,expire&ms=au&fexp=935640,927904,932250,910207,927860,916611,937417,913434,936910,936913,902907,934022&mt=1394685288&signature=0A96F682936F3E20015E95DC15AC3D291372CDD5.BF5B9EFF421155747A2267148C8F35B018D4A689&ipbits=0"

decarga_wget

Esperamos que termine y tendremos nuestro video descargado de youtube con un nombre bastante extraño:

video_raro

Lo renombramos y vemos que es el mismo video que el del enlace, por tanto, ya comprobamos que es una forma díficil pero útil si se desea saber como funciona este tipo de programas.

video_prueba

Espero que les ayude.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Himekisan dijo

    Buen post, yo prefiero un metodo mas simple busco el video en el navegador y lo reproduzco luego en la terminal:
    #lsof | grep Flash
    luego copio el proceso y me da el flv
    cp /proc/xxxxx/fd/xx /ruta/a/guardar.flv

    1.    @world dijo

      no me sirvió, me sale plugin-co 25074 me mem, ese mem debería ser un file descriptor.
      de todas formas usando du -hL /proc/25074/fd/* ninguno tiene el tamaño para ser un video de Youtube, alguien sabra porque no sale el FD?

    2.    Anonimo dijo

      Yo desde hace media decada uso jdownloader para descargar miles de videos y peliculas mientras estudio. Claro que para los que prefieren usar la terminal no es una herramienta valida, ademas de no ser la mas liviana (requiere unos 100 mb de ram con todo y sistema).

  2.   Blackneto dijo

    No es de lo mejor, pero existe una extensión para Firefox llamada Easy Youtube Video Downloader Express…

    Dejo la liga: https://addons.mozilla.org/es/firefox/addon/easy-youtube-video-download/

    A mí ya me sacó de un apuro… Saludos desde México

  3.   marcos dijo

    a mi siempre me a gustado «parsear» las paginas web, es indiscutible que este conocimiento parsear(webs)+linux permite imaginar pequeños scripts que hacen cosas poderosas 😀 (bot con fines no malisiosos)

    en mi web subi este pequeño script en php que «solo muestra» la contraseña vpn gratuita de «vpnbook» que cambia cada sierto tiempo, lo que espero hacer despues es que me lo envie por mail a mi cel cada dia a las 7am, o por sms mediante la pagina de movistar (mediante otro bot) :D.

    pagina
    http://rojosbar.com/AL/1.php

    Codigo
    http://paste.desdelinux.net/4940

    tambien pueden correr el script desde su computadora con el comando

    php SCRIPT.php

    donde SCRIPT.php representa el nombre del archivo con el codigo php

    —————
    otro script (muy verde) que realize para bajar «paginas de revistas» de ISSUU y guardarlas en PDF (por que la version flash que muestran en su web no me agrada)

    Ver el video del script php en ejecución
    https://www.youtube.com/watch?v=h82r41UOWLQ

    el codigo
    http://paste.desdelinux.net/4941

  4.   Cost Granda dijo

    youtube-dl [video]
    para que mas? simple y eficaz 🙂
    Pero te felicito por el esfuerzo

  5.   hola dijo

    yo uso jdownloader

  6.   c4explosive dijo

    Aquí dejo el script en python nuevamente, porque me percaté que el que puse no tiene tabulaciones.

    http://paste.desdelinux.net/4942

  7.   juan dijo

    Una forma más facil y sin programas.

    1) Click derecho en el video.
    2) Ir a «Inspeccionar elemento»
    3) Ubicarte el el Tag Video
    4) Ir a la propiedad SRC y copiar ese link (si quieres saltarte los pasos 5 y 6, simplemente anda a la consola y escribe wget y el link copiado)
    5) Abre ese link en otra pestaña
    6) Click derecho – > Guardar video como… > listo, a disfrutar.

  8.   Dernalis dijo

    Un post genial, aunque me parece que puede ser bastante confuso para la audiencia que lo puede aprovechar.
    Ya en el post queda claro que hay mejores formas de descargar vídeos de Youtube. Lo que pretenden es mostrar las posibilidades de linux para obtener datos de una web.

    Un pequeño ejemplo como aporte:
    curl -s http://rss.thepiratebay.se/101 | grep magnet | grep link | sed -r «s/^.*(.+)$/\1/g» | while read line; do echo transmission-remote -a $line; done

    Saca del feed rss de thepiratebay todos los enlaces magnet de música, los últimos 60, y muestra el comando para añadirlos a transmission. si quitamos «echo» los añade directamente, cuidado.
    Se que se puede hacer con Flexget o similares, pero no se trata de eso, se trata de determinar la información que se quiere sacar de la web y buscar la forma de aislarla con las herramientas que tenemos en linux.

    Espero no haberme extendido ni inmiscuido demasiado.

  9.   Nsz dijo

    Y no seria mas facil utilizar Youtube-Dl ?

    Para descargar video:
    Youtube-dl [URL del video]

    Para descargar unicamente el audio:
    youtube-dl -x –audio-format mp3 [URL del video]

  10.   @world dijo

    Buen post, que nos ayuda a comprender mejor.

  11.   geremias dijo

    Yo uso CLIPGRAB y si de consola se trata uso el comado clive o cclive. No necesito ningun script 🙂

  12.   kid_goth dijo

    La mayoría son aburridos u.u, si esta bien ya hay muchos scripts y software que cumplen con la función pero al menos se han preguntado como lo hacen? u.u…

    Bueno esta forma no la conocía, voy a probarla y sin embargo en mi visita a youtube por la Developer tool he visto que tienen un api (REST creo) te da mucha información del vídeo y pues de paso el link hacia el cdn del mismo.

    Voy a probar esto y a continuar con mi script propio de descargas del mismo con algo hecho y entendido por mi jeje. Saludos y buen articulo