Follow Us
youtube-python

Download de vídeos e playlists do YouTube com Python

Download de vídeos e playlists do YouTube com Python

Com certeza você já teve vontade de baixar um vídeo do YouTube para utilizar em outro lugar ou apenas para poder reproduzir offline. Existem diversos programas ou sites que fazem isso mas quando o número de vídeos começa a aumentar ou precisamos baixar uma playlist, talvez seja a hora de utilizar um programa feito por você mesmo. Para isso, existe a biblioteca PyTube.

Atenção: Este artigo é de caráter educacional e não deve ser utilizado para obter conteúdos protegidos por direitos autorais.

Para os mais ansiosos vamos ver logo como é simples baixar um vídeo usando o PyTube:

from pytube import YouTube
YouTube('sua_url').streams.get_highest_resolution().download()

Instalação do PyTube

Como boa prática, utilize sempre um ambiente virtual em todos os seus projetos. Se você não sabe como criar um utilizando o Pipenv, aprenda aqui

$ pipenv install pytube3
$ pipenv shell

Download de um vídeo

Cada link do YouTube possui, na verdade, um conjunto de streams de áudio e vídeo. Vamos listar todas as opções de stream disponíveis em uma url:

from pytube import YouTube

VIDEO_URL = 'https://www.youtube.com/watch?v=8EJ3zbKTWQ8&list='
yt = YouTube(VIDEO_URL)

for stream in yt.streams:
    print(stream)

Isso nos dá o seguinte resultado:

<Stream: itag="18" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.42001E" acodec="mp4a.40.2" progressive="True" type="video">
<Stream: itag="22" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.64001F" acodec="mp4a.40.2" progressive="True" type="video">
<Stream: itag="136" mime_type="video/mp4" res="720p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">
<Stream: itag="247" mime_type="video/webm" res="720p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="398" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.05M.08" progressive="False" type="video">
<Stream: itag="135" mime_type="video/mp4" res="480p" fps="30fps" vcodec="avc1.4d401f" progressive="False" type="video">
<Stream: itag="244" mime_type="video/webm" res="480p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="397" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.04M.08" progressive="False" type="video">
<Stream: itag="134" mime_type="video/mp4" res="360p" fps="30fps" vcodec="avc1.4d401e" progressive="False" type="video">
<Stream: itag="243" mime_type="video/webm" res="360p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="396" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.01M.08" progressive="False" type="video">
<Stream: itag="133" mime_type="video/mp4" res="240p" fps="30fps" vcodec="avc1.4d4015" progressive="False" type="video">
<Stream: itag="242" mime_type="video/webm" res="240p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="395" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.00M.08" progressive="False" type="video">
<Stream: itag="160" mime_type="video/mp4" res="144p" fps="30fps" vcodec="avc1.4d400c" progressive="False" type="video">
<Stream: itag="278" mime_type="video/webm" res="144p" fps="30fps" vcodec="vp9" progressive="False" type="video">
<Stream: itag="394" mime_type="video/mp4" res="None" fps="30fps" vcodec="av01.0.00M.08" progressive="False" type="video">
<Stream: itag="140" mime_type="audio/mp4" abr="128kbps" acodec="mp4a.40.2" progressive="False" type="audio">
<Stream: itag="249" mime_type="audio/webm" abr="50kbps" acodec="opus" progressive="False" type="audio">
<Stream: itag="250" mime_type="audio/webm" abr="70kbps" acodec="opus" progressive="False" type="audio">
<Stream: itag="251" mime_type="audio/webm" abr="160kbps" acodec="opus" progressive="False" type="audio">

Podemos escolher a stream de melhor qualidade e fazer o seu download:

video = yt.streams.get_highest_resolution()
video.download()

Para mais opções de filtros dos streams disponíveis você pode dar uma olhada no repositório do PyTube no github.

Download de uma playlist

Para obter os vídeos de uma playlist, basta obtermos uma lista de urls de cada vídeo:

from pytube import YouTube, Playlist

PLAYLIST_URL = 'https://www.youtube.com/playlist?list=PLyORnIW1xT6waC0PNjAMj33FdK2ngL_ik'
playlist = Playlist(PLAYLIST_URL)

Agora é só fazer como já vimos para baixar um vídeo a partir da url:

for url in playlist:
    video = YouTube(url)
    stream = video.streams.get_highest_resolution()
    stream.download(output_path='playlist')

Bônus: Download do áudio de um vídeo

Podemos, também, baixar apenas um arquivo de áudio:

audio = yt.streams.filter(only_audio=True)[0]
audio.download()

Código

O código completo deste artigo está disponível no github

Referências

Veja abaixo para mais informações sobre a biblioteca utilizada neste artigo:

  1. Repositório do PyTube no github
  2. Documentação oficial do PyTube no PyPI

2 thoughts on “Download de vídeos e playlists do YouTube com Python

  1. Reply
    Eduardo
    5 agosto 2020 at 08:52

    Muito bom o artigo. mas vale a pena citar um pequeno erro que eu tive com o Pytube.

    na linha 301 do arquivo extract.py, trocar:
    cipher_url = [
    parse_qs(formats[i][“cipher”]) for i, data in enumerate(formats)
    ]

    por:
    cipher_url = [
    parse_qs(formats[i][“signatureCipher”]) for i, data in enumerate(formats)
    ]

    1. Reply
      Matheus Vanzan
      5 agosto 2020 at 09:16

      Muito obrigado Eduardo! Quem encontrar o mesmo problema pode dar uma olhada nessa issue do PyTube no github.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *