6 pontos por GN⁺ 2024-10-28 | 1 comentários | Compartilhar no WhatsApp
  • You-Get é um pequeno utilitário de linha de comando para baixar da web conteúdos de mídia como vídeo, áudio e imagens, usado quando não há outra forma simples de fazer o download
  • Permite baixar vídeos, imagens e áudio de vários sites como YouTube, Youku, niconico, Tumblr, SoundCloud, Instagram, bilibili e TikTok, ou fazer streaming de vídeos online em um media player
  • Com --info, é possível verificar as qualidades e formatos disponíveis e selecionar com --itag, mas a seleção de formato em geral não está implementada na maioria dos sites suportados; o padrão é a melhor qualidade
  • A instalação pode ser feita via pip, download ou clone do GitHub, Homebrew, pkg do FreeBSD, Flox etc.; as dependências recomendadas são Python 3.7.4 ou superior, FFmpeg 1.0 ou superior e, opcionalmente, RTMPDump
  • Oferece download direto por URL, scraping de páginas web, download baseado em busca no Google Videos, pausa e retomada, proxy, carregamento de cookies e saída de URLs extraídas ou JSON, mas alguns recursos são experimentais ou ainda não estão estabilizados

O que o You-Get faz

  • You-Get é um pequeno utilitário de linha de comando para baixar conteúdo de mídia da web
    • O conteúdo-alvo inclui vídeos, áudio e imagens
    • É voltado para situações em que não há outro método simples de download na web
  • Entre os motivos de uso citados estão baixar para aproveitar pessoalmente, ter controle sobre vídeos online cujo salvamento é bloqueado, contornar tecnologias fechadas ou JavaScript/Flash proprietários, e uma orientação à cultura hacker e ao software livre
  • Os principais recursos são os seguintes
    • Download de vídeo e áudio de sites populares como YouTube, Youku e Niconico
    • Streaming de vídeos online em um media player sem usar navegador web
    • Raspar páginas web para baixar imagens de interesse
    • Baixar conteúdo arbitrário não HTML, como arquivos binários

Instalação e ambiente de execução

  • As dependências recomendadas são Python 3.7.4 ou superior, FFmpeg 1.0 ou superior e, opcionalmente, RTMPDump
  • Segundo um aviso de 30 de maio de 2022, o suporte a Python 3.5, 3.6 e 3.7 será eventualmente encerrado
  • Há várias formas de instalação
    • Pelo PyPI com pip install you-get
    • Usuários de Zsh podem usar Antigen com antigen bundle soimort/you-get
    • Download do branch estável master ou do branch develop no GitHub
    • git clone git://github.com/soimort/you-get.git, recomendado para desenvolvedores
    • No macOS, brew install you-get
    • No FreeBSD, pkg install you-get
    • No Mac, Linux e Windows WSL, flox install you-get
  • As definições de autocompletar do shell para Bash, Fish e Zsh estão em contrib/completion
  • A atualização pode ser feita, conforme o método de instalação, com pip install --upgrade you-get, baixando a versão mais recente, ou forçando a reinstalação do branch develop

Fluxo básico de download

  • Ao baixar um vídeo, é possível primeiro verificar as qualidades e formatos disponíveis com you-get -i URL ou --info
    • A saída inclui site, título, stream, contêiner, qualidade, tamanho e um exemplo de --itag para usar no download
    • O download padrão usa o item no topo da lista
  • Para outro formato, use o valor de --itag exibido na saída
    • Como exemplo, no vídeo Me at the zoo do YouTube, é possível selecionar mp4 com --itag=18
  • Se um vídeo do YouTube tiver legendas, elas são baixadas junto com o arquivo de vídeo no formato de legenda SubRip
  • A seleção de formato ainda não foi implementada como recurso geral na maioria dos sites suportados
    • Nesse caso, o formato padrão de download é o de maior qualidade
  • O FFmpeg é necessário para baixar e unir vídeos transmitidos em várias partes e para vídeos do YouTube em alta resolução, como 1080p ou superior
    • Se não quiser unir as partes após o download, use --no-merge ou -n

Downloads por URL, página web e busca

  • Se você tiver a URL exata do recurso, pode baixá-lo diretamente com you-get URL
    • Por exemplo, ao informar a URL de uma imagem JPEG, ele exibe site, título, tipo e tamanho, e salva o arquivo
  • Se, em vez da URL exata do recurso, você fornecer a URL de uma página web, ele tentará raspar a página para encontrar itens de interesse
    • Esse recurso é experimental e não é perfeito
    • Funciona melhor para scraping de imagens grandes em sites populares como Tumblr e Blogger
    • Não há um padrão universal aplicável a todos os sites da internet
  • Se você passar uma string que não seja uma URL, ele pesquisa no Google Videos e baixa o vídeo mais relevante
    • Pode não ser exatamente o que você queria, mas é descrito como tendo boa chance de ser um resultado bastante plausível

Controle de download e opções de execução

  • Durante o download, é possível interromper com Ctrl+C, e um arquivo temporário .download fica no diretório de saída
    • Ao executar novamente com os mesmos argumentos, ele retoma a partir da última sessão
    • Se houver um arquivo completo sem a extensão temporária, o download é ignorado
    • --force ou -f força um novo download e sobrescreve arquivos existentes ou temporários com o mesmo nome
  • Com --output-dir ou -o, é possível especificar o caminho de salvamento; com --output-filename ou -O, é possível especificar o nome do arquivo
    • É útil quando o título padrão do vídeo contém caracteres especiais incompatíveis com o shell, o sistema operacional ou o sistema de arquivos atuais
    • Também é útil para salvar em uma pasta e com um nome definidos em scripts de download em lote
  • Com --http-proxy ou -x, é possível especificar um proxy HTTP
    • Por padrão, é aplicada a configuração de proxy do sistema, a variável de ambiente http_proxy
    • Para desativar o proxy, use --no-proxy
    • Em alguns sites como Youku, para extrair informações de vídeos acessíveis apenas a partir da China continental, é possível usar --extractor-proxy ou -y
  • --player ou -p envia o vídeo para um media player como mpv ou vlc em vez de baixá-lo
    • Se você definir o navegador como player, pode assistir no navegador sem anúncios ou seção de comentários
    • Também pode ser usado para iniciar outro gerenciador de downloads, mas pode não funcionar muito bem

Autenticação, dados extraídos e sites suportados

  • Para conteúdos que exigem login em uma conta, como vídeos não públicos, é preciso passar os cookies do navegador com --cookies ou -c
    • Os formatos de cookies suportados atualmente são Mozilla cookies.sqlite e Netscape cookies.txt
  • --url ou -u imprime a lista de URLs de recursos baixáveis extraídos da página
  • --json imprime um resumo dos dados extraídos em formato JSON
    • Esse recurso ainda não está estabilizado, e o schema JSON pode sofrer alterações incompatíveis no futuro
  • A lista de sites suportados inclui YouTube, X(Twitter), VK, Vimeo, Tumblr, SoundCloud, Pinterest, Internet Archive, Instagram, Facebook, Dailymotion, Bandcamp, niconico, bilibili, Youku, Naver, TikTok, Zhihu etc.
    • O suporte a vídeo, imagem e áudio varia conforme o site
  • Para sites que não estão na lista, o extrator genérico encontra e baixa recursos de interesse na página

Relato de problemas e licença

  • Quando não for possível baixar o conteúdo desejado, verifique primeiro Known Bugs
  • Antes de relatar um novo problema ou contribuir, é preciso ler as diretrizes de contribuição
  • Perguntas rápidas podem ser feitas no canal do Gitter #soimort/you-get
  • O software é distribuído sob a MIT license
    • O software é fornecido “no estado em que se encontra”, sem garantias
    • Os autores não se responsabilizam por violação de direitos autorais nem por outros usos ilegais
    • O repositório fornece apenas o código, e a forma de uso fica a critério do usuário

1 comentários

 
GN⁺ 2024-10-28
Opiniões no Hacker News
  • Durante um tempo, a internet era cara e a largura de banda era baixa, mas eu gostava de ouvir músicas e aulas no YouTube. Em algum momento, percebi que poderia reduzir o custo de largura de banda em 90% se baixasse apenas o stream de áudio
    youtube-dl e yt-dlp tinham a flag -G, que imprimia a URL do formato/qualidade solicitado; no computador, eu pegava a URL pela linha de comando e colocava no VLC
    No celular, no começo usei um contorno complicado: primeiro baixava o arquivo para um VPS via SSH e depois baixava de novo para o telefone. Mais tarde, descobri que o navegador do celular conseguia reproduzir a URL diretamente, então fiz um frontend em PHP para youtube-dl -G -f bestaudio {url}
    Hoje ele não está mais online e perdi o código, mas era basicamente uma linha só. Parece que you-get também dá suporte ao mesmo uso com --url / -u, então eu queria destacar o quanto esse recurso é útil
    Se você reproduz com a tela desligada, também economiza 80% de bateria. O YouTube sabe disso, e parece que por isso transformou a reprodução em segundo plano pegando apenas o stream de áudio em um recurso pago

    • O navegador Brave Mobile permite ativar a reprodução de áudio de vídeos em segundo plano, eliminando a necessidade de uma assinatura como o YouTube Premium
    • youtube-dl parece não funcionar mais tão bem, e eu precisei usar o fork yt-dlp. Migrar de projeto assim sempre dá um certo receio, mas pelo menos ele parece ser amplamente usado
    • Minha mãe adora audiobooks, então criei para ela um bot do Telegram em node-red que processa links do YouTube quando eles são compartilhados
      Os links vão para uma FIFO, e um pequeno daemon baixa tudo em sequência e salva em uma pasta incoming dedicada. O bot pode baixar só o áudio ou o vídeo inteiro, mas para o ID do Telegram da minha mãe deixei configurado para baixar apenas áudio
      Essa pasta é monitorada pelo Jellyfin, então ela pode baixar ou ouvir na hora. Em 2 anos, ela já baixou mais de 1 TB de audiobooks e está muito satisfeita
      Código do daemon: https://gist.github.com/entropie/d265e94136b9777cc6b3190189b...
    • Em situações de baixa largura de banda, costumo escolher 144p. O tamanho é quase o mesmo de um stream só de áudio de boa qualidade, mas tem a vantagem de poder ver o palestrante pelo menos uma vez a cada 45 minutos. A bateria também é economizada da mesma forma
      Vídeos em 144p são curiosamente tranquilos e confortáveis. Você não se distrai com cores chamativas ou detalhes complexos; dá para simplesmente se concentrar em ouvir
    • No Safari do iOS, depois de sair do app Safari, se você tocar rapidamente no botão de reprodução do vídeo na interface “Reproduzindo Agora”, dá para fazer uma espécie de bug que permite reproduzir em segundo plano o áudio de vídeos do YouTube
      Uso principalmente para reproduzir vídeos exclusivos para membros que não tocam em segundo plano mesmo tendo YouTube Premium. A cada atualização do iOS, fico torcendo para que não bloqueiem esse “glitch”
  • Este projeto parece não querer que as pessoas apenas reportem issues sem PRs de correção
    A formulação é algo como “para relatar um problema encontrado ao usar o you-get, você deve abrir um Pull Request...”, e eu nunca tinha visto esse método antes

    • Como outra pessoa comentou, parece que a intenção não é exigir a correção em si, mas sim um teste que falha
      O requisito é uma descrição detalhada do problema e pelo menos um commit que cubra esse problema em um teste unitário. A palavra “addressing” ali não é muito boa; “demonstrating” teria sido melhor
    • A versão em chinês tem um cabeçalho extra que se traduz como “para evitar abuso do GitHub Issues, não aceitamos issues comuns”. A redação antiga em inglês dizia o seguinte
      you-get está atualmente experimentando uma abordagem agressiva para lidar com issues, e os relatórios de bugs devem ser tratados em código por meio de pull requests
      https://github.com/soimort/you-get/commit/75b44b83826b3c2d9a...
      Provavelmente havia spam demais. A propósito, tests/test.py parece executar diretamente os extratores para vários sites, e não consegui encontrar onde fazem mock das requisições e respostas de rede. Talvez a intenção seja simplificar o processo para quem abre o PR
    • Parece significar que você deve enviar um PR com um teste incluído que mostre se o problema foi resolvido
    • A ideia de incentivar as pessoas a tentarem escrever um teste ou até uma correção completa é interessante, mas aceitar apenas isso parece um pouco exagerado. Dito isso, eu não mantenho o you-get, então não sei pelo que eles passam
      Talvez seja uma forma eficaz de filtrar a enxurrada de issues repetitivas abertas por pessoas que não sabem executar corretamente um programa de linha de comando
    • Escrever um teste que falha é relativamente fácil e reduz bastante o trabalho de triagem de issues. Também diminui o risco de o GitHub Issues virar um fórum de suporte
      Se isso facilita a manutenção do projeto e faz com que ele dure mais, acho aceitável
  • Só pelo título e pelo começo da descrição, eu pensei que fosse uma ferramenta baseada em heurísticas para capturar qualquer coisa de uma página. Algo útil quando não há uma ferramenta com suporte específico para determinado site, ou seja, na maioria das vezes, “quando o yt-dlp não dá suporte”
    Mas, na prática, ela tem uma arquitetura baseada em extratores, com um extrator separado para cada fonte minimamente popular. No fim, fico pensando se não é mais próximo de um clone mais simples do yt-dlp

  • Fico curioso se mais alguém continua recebendo este erro
    Começa com you-get: [error] oops, something went wrong. e orienta a verificar problemas de rede, confirmar a versão mais recente, checar bugs conhecidos e executar com a opção --debug
    Usar a flag de debug também não ajudou muito, e em pattern = str(pattern, 'latin1') ocorreu TypeError: decoding to str: need a bytes-like object, NoneType found
    Eu estava tentando ver se dava para contornar a restrição de idade, mas o mesmo erro ocorreu até em vídeos sem restrição de idade

    • Vale a pena verificar a versão do Python
      Dá para trocar para um Python mais recente com uma ferramenta como Pyenv, ou subir uma imagem Docker com algo como docker run -it -v $(pwd):/mnt python:3.13 bash e testar o utilitário lá dentro
  • Alguém consegue explicar por que isto é melhor que o yt-dlp?

    • Pergunta interessante. Ele só tem uma biblioteca como dependência, mas fico curioso para saber quanto do código de fato foi escrito do zero
      Por exemplo, achei curioso haver um juntador de mp4 próprio. Se você já tem ffmpeg, quase não há como fazer melhor por conta própria
      https://github.com/soimort/you-get/blob/develop/src/you_get/...
    • Fico curioso para saber como você inferiu que ele é melhor que o yt-dlp. Em uma área que o Google está sempre tentando bloquear, acho que quanto mais opções, melhor
  • É difícil chamar exatamente de ferramenta “burra” um downloader de mídia no estilo ytdl com extratores e conversores específicos por site, mas ainda assim é bom ver mais projetos como o ytdl surgindo

  • Não entendo muito bem por que Bandcamp está na lista de sites compatíveis. O Bandcamp simplesmente permite baixar os arquivos se você pagar primeiro ao artista
    O que dá para baixar com esta ferramenta só está disponível porque o artista permitiu ouvir de graça antes da compra. Baixar com esta ferramenta parece completamente desnecessário e meio desrespeitoso. O Bandcamp é composto principalmente por pequenos artistas e selos independentes

    • A lista de sites compatíveis não é uma declaração moral de onde se deve usar esta ferramenta. É só uma lista de sites populares em que ela funciona
    • Acho que você também pode usar esta ferramenta depois de assinar ou comprar. As pessoas baixam até conteúdo pelo qual já pagaram com esse tipo de automação para evitar o trabalho de fazer login em 5 apps de ecossistemas fechados diferentes
    • Talvez nem todo mundo viva em um país onde consiga pagar no Bandcamp
      Pessoalmente, às vezes quero, ou preciso, consumir mídia offline por causa de rede instável ou lenta e operadoras caras. Isso não significa que eu não vá pagar depois se gostar
    • Quem pirateia considera a partir de qual nível de renda que roubar determinado conteúdo passa a ser moral ou imoral?
    • Nem todo mundo concorda que artistas devam receber dinheiro por suas obras
  • Parece bem feito. Mas, como consumidor, fico curioso para saber por que eu deveria usar you-get em vez de yt-dlp
    Que vantagem ele tem sobre o yt-dlp, que funciona razoavelmente bem em uma quantidade enorme de sites?
    [1] https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites....

  • A documentação diz “Pesquisar e baixar do Google Videos: $ you-get "Richard Stallman eats"
    Não leio a documentação com frequência, mas desta vez li e encontrei um easter egg meio nojento

  • Gostei. Imagino que seria bom ter uma extensão complementar para Chrome/Firefox que usasse you-get como backend e fosse implementada de forma fluida
    Indo mais além, dá para imaginar uma extensão you-get que, ao entrar no YouTube, contorne o player do YouTube e reproduza o conteúdo diretamente, sem anúncios. Isso poderia se aplicar não só ao YouTube, mas também a outras plataformas