Download de Videos do Youtube com Python

As vezes me impressiono com a facilidade de coisas que podemos fazer hoje em dia. Lembro-me da dificuldade que tínhamos para poder baixar um vídeo do YouTube, tinha que baixar, instalar programa...

Existe uma biblioteca do python chamada pytube, que permite realizar downloads de vídeos do Youtube, e ainda definir a qualidade do vídeo!! Além de realizar o download somente do áudio, caso queira, achei muito bacana.

O código abaixo é uma simples demonstração do que podemos fazer, mas as possibilidades são inúmeras!!

from pytube import YouTube
import os

# Obtém informações do vídeo em um objeto do tipo Youtube
yt = YouTube("https://www.youtube.com/watch?v=nyet-Sle7Sg")

# Define a pasta onde os vídeos serão baixados
pasta_videos = os.getcwd() + os.sep + "videos"

# Recupera a maior resolução disponível para o video
video = yt.streams.get_highest_resolution()

# Realiza o download do vídeo na pasta definida
video.download(output_path=pasta_videos)

o que é o os.sep?

Ele define o separador dos diretórios de acordo com o sistema operacional. Exemplo: Window -> c:\pasta_projeto\videos Linux -> /home/pasta_projeto/videos Perceba que o Windows usa como separador a barra invertida '\\', e o Linux a barra normal '/' o `os.sep` pega esse valor de forma automática de acordo com o sistema em que o script esteja sendo executado
Ótima explicação se for usar o windows use r'c:\Users\projeto' o r antes da string impede de a \ ter comportamentos insperados. Vale também conferir a documentação da os https://docs.python.org/3/library/os.html

Como faço para executar esse código, desculpa eu sou iniciante

Você só precisa salvar em algum arquivo .py, por exemplo video_downloader.py Depois disso, é só rodar esse arquivo usando o Python (que deve estar instalado, mas é bem simples de instalar) Então é só digitar no CMD ou algum terminal bash: python video_downloader.py ou python3 video_downloader.py Então você teria que colocar a URL do vídeo no código cada vez que quiser baixar algum video.
Show de bola meu consagradado, brigadão!!!
Também coloquei para rodar, mas não sei onde ele salvou ou se funcionou. (Sou iniciante kkk) E também fiz uma alteração. Mudei o local onde o link está colocado e coloquei a função input. Essa pasta tem que existir no meu diretorio?
Acabei de ver que ele baixou na mesma pasta que criei o programa. Mas eu quero que ele baixe numa pasta especifica.
Na variável pasta_video vc bota o caminho do local que vc quer que ele saia pode ser em string r'caminho' usa o r antes das '' se vc usar windows

Muito interessante, bem mais fácil do que caçar algum site na internet que faça isso!

Gostaria de sugerir uma pequena melhoria. Talvez fosse mais prático poder passar o link do vídeo como um argumento de linha de comando ao invés de ter que alterar o código. Ficaria mais ou menos assim:

# ...

import sys

try:
    # o número 2 é porque é o terceiro argumento, afinal os dois primeiros já são ocupados com `python` e o nome do arquivo
    link = sys.argv[2]
except IndexError:
    print(
        "Por favor insira o link do vídeo.\n"
        "Ex: python yt_downloader.py \"http://youtube.com/link-do-vídeo\""
    )
    sys.exit()

# Obtém informações do vídeo em um objeto do tipo Youtube
yt = YouTube(link)

# ...

Claro, ainda precisaria tratar um possível erro caso o link estivesse errado.

Obrigado pela contribuição do seu código, é como eu disse, as possibilidades são inúmeras, essa ideia de passar o link como argumento de linha de comando realmente é massa demais

Eu não conhecia essa ferramenta. Eu geralmente uso o Youtube-dl para baixar Videos ou fluxo de vídeos de maneira geral, pois ele não serve só para o YouTube, tem também o Yt-dlp que é um Fork do anterior citado, porém sem o bloqueio do YouTube na limitação de taxa de Download.

A vantagem que vi, é a praticidade/facilidade em realizar o download. Além também, de ser super customizável, considerando que é programação não há limites!!

Gostei da dica, muito obrigado! Muito prático! Dá até pra desenvolver uma pequena interface que já torna isso ainda mais fácil, gostei da ideia de ferramenta pra fazer.

Fico feliz que tenha curtido, eu fiquei super animado quando conheci a lib

Qual parâmetro eu uso para baixar somente o áudio?

Você pode fazer um filtro dos streams por somente o audio, que retornará uma lista `yt.streams.filter(only_audio=True)` E depois selecionar o formato que você usando o ID retornado na lista `yt.streams.get_by_itag(22)` Na documentação tem mais detalhes sobre: https://pytube.io/en/latest/user/streams.html#filtering-for-audio-only-streams
Olá, tudo bem? Pensando em agregar e complementar. Se não me engano usando dessa maneira o áudio fica no formato MP4, certo? Podemos converter o áudio para MP3 utilizando o módulo `moviepy`, ficaria assim: ```python # importando os módulos from pytube import YouTube from moviepy.editor import AudioFileClip # URL do vídeo que deseja fazer o download do áudio url = "link" # Criando instância do objeto YouTube e passando a URL do vídeo yt = YouTube(url) # Obtém o melhor áudio disponível audio = yt.streams.get_audio_only() # Faz download para o diretório atual audio_caminho = audio.download() # Definindo o caminho do áudio convertido audio_caminho_mp3 = "nome_do_audio.mp3" # Convertendo o arquivo para MP3 audio_convertido = AudioFileClip(audio_caminho) audio_convertido.write_audiofile(audio_caminho_mp3) ``` Espero que esse comentário seja relevante para vocês 😁 E se eu estiver enganado, não pensem 2x em me corrigir, estou começando na área e quero aprender. Abraços!
Muito obrigado por compartilhar sua ideia, não conhecia o *moviepy* O que eu testei e funciona também, é você já passar o nome do arquivo já com o sufixo *.mp3*, na função `download()`, que o arquivo será salvo já no formato mp3 ```python from pytube import YouTube # URL do vídeo que deseja fazer o download do áudio url = "url" # Criando instância do objeto YouTube e passando a URL do vídeo yt = YouTube(url) # Obtém o melhor áudio disponível audio = yt.streams.get_audio_only() # Faz download para o diretório atual audio.download(filename="audio.mp3") ```
Opaaaaaaa e assim vamos aprendendo 😁 Obrigadooo 👊🏼 Dessa maneira fica mais "simples" e prático, gostei 👏🏼 Abraços
Olá, tudo bem? Fiz um teste agora de manhã com a alteração que você indicou `audio.download(filename="audio.mp3")`, mas o arquivo continua como MP4. Abraços
Olá. Estranho aqui funcionou, segue o exemplo funcionando https://drive.google.com/file/d/1F8vyfmOcnOIy1O4CRIO1DxzfcKAUDE6h/view?usp=sharing Abraços e bons estudos
Olá, Acho que o problema estava na frente do computador kkkkkk Testei de novo e funcionou kkkkk Obrigadoooo!😁

Olá, ultimamente meu código que usa essa biblioteca está dando bad request no urllib, alguém sabe como resolver?