- yt-dlp é uma ferramenta de download via linha de comando que permite baixar áudio e vídeo de milhares de sites, sendo um fork do youtube-dl
- Para a descriptografia de n/sig do YouTube, agora é necessário um runtime externo de JavaScript (como Deno, Node.js, Bun ou QuickJS) junto com o novo módulo yt-dlp-ejs
- O Deno foi definido como runtime padrão, e o usuário pode especificar outros runtimes com a opção
--js-runtimes
- Com essa mudança, para usar completamente os recursos relacionados ao YouTube, tornou-se obrigatório instalar o yt-dlp-ejs e um runtime JS
- A adição da dependência de um runtime externo é uma medida necessária para responder às mudanças na estrutura de criptografia do YouTube e será um elemento central da manutenção futura
Visão geral do yt-dlp
- O yt-dlp é um fork do youtube-dl, desenvolvido com base no youtube-dlc, que não é mais mantido
- Ele permite baixar áudio e vídeo de milhares de sites e oferece vários recursos de seleção de formatos, pós-processamento, legendas e plugins
Mudanças no suporte ao YouTube
- O pacote yt-dlp-ejs passou a ser necessário para a descriptografia dos valores n/sig do YouTube
- Esse pacote é distribuído sob a Unlicense e inclui componentes sob as licenças MIT e ISC
- A execução do yt-dlp-ejs exige um runtime JavaScript
- Runtimes compatíveis: deno (recomendado), node.js, bun, QuickJS
- A configuração relacionada pode ser definida com a opção
--js-runtimes
- A opção
--no-js-runtimes pode ser usada para limpar a configuração padrão de runtime
Instalação e dependências
- O yt-dlp oferece suporte às versões Python 3.10+ (CPython) e 3.11+ (PyPy)
- Dependências fortemente recomendadas:
- ffmpeg / ffprobe: para mesclagem de áudio e vídeo e pós-processamento
- yt-dlp-ejs: para descriptografia do YouTube
- runtime JavaScript: para executar o yt-dlp-ejs
- Entre as dependências opcionais de rede estão certifi, brotli, requests, curl_cffi e outras
Principais opções de comando
--js-runtimes RUNTIME[:PATH]: define o runtime JS a ser usado
--no-js-runtimes: desativa todos os runtimes JS
--remote-components COMPONENT: opção que pode permitir componentes JS externos
--no-remote-components: bloqueia o carregamento de componentes remotos
Importância
- Com essa mudança, o yt-dlp agora exige obrigatoriamente um runtime JS externo para dar suporte completo à estrutura de criptografia mais recente do YouTube
- Trata-se de uma mudança estrutural para responder às contínuas atualizações de segurança e criptografia do YouTube, sendo uma alteração central para a manutenção futura e a expansão de recursos
2 comentários
Uau... é impressionante tanto bloquearem quanto conseguirem furar isso. Como será que analisam e conseguem romper isso?
Comentário no Hacker News
Já vem incluído no repositório do Arch, então funciona de imediato
Basta adicionar a flag no comando
yt-dlp --cookies-from-browser firefox --remote-components ejs:github ...Na execução, ele baixa o solver em tempo de execução, e isso leva só cerca de 0,5 segundo. Dá a sensação de que o início do download ficou bem mais rápido
Ainda assim, ao rodar em ambientes restritos, seria bom poder baixar o solver antes com um comando separado. Do jeito que está já é satisfatório, mas seria ainda mais prático com automação de empacotamento
Se a preocupação for segurança, usando Deno o sandbox funciona bem
Se for um SO que não suporta Deno nem Node, também daria para considerar o QuickJS, escrito em C. É lento, mas funciona em quase todo lugar
Nesse caso, porém, o sandbox desaparece. Ainda assim, se for código servido pelo domínio oficial do YouTube, eu consideraria confiável
/home/username/.cache)Ou então tentar a automação de empacotamento com
make yt-dlp-extraRecentemente o YouTube começou a exigir o cabeçalho referrer em vídeos incorporados
Se você acessar diretamente
youtube.com/embed/<videoid>, aparece um erro, e o FAQ também diz que isso é uma política intencionalSegundo a documentação oficial, quem incorpora precisa fornecer o HTTP Referer; caso contrário, aparece a tela de “error 153”
Quando o QuickTime saiu em 1991, eu achava natural poder simplesmente copiar, colar e salvar vídeos
Hoje é difícil acreditar como até vídeos sem DRM pioraram tanto em termos de experiência do usuário
Agora, com o player padrão do sistema ou só o VLC, quase tudo se resolve
Desde 2010 eu uso yt-dlp (incluindo a época do youtube-dl) para arquivar todos os vídeos que curti
Hoje já tenho dezenas de milhares de vídeos salvos, e uma parte considerável deles já sumiu do site
Também guardo vídeos como os highlights de sumô da NHK, que ficam disponíveis só por um mês
No meio da guerra sem fim entre bloqueio de anúncios e inserção de anúncios, às vezes penso que AGI/ASI pode acabar surgindo daí.
Os dois lados vão usar LLMs, e os humanos ficarão no meio, perdendo carteira e atenção
Daqui a 10 anos, talvez o YouTube se torne totalmente inacessível no navegador
Se a geração acostumada com apps de tablet virar maioria, o Google talvez ganhe confiança para abandonar a web
Na issue #14404 do yt-dlp, houve uma sugestão de usar Selenium ou navegador headless,
mas a equipe de manutenção respondeu que “isso seria uma declaração de derrota e iria contra o espírito do projeto”
Fazer scraping é realmente um trabalho ingrato. É impressionante manter algo funcionando quando a API quebra com frequência e o provedor nos odeia
Dá para sentir que o YouTube está ficando cada vez mais hostil aos usuários
Bloqueio de adblock, coleta de conteúdo para treinar IA, restrições de API — parece estar explorando a falta de concorrência
Eles são sensíveis à satisfação dos anunciantes, mas tratam usuários e criadores como descartáveis
Começar de graça, eliminar concorrentes e depois formar uma estrutura monopolista foi uma espécie de estratégia de isca.
Agora precisamos de uma nova alternativa. Mesmo que seja paga, seria bom um serviço transparente
Segundo a wiki de EJS do yt-dlp, o Deno é recomendado porque
permite executar código com permissões restritas e buscar remotamente as dependências EJS via npm
o mais seguro é usar isolamento em nível de SO/VM, como Firecracker