Tutorial

Descarga contenido de Youtube con Python

Pafy es una fantástica librería que dotara nuestro intérprete de python con las instrucciones necesarias, para traer información de nuestros enlaces como:

  • Numero de vistas
  • Duración
  • Rating
  • Autor
  • Thumnails
  • Keywords
  • Playlists

También nos permite extraer el audio y vídeo de nuestros enlaces, con la opción de elegir la resolución, bitrate y formatos disponibles. Aunque según el creador, la libreria permite trabajar con enlaces reestringidos, hay algunos videos (como VEVO) que no los puede procesar por completo. Sin embargo, considero que es la mejor libreria que existe para este fin, ademas de que no necesita dependencias :D.

Instalación

La instalación tradicional para nuestro interprete, es mediante Pypi, ingresando el siguiente comando:

pip install pafy

Si deseamos también podemos instalarlo desde el source code.

Obtener Metadatos del enlace.

Lo primero que haremos es conseguir un video de youtube:

Ahora vamos a importar la librería y cargar nuestro enlace, de la siguiente forma:

>>> import pafy
>>> enlace = "https://youtu.be/bYP4wKD-6J8"
>>> video = pafy.new(enlace)

También existe la posibilidad de cargar el enlace, con el token o identificador del vídeo, en lugar de usar toda la URL, por ejemplo: bYP4wKD-6J8.

Una vez almacenado en memoria, mediante la variable video, podemos trabajar con el enlace y acceder a los atributos disponibles:

>>> video.viewcount
16456885
>>> video.videoid
'bYP4wKD-6J8'
>>> video.likes
225694
>>> video.username
u'devinsupertramp'
>>> video.rating
4.95975160599
>>> video.duration
u'00:03:04'
>>> video.dislikes
2294
>>> video.description
u"Watch the behind the scenes of our Assassin's Creed 4 parkour vid in the link below.\nhttp://youtu.be/WaISBW3Z_14\n\nWe shot this video in 4K with the Canon 1D-C. First time shooting in 4K for Youtube.\n\nSuper thanks to Ubisoft, who makes Assassin's Creed 4: Black Flag for giving us the opportunity to make this video happen. http://www.youtube.com/watch?v=9KX1OQDLjAY\n\nCheck out the trailer above for the game! You get to be a pirate in the Caribbean, and have your own pirate ship! That's why we featured all the pirate stuff in the video :) \n\nAssassin's Creed 4 Black Flag comes out October 29. It will be on current and next gen systems!\n\nVideo features Chris Romwell. He is awesome, and the first time I've worked with him. Check out his youtube channel in the link below where he does free running/parkour.\n\nhttps://www.youtube.com/CBRstuntteam\n\nThe AWESOME costume was made by my friend Allison Dredge! Make sure to check out her facebook page, and make sure to tell her she should work with me again! :) :)\nhttps://www.facebook.com/allisondredgecostumes\n\nMy friend Stephen Anderson wrote the music for this video!\nhttp://www.stephenjanderson.com\n\nDownload the song in the link below!\nhttp://stephenjanderson.bandcamp.com/track/the-black-flag\n\nIn the past I have used athlete Ronnie Shalvis in my other Assassin's Creed videos. He however is recovering from an injury still, and we thought it would be best for him to recover fully before we worked together again. But he is good friends with Chris Romwell, and Ronnie actually suggested him, for us to use.\n\nBehind the Scenes video by Parker Walbeck! He is my right hand man and shoots everything with me now! He filmed and edited this video! He also has his own channel, make sure to subscribe and check out his stuff.\n\nhttps://www.youtube.com/pawalbeck\n\nWe had the chance to fly down to Comic-Con San Diego, and shoot this there. We got to work with some of the Assassin's Creed team on the production of this video, and we got to film on the Star of India for the Pirate Ship scenes. It was an amazing opportunity, and super thankful for Ubisoft/Assassin's Creed trusting us with their character from their game! Honestly can't wait for it!\n\nThis was all shot on a Canon 1DC, in 4K. Most of it was shot on a Canon 16-35mm. We shot in super low light, often around 6400 ISO.\n\nMy friend Jared Moench did the visual effects shot of Chris/Edward jumping from the building, contact him in this link:\nmissionmoench@gmail.com\n\nSpecial thanks to Larry Shapiro for helping get permission for a couple places that we asked, everything else was spur of the moment, asking for forgiveness instead of permission :)\n\nAnd last but not least, make sure to follow me on twitter and facebook, it's the cool thing to do these days :)\nhttps://www.facebook.com/devinsupertrampyoutube\nhttp://twitter.com/devinsupertramp\n\nThis video was sponsored by Ubisoft.\n\nFor business enquires ONLY, contact me here: devinsupertramp@gmail.com"

  • title: devuelve el titulo del vídeo
  • duration: devuelve la duración del vídeo
  • viewcount: devuelve el numero de vistas totales
  • username: devuelve el nombre de usuario
  • description: devuelve la descripción del vídeo
  • likes: devuelve el numero de likes
  • dislikes: devuelve el numero de dislikes

Estos son algunos de los atributos disponibles, si desean ver todos los atributos que dispone pafy, recomiendo seguir el siguiente enlace.

Descargar audio/vídeo.

Para descargar los vídeos de nuestro enlace, tenemos que elegir el formato y resolución. Esto se hace de dos formas, la primera es mediante el método getbest, el cual nos retorna el mejor formato en cuanto a calidad, como en el siguiente ejemplo:

>>> video.getbest()
normal:mp4@1280x720

La segunda forma es mediante una lista de posibles formatos y elegir el que nos convenga, haciendo uso de el atributo streams:

>>> video.streams
[normal:mp4@1280x720, normal:webm@640x360, normal:mp4@640x360, normal:flv@320x240, normal:3gp@320x240, normal:3gp@176x144]

Una vez seleccionada la opción, vamos a crear otra variable para almacenar dicha elección y posteriormente descargarlo con el metodo download.

>>> archivo = video.getbest() # o video.streams[0]
>>> archivo.download()

El método download, almacena en el directorio donde fue ejecutado el interprete o script, el archivo con la resolución que hayamos elegido. Sin embargo, podemos cambiar el destino de la descarga mediante el argumento filepath, donde su valor es la ruta completa (no relativa) del directorio.

filepath="/home/aaron/Descargas/"

Hasta ahora hemos programado para obtener vídeo, en caso de que busquemos descargar el audio, disponemos de dos opciones similares a lo anterior:

>>> audio = video.getbestaudio()
>>> audio.bitrate
u'256k'
>>> audio = video.audiostreams
>>> audio
[audio:m4a@256k, audio:m4a@128k]

Según el formato o calidad, hacemos uso del mismo método download para proceder con la descarga, disponiendo también del mismo atributo filepath.

>>> audio
[audio:m4a@256k, audio:m4a@128k]
>>> audio[0].download()
u"Assassin's Creed 4 Meets Parkour in Real Life - Comic-Con in 4K.m4a"]

En realidad su uso es bastante sencillo, no hay mucha ciencia, aunque si deseamos hacer operaciones mas concretas sugiero leer la documentacion.

Hemos llegado al final del tutorial, espero les haya sido de gran utilidad, he probado bastantes librerias similares, pero sin dudas esta es la mejor, si tienes interés en ayudar al creador puedes hacerlo en el repositorio oficial.

Compartelo en:    

Acerca del Autor

Aarón Díaz R Software Developer

Soy desarrollador de software con experiencia en bases de datos y lenguajes de programación como Python, Java SE, Javascript, C y PHP.

  Comentarios



"El ser de las cosas, no su verdad, es la causa de la verdad en el entendimiento."

- Santo Tomás de Aquino