📥 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:
- 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).
-
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
- Instalar o Python
Certifique-se de ter o Python 3.10+ instalado.
- 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
- Instalar Dependências do Python pip install requirements.txt
Em seguida, instale via terminal: Bash
pip install -r requirements.txt
- 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.
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.
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.