![pytube](https://s3.amazonaws.com/assets.nickficano.com/pytube_logo.png) # A lightwight, dependency-free YouTube Video download library, written in Python. Downloading videos from YouTube shouldn't require some bloatware application, its usually a niche condition you need to do so in the first place. ## Background After missing the deadline to register for PyCon 2012, I decided to write what became PyTube and crawler to collect all the YouTube links for the talks on [PyVideos.org](http://pyvideo.org/). To avoid having to encode them to mp4 (so I could watch them on my iPhone) I wrote it so you could specify an encoding format. In recently weeks interest has picked up in the project, so I decided to dedicate more time to further its development and actively maintain it. ### Philosophy My only real goal for this is to never require any third party dependancies, to keep it simple and make it reliable. ### Roadmap The only features I see implementing in the near future are: - Allow it to run as a command-line utility. - Making it compatible with Python 3. ## Usage Example ``` python from youtube import YouTube # not necessary, just for demo purposes from pprint import pprint yt = YouTube() # Set the video URL. yt.url = "http://www.youtube.com/watch?v=Ik-RsDGPI5Y" # Once set, you can see all the codec and quality options YouTube has made # available for the perticular video by printing videos. pprint(yt.videos) #[, # , # , # , # , # , # , # , # ] # The filename is automatically generated based on the video title. # You can override this by manually setting the filename. # view the auto generated filename: print yt.filename #Pulp Fiction - Dancing Scene [HD] # set the filename: yt.filename = 'Dancing Scene from Pulp Fiction' # You can also filter the criteria by filetype. pprint(yt.filter('flv')) #[, # , # ] # and by resolution pprint(yt.filter(res='480p')) #[, #] # to select a video by a specific resolution and filetype you can use the get # method. video = yt.get('mp4', '720p') # NOTE: get() can only be used if and only if one object matches your criteria. # for example: pprint(yt.videos) #[, # , # , # , # , # , # , # , # ] # Notice we have two H.264 (.mp4) available to us.. now if we try to call get() # on mp4.. video = yt.get('mp4') # MultipleObjectsReturned: get() returned more than one object -- it returned 2! # In this case, we'll need to specify both the codec (mp4) and resolution # (either 360p or 720p). # Okay, let's download it! video.download() # Downloading: Pulp Fiction - Dancing Scene.mp4 Bytes: 37561829 # 37561829 [100.00%] # Note: If you wanted to choose the output directory, simply pass it as an # argument to the download method. video.download('/tmp/') ```