Otimizando o Download de Vídeos do YouTube: Migrando de youtube-dl para yt-dlp

A extração e o download de mídia do YouTube via linha de comando são tarefas comuns para desenvolvedores e entusiastas de tecnologia. Historicamente, o youtube-dl foi a ferramenta padrão para essa finalidade. No entanto, devido a limitações de desempenho e throttling imposto pelas plataformas, alternativas mais modernas têm se mostrado essenciais. Este artigo analisa a transição do youtube-dl para o yt-dlp, destacando melhorias de velocidade e simplificação de parâmetros.

Instalação e Configuração Inicial

Ambas as ferramentas podem ser gerenciadas através do gerenciador de pacotes do Python. Recomenda-se a instalação em um ambiente virtual para evitar conflitos de dependências no sistema.

python -m venv venv
source venv/bin/activate  # No Windows: venv\Scripts\activate
pip install youtube-dl yt-dlp

Limitações do youtube-dl

O repositório original do youtube-dl enfrentou problemas de manutenção e remoção no GitHub no passado, embora tenha sido restaurado. O princiapl gargalo atual é a velocidade de download, que frequentemente é restrita a poucos kilobytes por segundo devido a mecanismos de rate-limiting do YouTube.

Para baixar uma playlist, a sintaxe tradicional exige combinações complexas de seletores de formato:

youtube-dl --proxy socks5://127.0.0.1:8080 \
  -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" \
  -o "%(uploader)s - %(title)s.%(ext)s" \
  --embed-thumbnail \
  --playlist-items 1-9 \
  "https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"

O parâmetro --playlist-items define o intervalo de vídeos. O seletor -f tenta obter o melhor vídeo até 1080p combinado com o melhor áudio, fazendo fallback para o melhor formato único se a combinação falhar.

A Era do yt-dlp

O yt-dlp surgiu como um fork ativo que resolve os problemas de throttling e oferece uma arquitetura mais limpa. Ele suporta nativaemnte downloaders externos, como o aria2c, embora o downloader padrão já opere em velocidades máximas na maioria dos cenários.

Download de Vídeo Único e Playlists

A sintaxe do yt-dlp é mais direta. Para baixar um vídeo específico utilizando IDs de formato específicos:

yt-dlp -f "137+140" \
  --proxy http://127.0.0.1:7890 \
  --merge-output-format mp4 \
  "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

Para processar múltiplos vídeos de uma playlist:

yt-dlp --playlist-items 1-9 \
  --proxy http://127.0.0.1:7890 \
  --merge-output-format mp4 \
  "https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"

Entendendo os Códigos de Formato (DASH)

Para resoluções de 1080p e superiores, o YouTube utiliza o Dynamic Adaptive Streaming over HTTP (DASH), onde o fluxo de vídeo e o fluxo de áudio são transmitidos separadamente. O formato 137 refere-se ao vídeo MP4 em 1080p, enquanto o 140 é o áudio M4A. O yt-dlp baixa ambas as streams e invoca automaticamente o ffmpeg (que deve estar instalado no sistema) para multiplexá-las em um único arquivo.

Para descobrri os IDs de formato disponíveis para um vídeo específico, utilize o parâmetro -F:

yt-dlp -F --proxy http://127.0.0.1:7890 "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

A saída exibirá uma tabela detalhada com as resoluções, codecs e tamanhos:

[youtube] Extracting URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ
[youtube] dQw4w9WgXcQ: Downloading webpage
[info] Available formats for dQw4w9WgXcQ:
ID  EXT   RESOLUTION FPS CH │   FILESIZE   TBR PROTO │ VCODEC          VBR ACODEC      ABR ASR MORE INFO
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
140 m4a   audio only      2 │    3.50MiB  128k https │ audio only          mp4a.40.2  128k 44k medium
251 webm  audio only      2 │    3.80MiB  135k https │ audio only          opus       135k 48k medium
22  mp4   1280x720    30  2 │   35.00MiB 1200k https │ avc1.64001F   1200k mp4a.40.2    0k 44k 720p
136 mp4   1280x720    30    │   30.50MiB 1050k https │ avc1.4d401f   1050k video only          720p
137 mp4   1920x1080   30    │   95.00MiB 3200k https │ avc1.640028   3200k video only          1080p
248 webm  1920x1080   30    │   60.00MiB 2000k https │ vp9           2000k video only          1080p

Com essa lista, é possível combinar estrategicamente os IDs (como 137+140 para 1080p com áudio AAC, ou 248+251 para 1080p VP9 com áudio Opus) para otimizar o tamanho e a qualidade do arquivo final.

Tags: youtube-dl yt-dlp FFmpeg Python cli-tools

Publicado em 10-7 00:43