Skip to content

Este projeto é uma aplicação de linha de comando (CLI) robusta desenvolvida em Python para realizar o download de vídeos de múltiplas plataformas (YouTube, TikTok, X/Twitter e Instagram).

Notifications You must be signed in to change notification settings

killuaxhunterx/DownloadVideos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📥 Multi-Platform Video Downloader (Python)

Este projeto é uma aplicação de linha de comando (CLI) robusta desenvolvida em Python para realizar o download de vídeos de múltiplas plataformas (YouTube, TikTok, X/Twitter e Instagram).

O diferencial deste projeto é a sua arquitetura baseada em Design Patterns, especificamente o padrão Strategy, garantindo um código limpo, modular e fácil de escalar para novas plataformas.

🚀 Funcionalidades

YouTube: Download com seleção de resolução. Utiliza fusão de vídeo e áudio (merge) para garantir a melhor qualidade possível (1080p, 4K, etc.).

TikTok / Instagram / X (Twitter): Download automatizado da melhor versão disponível.

Gerenciamento de Arquivos: Salva automaticamente na pasta de Downloads do usuário (platformdirs).

Processamento de Mídia: Utiliza FFmpeg para combinar streams de áudio e vídeo separadas.

🏗️ Arquitetura e Design Patterns

O projeto segue rigorosamente os princípios de Orientação a Objetos (POO) e SOLID, com destaque para:

  1. Strategy Pattern (Padrão de Estratégia)

Utilizado para lidar com a lógica de download específica de cada plataforma sem encher o código principal de condicionais complexas (if/else gigantes).

Interface: VideoInterface (Define o contrato downloadVideo).

Concretas: YoutubeVideoStrategy, TiktokVideoStrategy, TwitterVideoStrategy, InstagramVideoStrategy.

Contexto: VideoContext (Recebe a estratégia e executa o download).
  1. Separação de Responsabilidades (MVC-like)

    Model: Entidades anêmicas que transportam dados (VideoEntity, ResolutionEntity).

    Service: Lógica de negócios auxiliar (ResolutionService para listar qualidades do YouTube).

    Components: Utilitários isolados (Ffmpeg para manipulação de mídia).

📂 Estrutura do Projeto

Para que o código funcione, organize seus arquivos na seguinte estrutura de pastas: Plaintext

/projeto-downloader
│
├── main.py                     # Arquivo principal (Entry Point)
├── components/
│   └── Ffmpeg.py               # Wrapper para o ffmpeg-python
├── model/
│   ├── VideoEntity.py          # Dataclass para dados do vídeo
│   └── ResolutionEntity.py     # Dataclass para dados de resolução
├── service/
│   └── ResolutionService.py    # Lógica para obter resoluções do YT
└── strategies/
    ├── context/
    │   └── VideoContext.py     # Contexto do Strategy
    ├── interfaces/
    │   └── VideoInterface.py   # Classe Abstrata (ABC)
    └── concrete/
        ├── YoutubeVideoStrategy.py
        ├── TiktokVideoStrategy.py
        ├── TwitterVideoStrategy.py
        └── InstagramVideoStrategy.py

🛠️ Pré-requisitos e Instalação

  1. Instalar o Python

Certifique-se de ter o Python 3.10+ instalado.

  1. Instalar o FFmpeg (Obrigatório)

O projeto usa a biblioteca ffmpeg-python, que é apenas uma "ponte". Você precisa ter o software FFmpeg instalado no sistema operacional para unir áudio e vídeo do YouTube.

Windows: Tutorial de Instalação (lembre-se de adicionar às variáveis de ambiente/PATH).

Linux (Ubuntu/Debian):
Bash

sudo apt update && sudo apt install ffmpeg

macOS: Bash

brew install ffmpeg
  1. Instalar Dependências do Python pip install requirements.txt

Em seguida, instale via terminal: Bash

pip install -r requirements.txt

  1. Navegador Firefox (Opcional)

O código para TikTok e Instagram utiliza a configuração 'cookiesfrombrowser': ('firefox',) no yt_dlp. Isso significa que:

Você deve ter o Mozilla Firefox instalado, ou deve trocar no código pelo seu navegador.

Você deve estar logado nessas redes sociais no pelo eu navegador para que o script consiga extrair os cookies e baixar vídeos protegidos.

▶️ Como Executar

Abra o terminal na pasta raiz do projeto.

Execute o arquivo principal:

Bash

python main.py

Insira a URL: O programa solicitará a URL do vídeo.

    Exemplo: https://www.youtube.com/watch?v=...

Se for YouTube: Ele listará as resoluções disponíveis (ex: 1080p, 720p). Digite a desejada.

Resultado: O vídeo será salvo automaticamente na sua pasta padrão de Downloads.

🧩 Detalhes do Código (Snippet por Snippet) - main.py

O orquestrador. Identifica a URL usando verificação de string (if 'youtube' in url...), instancia a Entity correta, configura a Strategy correspondente e injeta no Context para execução.

strategies/concrete/YoutubeVideoStrategy.py

Diferente das outras, esta classe usa a lib pytubefix.

Baixa o stream de vídeo (adaptativo) e o stream de áudio separadamente (para garantir alta qualidade).

Salva temporariamente na pasta ./data.

Chama o componente Ffmpeg para unir os dois arquivos em um .mp4 final.

strategies/concrete/[Outros]Strategy.py

(Tiktok, Twitter, Instagram). Utilizam a poderosa biblioteca yt_dlp.

Configurados para extrair o ID do vídeo da URL.

Usam cookies do Firefox para burlar proteções básicas.

Formatam a saída para mp4.

components/Ffmpeg.py

Usa ffmpeg.input e ffmpeg.output com vcodec='copy' (cópia de stream, sem re-renderização, o que é muito rápido) para juntar o vídeo sem som com o áudio.

⚠️ Solução de Problemas Comuns

Erro ffmpeg not found: Você instalou a lib python, mas não o software FFmpeg no sistema (ver seção Pré-requisitos).

Erro de Cookies/Login: Se o download do Instagram/TikTok falhar, abra o Firefox, faça login na rede social e tente novamente. O yt-dlp precisa dos cookies para autenticar a requisição.

Pytubefix Error: O YouTube muda a API constantemente. Se o download do YouTube falhar, tente atualizar a lib: pip install --upgrade pytubefix.

About

Este projeto é uma aplicação de linha de comando (CLI) robusta desenvolvida em Python para realizar o download de vídeos de múltiplas plataformas (YouTube, TikTok, X/Twitter e Instagram).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages