top of page

YouTube Download com Python + QT Design

  • Foto do escritor: Vitor Kaique
    Vitor Kaique
  • 24 de mai. de 2021
  • 8 min de leitura


1. A internet sem lei


Semana passada meu irmão me perguntou como se baixava vídeos do YouTube para que ele pudesse ouvir a qualquer momento um vídeo de um veterinário ou mesmo uma música que ele goste.


Bem, desde os primórdios da internet os usuários vem criando softwares e sites que executem esta tarefa, e não só do YouTube mas de qualquer meio que disponibilize o arquivo seja este pago ou não.


Quem não se lembra do LimeWire? Um dos primeiros torrents da internet discada possibilitava ao usuário o acesso a inúmeros arquivos como vídeos, músicas, games ou qualquer coisa que estivesse disponível, ou seja, era como uma comunidade que se auto ajudava para conseguir, as vezes de forma ilegal, aquilo que queriam.


O problema era que sempre havia umas "trollagens" no meio onde era comum você baixar um clipe de uma banda de rock e vir algo um tanto "inadequado" no lugar...


Hoje temos o famoso uTorrent como substituto do "verdinho" como meu pai dizia, softwares como aTube que além de ter baixar o vídeo ainda edita e até o converte em outros formatos como .mp3, sites gratuitos como o Yout que você basicamente aperta o botão de download e pronto ou mesmo screencast da tela do PC para depois formatarmos da maneira que quisermos.

Como curiosidade pesquise no Google "Youtube download online" para ver quantidade de sites que fazem esta tarefa.


Falando no Yout especificamente, o considero como uma das ideias mais criativas que já vi no quesito de facilidade pois você precisa apenas apagar o "ube" da url do vídeo do YouTube que está assistindo e apertar o "enter" para que seja direcionado ao site, o resto é selecionar o formato que gostaria e realizar o download. Sim, Yout vem de YouTube por isto é genial!


2. Não existe almoço grátis


Mas como "não existe essa coisa de almoço grátis" a utilização destes meios vem sempre seguidos de problemas ou limitações.


Primeiro temos que levar em conta a ilegalidade do assunto pois usufruir de um conteúdo de outra forma que não seja aquela em que está disponibilizada vai contra a lei. Isto acontece pois, mesmo que o conteúdo seja gratuito, tanto o seu criador bem como a página de streaming recebem dinheiro em troca das visualizações, no caso do YouTube o criador recebe diretamente da plataforma e o site pelas propagandas que você assiste.


Imagine se você fosse professor pela Udemy, como eu sou, onde recebesse por cada aluno que se matrícula em um de seus cursos. Contudo, há uma maneira deles assistirem sem pagar nada, você não se sentiria prejudicado? É exatamente esta a questão...


A Udemy emprega tecnologia antipirataria, incluindo codificação de vídeos com uso de player exclusivo e a colocação da marca d'água da Udemy em todos os vídeos. - Udemy

O segundo ponto a se atentar em utilizar estes softwares é nos riscos que se corre. Em torrents é comum vir coisas que você, de fato, não estava procurando onde se vier algo "inadequado" como mencionei antes ainda está no lucro pois pode vir arquivos cheios de vírus ou, no mais grave, keyloggers de plantão. Era comum em meio aos diversos arquivos que era baixado o antivírus mencionar que um arquivo foi bloqueado porque continha o tal "cavalo-de-troia".


O terceiro e último ponto é na quantidade de arquivos inúteis que são instalados junto ao que precisa. No auge do Baixaki, site onde se encontrava qualquer tipo de software para download, era comum vir junto o antivírus McAfee ou o Baidu, literalmente uma praga que imitava um antivírus mas que na verdade enchia a paciência alterando buscador padrão, querendo fazer varreduras a toda hora e colocando anúncios no navegador, contudo o pior era a dificuldade de remover tendo de apelar para diversos tutoriais da internet.


Enfim, o problema foi simplesmente resolvido mostrando o site Yout a meu irmão onde também expliquei a questão da legalidade, mas dizem que a internet é "uma terra sei lei" então...


3. Download de vídeos do YouTube com Python


Contudo, fiquei com aquela sensação de que era possível facilitar ainda mais a situação. O Yout limita a qualidade do vídeo o nome do arquivo vem da forma como está no canal, ou seja, fica uma bagunça para quem quer montar uma playlist de músicas separando por bandas por exemplo. Fora que fica pedindo doações e realizar cadastro.


Pois bem, peguei note, abri o Visual Studio Code e comecei a pesquisar em criar um software em Python que realizasse o download de vídeos do YouTube.


Por sinal, como a linguagem consegue interagir com quase tudo na maior facilidade, existe bibliotecas prontas que realizam esta ação como:

Para instalar basta utilizar o pip.


pip install pytube

ou

pip install mhyt

É incrível a quantidade de informações que que é possível obter com simples linhas de código passando apenas o link do vídeo para a função YouTube.


link = input(“Enter the link: “)
yt = YouTube(link)

Informações como o título, número de visualizações, tamanho, descrição e até a nota do vídeo.


#Title of video
print(“Title: “, yt.title)

#Number of views of video
print(“Number of views: “,yt.views)

#Length of the video
print(“Length of video: “,yt.length,”seconds”)

#Description of video
print("Description: ",yt.description)

#Rating
print("Ratings: ",yt.rating)

E para a aplicação escolhi a biblioteca mhyt pois disponibiliza um código simples para download de um vídeo já na página inicial da documentação da lib, ou seja, sem muita procura é possível realizar a tarefa.


from mhyt import yt_download

url = "https://www.youtube.com/watch?v=0BVqFYParRs"
file = "Clouds.mp4"
yt_download(url,file)

Salvo o arquivo .py agora tinha um código que realizava o download de qualquer vídeo que quisesse, porém vamos falar a verdade, isto é muito inusual. Ter de ficar abrindo o arquivo no Visual Studio para alterar o código e rodar toda a vez que eu quisesse um novo vídeo vai contra toda a filosofia que aprendi na graduação.


Qualquer implementação voltada a automação deve trazer benefícios e facilidades ao seus usuários. Eu abrir o VSC e editar o código tudo bem, mas se outro usuário precisasse como o meu irmão por exemplo? Não, isto não estava certo, era muito mais fácil ficar com o site Yout mesmo...


4. Preciso de sistema com interface


Eu não precisava de um código mas sim de um sistema, ou seja, uma GUI com campos onde eu inseriria o link e o nome do arquivo mais um botão para iniciar o download do vídeo.


Vejo muitos "Cientistas de Dados", já que está na moda agora, criando "soluções" em notebooks .ipynb que parecem obras de arte gerando gráficos, alterando parâmetros, gerando insights sobre os dados, criando tabelas verdades entre outras tantas análises em Machine Learning.


Ok, para o Kaggle, uma comunidade específica ou mesmo um estudo é plausível a utilização do Jupyter Notebook ou Google Colab, mas já pensou em mandar o seu chefe rodar todas as linhas de código cada vez que ele quiser saber uma predição de vendas? Particularmente, se ele for apenas o dono da empresa e não um programador de fato, acredito que não irá gostar muito.


Quando fiz a predição de vendas utilizando 5 métricas diferentes no começo do ano para a empresa em que trabalho, esta que também está disponível para lerem, utilizei o Colab pois meu chefe queria apenas números. Se posse ter que implementar na empresa, chamar o responsável pelo ERP e juntos criarmos um novo módulo.


Infelizmente o Python não possui uma IDE que contenha um módulo GUI de "arrastar e soltar" igual o Netbeans tem para o Java. A criação gráfica facilita demais o desenvolvimento pois você consegue visualizar já na tela como irá ficar o seu programa fora o fato da própria IDE realizar a integração entre as telas e o código.


Para contornarmos a situação podemos trabalhar de duas maneiras:

  1. Utilizar a lib tkinder do Python e criar, linha por linha, a interface;

  2. Desenvolver a interface em um software de terceiro e depois integrar com Python.

Esta etapa vai de programador para programador mas escolhi a segunda alternativa pois, visualmente falando, é mais fácil trabalhar com "arrastar e soltar". O próprio LabVIEW se tornou uma software bem difundindo na indústria e no ensino em faculdades mediante a sua linguagem visual (mesmo que seja bem pesado).


Para isto utilizei do software QT Design, um pacote do QT Creator o qual disponibiliza os botões, frames, grids, labels e text browser, ou seja, tudo que é necessário para criar-se uma interface GUI.

Orientando em criar uma tela o mais limpa possível, deixei apenas os campos para ser inserido o link e o nome do arquivo que será salvo, o formato podendo ser .mp3 (áudios) ou .mp4 (áudio e vídeo) sendo por padrão apenas o áudio mas podendo ser alterado pelo usuário e um botão para realizar o download.


5. Convertendo a interface para Python


Quando salvo é retornado a nós um arquivo .ui o qual pode ser importado diretamente no código Python onde, neste caso, estaria o código com a lib mhyt, contudo aqui está o "jump of the cat" como meu professor de elétrica industrial dizia.


Importando para o programa é possível extrair com extrema facilidade o que está escrito dentro dos campos do link e título mas isto só acontece quando você roda o sistema dentro do Visual Studio Code por exemplo, quando você o converter para o .exe o sistema não irá mais reconhecerá a importação do frame externo fechando automaticamente o prompt de comando após a execução.


Para contornar é necessário converter o frame .ui para um arquivo que o Python consiga ler, ou seja, um arquivo .py que pode ser realizado rodando o código abaixo na pasta onde esta o "frame.ui".


pyuic5 'nome do frame'.ui -o 'nome do frame'.py -x

Repare que coloquei no final o "-x", este é nosso segundo "pulo do gato" onde é responsável por inserir o código abaixo responsável por, digamos, deixar o sistema rodando como se fosse em loop em vez de simplesmente ler todas as linhas e fechar.


if __name__ == "__main__":
 import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Outro ponto importante é que é necessário também converter a imagem do YouTube que utilizei no sistema para um arquivo também .py o qual será importado futuramente. Para isto basta rodar o código abaixo no prompt de comando onde está a imagem.


pyrcc5 'nome da imagem'.qrc -o 'nome da imagem'.py

Tendo o frame em arquivo .py resta agora transferir o código de download para dentro do "frame.py"


6. Definição da função donwload dentro do frame.py


Primeiro copy/cola o import do mhyt para o topo junto com o import do PyQt5.


from mhyt import yt_download
from PyQt5 import QtCore, QtGui, QtWidgets

Segundo importa-se a imagem do YouTube apagando apenas o formato que está mencionado.


### IMAGENS ###
import youtube


if __name__ == "__main__":
 import sys
 app = QtWidgets.QApplication(sys.argv)
 MainWindow = QtWidgets.QMainWindow()
 ui = Ui_MainWindow()
 ui.setupUi(MainWindow)
 MainWindow.show()
 sys.exit(app.exec_())

Terceira etapa é necessário criarmos a função que realizará o download. Para isto criei um def chamado download(self) que recebe o parâmetro self que nada mais é do que o frame do sistema.


Esta função está vinculada ao botão de download onde só é acionado quando apertado.


self.pushButton.clicked.connect(self.download)

Após é realizado a verificação de qual formato, .mp3 ou .mp4, está selecionado para só então realizar o download onde no final apago o que há escrito nos textos com o intuito de facilitar para o usuário.


### Função Download Video ###
def download(self):
 self.txt_mensagem.setText('Download em andamento') ## Mensagem de início do download
 if self.radioButton.isChecked() == True:
  try:
   url = self.txt_link.text()
   titulo = self.txt_titulo.text()
   titulo_mp4 = titulo + '.mp3'
   yt_download(url, titulo_mp4, ismusic = True, codec = "mp3")
  except:
   pass
 elif self.radioButton_2.isChecked() == True:
  url = self.txt_link.text()
  titulo = self.txt_titulo.text()
  titulo_mp4 = titulo + '.mp4'
  yt_download(url, titulo_mp4)
 self.txt_link.setText('') ## Apaga texto link
 self.txt_titulo.setText('') ## Apaga texto titulo
 self.txt_mensagem.setText('Download encerrado') ## Mensagem de início do 
 download

Há um "try except" quando selecionasse o .mp3 apenas para contornar um erro que não afeta o download pois faz parte de um processo interno que necessitasse de um CODEC, mas como queremos apenas a música então é mais fácil trabalhar assim...


Testado no console do Visual Studio Code e salvo, agora é necessário convertermos o arquivo .py para .exe onde utilizei a lib pyinstaller instalando pelo pip.


pip install pyinstaller

E convertendo conforme o código:


pyinstaller --onefile --noconsole 'nome do arquivo que será convertido'.py

Apenas para questões de entendimento, o "onefile" transforma todo nosso código em um único arquivo .exe caso contrário haveria uma pasta com algumas .dlls e dependências. Já o "noconsole" é utilizado para o prompt de comando não fique abrindo junto toda a vez que o sistema for iniciado.

Ao final temos um sistema funcional, simples e intuitivo para que qualquer usuário possa utilizar sem que seja necessário ficar alterando código ou rodando em console.


Qualquer dúvida ou queira verificar mais projetos basta acessar um dos links abaixo ou entrar em contato por email.


Github: aqui

Linkedin: aqui

Instagram: aqui

 
 
 

Comentários


Siga-me nas redes sociais

  • Branca Ícone Instagram
  • Branco Twitter Ícone
  • White LinkedIn Icon

© 2021 por Vitor Kaique de L. Penteado

bottom of page