Note: Remember that Youtube has terms and conditions, if the videos are not yours I do not recommend doing this, like Wallace said
There is a dependency-free lib called pytube , install using PIP, type in terminal or cmd:
pip install pytube
Script example:
from pytube import YouTube
# Esta parte não é necessária é apenas usada para entender o exemplo
from pprint import pprint
yt = YouTube("http://www.youtube.com/watch?v=Ik-RsDGPI5Y")
# Uma vez selecionado você pode ver todos formatos e resoluções disponíveis do video que deseja acessar
print(yt.get_videos())
# Exemplos de saídas possíveis
# [<Video: MPEG-4 Visual (.3gp) - 144p>,
# <Video: MPEG-4 Visual (.3gp) - 240p>,
# <Video: Sorenson H.263 (.flv) - 240p>,
# <Video: H.264 (.flv) - 360p>,
# <Video: H.264 (.flv) - 480p>,
# <Video: H.264 (.mp4) - 360p>,
# <Video: H.264 (.mp4) - 720p>,
# <Video: VP8 (.webm) - 360p>,
# <Video: VP8 (.webm) - 480p>]
# O nome do video é automaticamente gerado a partir do titulo, mas você pode sobreescrever
# view the auto generated filename:
print(yt.filename)
# Pulp Fiction - Dancing Scene [HD]
# Renomeia:
yt.set_filename('Dancing Scene from Pulp Fiction')
# Você pode ficar a lista por tipo
print(yt.filter('flv'))
# [<Video: Sorenson H.263 (.flv) - 240p>,
# <Video: H.264 (.flv) - 360p>,
# <Video: H.264 (.flv) - 480p>]
# Note que a lista é ordenada da menor resolução para maior
# Se esta procurando a maior resolução pelo formato faça isso:
print(yt.filter('mp4')[-1])
#Saída:
# <Video: H.264 (.mp4) - 720p>
# Você pode ver todos formatos por resolução
print(yt.filter(resolution='480p'))
# [<Video: H.264 (.flv) - 480p>,
# <Video: VP8 (.webm) - 480p>]
# E pode pegar um video por resolução e formato
video = yt.get('mp4', '720p')
# NOTE: get() só irá reconhecer os formatos e resoluções disponiveis
print(yt.videos)
#[<Video: MPEG-4 Visual (.3gp) - 144p>,
# <Video: MPEG-4 Visual (.3gp) - 240p>,
# <Video: Sorenson H.263 (.flv) - 240p>,
# <Video: H.264 (.flv) - 360p>,
# <Video: H.264 (.flv) - 480p>,
# <Video: H.264 (.mp4) - 360p>,
# <Video: H.264 (.mp4) - 720p>,
# <Video: VP8 (.webm) - 360p>,
# <Video: VP8 (.webm) - 480p>]
# Since we have two H.264 (.mp4) available to us... now if we try to call get()
# on mp4...
video = yt.get('mp4')
# MultipleObjectsReturned: 2 videos met criteria.
# In this case, we'll need to specify both the codec (mp4) and resolution
# (either 360p or 720p).
# Okay, let's download it! (a destination directory is required)
video.download('/tmp/')
By command line:
Specifies the resolution:
$ pytube -r 720p http://www.youtube.com/watch?v=Ik-RsDGPI5Y
Specify where you want to save:
$ pytube -e mp4 -p ~/Downloads/ http://www.youtube.com/watch?v=Ik-RsDGPI5Y
Specifies name to be saved:
$ pytube -e mp4 -f Dancing Scene from Pulp Fiction http://www.youtube.com/watch?v=Ik-RsDGPI5Y
Specifies the resolution and desired format:
$ pytube -e mp4 -r 720p http://www.youtube.com/watch?v=Ik-RsDGPI5Y