Saltar para o conteúdo principal
50% de desconto todos os planos, tempo limitado. A partir de $2.48/mo
11 min left
Gaming e media

Executar o yt-dlp num VPS para arquivo pessoal sem interface

S Por Sajjad 11 min de leitura
yt-dlp running headless on a VPS, feeding scheduled downloads into an organized video library that a media server can scan

Executar o yt-dlp num VPS dá às transferências longas uma máquina que continua online depois de fechar o portátil. Também cria um caminho limpo entre uma recolha agendada de um canal e uma biblioteca de média que o Jellyfin consegue analisar.

O servidor muda três partes do fluxo de trabalho: a instalação precisa das dependências atuais do YouTube, os vídeos que exigem conta precisam de uma transferência segura de cookies, e a automatização precisa de um ritmo de pedidos deliberado. A configuração abaixo resolve as três sem presumir que todas as transferências precisam de cookies, de uma interface web ou de um fornecedor de PO Token.

TL;DR

  • Instale o yt-dlp num ambiente virtual de Python com ffmpeg, ffprobe, yt-dlp-ejs e um runtime de JavaScript suportado. O Deno é o runtime que o projeto recomenda atualmente.
  • Comece sem cookies de conta. Acrescente-os apenas para listas privadas, vídeos com restrição de idade, conteúdo só para membros ou outro caso que exija conta.
  • Mantenha o comportamento predefinido do yt-dlp com um único fragmento até ter uma razão medida para o alterar. Use as opções de espera e horários desfasados para reduzir a pressão de pedidos.
  • A CLI pura com systemd é a configuração fiável mais simples. Escolha o Pinchflat para regras de canais sem intervenção, o MeTube para uma fila no navegador, ou o Tube Archivist para uma interface de visionamento com pesquisa.
  • Trate o armazenamento como a principal variável de dimensionamento. Teste uma amostra representativa antes de comprar capacidade de disco para um arquivo completo.

Use o yt-dlp de forma responsável

Só arquive conteúdos quando tiver permissão e a sua utilização cumprir os termos da plataforma e a lei aplicável.

  • Bons candidatos incluem os seus próprios carregamentos, conteúdos de domínio público e material cujo titular de direitos autorizou a transferência.
  • Uma subscrição do YouTube Premium não concede, por si só, permissão para copiar vídeos fora das funcionalidades disponibilizadas pelo YouTube.
  • As permissões e restrições do YouTube limitam a transferência e o acesso automatizado, salvo autorização do serviço ou dos titulares de direitos em causa.
  • Este tutorial não aborda a contornação de DRM, a redistribuição comercial nem formas de escapar às medidas de aplicação da plataforma.

O que precisa antes de começar

A instalação base é pequena, os ficheiros de média não. Prepare o servidor e o caminho de armazenamento antes de transferir um canal inteiro.

  • Um VPS com Ubuntu 22.04 ou mais recente, ou uma versão atual do Debian, com acesso SSH
  • Python 3.10 ou mais recente
  • Armazenamento suficiente para uma amostra representativa, mais folga para ficheiros parciais e pós-processamento
  • Um navegador local à parte, apenas se precisar de cookies de conta
  • Opcional: Jellyfin, Emby ou outro servidor de média capaz de ler o diretório do arquivo

Porquê colocar o yt-dlp num VPS?

Um VPS é útil quando o trabalho tem de continuar a correr independentemente do seu computador do dia a dia. Dá ao descarregador um processo persistente, um sistema de ficheiros previsível e um agendador que não pára quando um portátil adormece ou muda de rede.

As contrapartidas contam. O limite mensal de tráfego do seu servidor pode tornar-se uma barreira quando transmite o arquivo para fora, e um IP de VPS pode esbarrar em limites de pedidos mais cedo do que a sua ligação doméstica. Também fica com as atualizações, a gestão de credenciais, as cópias de segurança, a limpeza do armazenamento e a segurança do servidor de média. Para uma transferência pontual, um portátil é mais simples. Para recolhas recorrentes ou uma biblioteca partilhada, um VPS é mais fácil de operar.

Dimensione o VPS em função do armazenamento e da reprodução

yt-dlp VPS sizing guide: starting allocations of 2 vCPU and 2 GB RAM for raw yt-dlp with systemd, 2 vCPU and 4 GB RAM for MeTube or Pinchflat, and 4 vCPU and 8 GB RAM for Tube Archivist, beside a method for projecting storage from a sample download

O yt-dlp transfere e faz remux dos ficheiros; normalmente não transcodifica cada um. Isso mantém modestas as necessidades constantes de CPU e memória do descarregador, enquanto o uso de disco varia com a duração do vídeo, a resolução, o codec e o formato escolhido.

Use estas alocações como pontos de partida conservadores, não como mínimos oficiais:

ConfiguraçãoAlocação inicialAbordagem de armazenamentoMelhor Ajuste
yt-dlp puro com systemd2 vCPU, 2 GB RAMDimensionar a partir de uma amostraTransferências agendadas sem interface
MeTube ou Pinchflat2 vCPU, 4 GB RAMDimensionar a partir de uma amostraFila no navegador ou subscrições de canais
Tube Archivist4 vCPU, 8 GB RAMDisco local com folga para crescerArquivo pesquisável com reprodução integrada

Um teste pequeno precisa de cerca de 2 GB de memória disponível e uma instalação média a grande de cerca de 4 GB, segundo o guia de implementação do Tube Archivist. Começar acima desse mínimo deixa espaço para o sistema operativo, o Docker, a atividade do Elasticsearch e outro serviço como o Jellyfin.

Antes de dimensionar um arquivo completo, simule ou transfira um grupo representativo na resolução escolhida. Verifique o diretório resultante com du, divida pelo número de vídeos concluídos e conte com carregamentos invulgarmente longos.

du -sh ~/archive
find ~/archive -type f \( -name '*.mp4' -o -name '*.mkv' \) | wc -l
df -h ~/archive

A amostra é mais útil do que uma estimativa genérica de gigabytes por vídeo, porque reflete a duração e a mistura de formatos reais do canal.

Instalar o yt-dlp e as suas dependências atuais

O projeto yt-dlp suporta Python 3.10 e superior. A lista de dependências do yt-dlp recomenda vivamente ffmpeg, ffprobe, yt-dlp-ejs e um runtime de JavaScript suportado para um suporte completo do YouTube.

Comece pelos pacotes do sistema e por um ambiente Python isolado:

sudo apt update
sudo apt install -y python3 python3-venv ffmpeg curl nano
python3 -m venv ~/yt-dlp-venv
source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"

O Deno vem ativado por predefinição no yt-dlp e é o runtime que o guia de EJS guia de EJS do projeto recomenda atualmente. Instale-o, adicione-o ao caminho da sua shell e verifique cada componente:

curl -fsSL https://deno.land/install.sh | sh
export PATH="$HOME/.deno/bin:$PATH"
echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.profile
yt-dlp --version
ffmpeg -version | head -1
deno --version
yt-dlp --simulate --verbose "https://www.youtube.com/watch?v=VIDEO_ID"

A saída detalhada lista as dependências que o yt-dlp consegue ver. Se faltar o ffmpeg, o yt-dlp avisa e não consegue juntar as faixas separadas de vídeo e áudio de melhor qualidade nem executar vários passos de pós-processamento.

Numa instalação com pip, atualize voltando a executar o pip dentro do ambiente virtual. O comando integrado yt-dlp -U destina-se aos binários de lançamento, não aos pacotes pip.

source ~/yt-dlp-venv/bin/activate
python -m pip install -U --pre "yt-dlp[default]"

Os canais de atualização são descritos nas notas de atualização do yt-dlp. Os canais stable, nightly e master estão todos disponíveis, e o nightly é o que o projeto recomenda para utilizadores comuns, porque as correções de extratores chegam lá antes da versão estável seguinte.

Acrescente cookies apenas para conteúdos que exigem conta

Experimente primeiro o URL de destino sem cookies. O guia do YouTube do yt-dlp diz que os cookies só são necessários para conteúdos que exigem conta, incluindo listas privadas, vídeos com restrição de idade e conteúdo só para membros. O início de sessão por OAuth já não funciona com o yt-dlp.

Quando os cookies forem mesmo necessários, exporte uma sessão dedicada do YouTube no seu computador local. O procedimento de exportação de cookies do projeto usa uma janela de navegação privada para que o YouTube não rode a sessão exportada num separador normal aberto:

  1. Abra uma única janela privada ou de navegação anónima e inicie sessão no YouTube.
  2. No mesmo separador, abra o ficheiro robots.txt do YouTube.
  3. Exporte apenas os cookies de youtube.com em formato Netscape, com uma das extensões listadas nas FAQ do yt-dlp.
  4. Feche a janela privada e não volte a abrir essa sessão.
  5. Copie o ficheiro para o VPS e restrinja as suas permissões.
scp cookies.txt your-user@your-vps-ip:~/cookies.txt
ssh your-user@your-vps-ip 'chmod 600 ~/cookies.txt'

Teste o ficheiro com um URL que exija conta:

~/yt-dlp-venv/bin/yt-dlp \
  --cookies ~/cookies.txt \
  --simulate \
  "https://www.youtube.com/watch?v=VIDEO_ID"

Os ficheiros de cookies são credenciais de sessão e as extensões de navegador exigem uma escolha cuidadosa, segundo as FAQ do yt-dlp sobre cookies. O guia do extrator do YouTube avisa também que usar uma conta com o yt-dlp pode levar a um bloqueio temporário ou permanente. Use cookies apenas quando o destino os exigir, mantenha o ficheiro privado e recorra a uma conta à parte em vez da sua conta principal da Google.

Não coloque --cookies na configuração global quando a maioria dos alvos é pública. Use um segundo ficheiro de configuração ou acrescente a opção apenas aos trabalhos que precisam dela.

Trate os PO Tokens como resolução de problemas condicional

yt-dlp access troubleshooting flow: simulate the URL first, then branch to no cookies needed for a working public video, a cookie export for account-gated content, or a dependency update and PO Token check when failures continue

Um Proof of Origin Token não é um requisito universal de instalação. O YouTube exige atualmente estes tokens para algumas combinações de cliente e pedido, e a matriz exata vai mudando.

Quando os clientes predefinidos falham, recomenda-se um plugin fornecedor para o cliente mweb, segundo o guia de PO Tokens do yt-dlp. Aí é indicado o bgutil-ytdlp-pot-provider como uma das opções em destaque, mas esse plugin exige tanto um fornecedor de tokens como um plugin do yt-dlp. Instalar apenas o pacote Python não é uma configuração completa.

Siga esta ordem quando uma transferência do YouTube falhar:

  1. Atualize o yt-dlp, o yt-dlp-ejs e o runtime de JavaScript.
  2. Reproduza a falha com --verbose e sem forçar qualquer cliente adicional.
  3. Acrescente cookies apenas se o vídeo exigir conta.
  4. Se o erro apontar para a imposição de PO Token, siga as instruções atuais do fornecedor ligadas a partir do guia oficial.

Assim mantém um remendo volátil fora de uma instalação base que, de resto, é estável.

Escolha uma interface consoante o fluxo de trabalho

A decisão principal não é qual interface tem a lista de funcionalidades mais longa. Decida se precisa de uma fila no navegador, de subscrições baseadas em regras, ou de uma biblioteca local completa ao estilo do YouTube.

OpçãoImplantaçãoPontos fortesPrincipal contrapartida
CLI puraSem interfaceScripts, ficheiros de configuração, systemd, controlo exato das opçõesSem interface no navegador
MeTubeUm único contentor DockerTransferências pelo navegador, mais subscrições de canais e listasGestão de biblioteca limitada após a transferência
PinchflatUm único contentor DockerRegras para canais e listas, RSS, retenção, saída para media centerFeito para gerir transferências, não para ver dentro da aplicação
Tube ArchivistContentores da aplicação, Redis e ElasticsearchPesquisa, metadados, filas, páginas de canal e reproduçãoMaior consumo de memória e carga operacional

Para um fluxo leve no navegador, o MeTube suporta subscrições de canais e listas que verificam periodicamente novos itens e os colocam em fila automaticamente. Continua a ser a escolha mais simples quando quer sobretudo um formulário web e uma fila de transferências.

O Pinchflat encaixa melhor no arquivo contínuo de canais que depois vai consumir através do Jellyfin, do Plex, do Kodi ou de um cliente RSS. É autónomo, verifica as fontes periodicamente, suporta regras de retenção e deixa de propósito a reprodução para outra aplicação.

O Tube Archivist justifica os seus serviços extra quando quer que o próprio arquivo se comporte como um site de vídeo pesquisável. Se o Jellyfin já lhe dá a interface de reprodução, comece pela CLI pura ou pelo Pinchflat e acrescente o Tube Archivist só quando o seu modelo de pesquisa e metadados resolver um problema que tenha mesmo.

Crie uma configuração de arquivo repetível

Mantenha as opções duradouras num só ficheiro e passe o URL do canal a partir da linha de comandos ou do agendador. Este exemplo limita a saída a 1080p, regista os identificadores dos vídeos concluídos, espaça ligeiramente os pedidos e escreve metadados que continuam úteis fora do yt-dlp.

Crie os diretórios e o ficheiro de configuração:

mkdir -p ~/.config/yt-dlp ~/archive
nano ~/.config/yt-dlp/archive.conf

Acrescente estas opções:

-P "~/archive"
-o "%(channel)s/%(upload_date>%Y-%m-%d)s - %(title)s [%(id)s].%(ext)s"
-f "bv*[height<=1080]+ba/b[height<=1080]"
--merge-output-format mp4
--download-archive ~/archive/downloaded.txt
--sleep-requests 1
--sleep-interval 5
--max-sleep-interval 10
--write-info-json
--write-thumbnail
--write-subs
--write-auto-subs
--sub-langs en.*
--embed-subs
--embed-thumbnail
--embed-metadata
--sponsorblock-mark all

Faça um teste com um só vídeo antes de dar ao yt-dlp um canal inteiro:

~/yt-dlp-venv/bin/yt-dlp \
  --config-location ~/.config/yt-dlp/archive.conf \
  "https://www.youtube.com/watch?v=VIDEO_ID"

Depois execute o URL de um canal ou lista com a mesma configuração:

~/yt-dlp-venv/bin/yt-dlp \
  --config-location ~/.config/yt-dlp/archive.conf \
  "https://www.youtube.com/@CHANNEL/videos"

O ficheiro --download-archive regista os identificadores transferidos com êxito, pelo que as execuções seguintes os ignoram. No início, mantenha o valor predefinido --concurrent-fragments 1. O guia do YouTube do yt-dlp recomenda pausas entre vídeos quando uma sessão atinge limites de pedidos; não publica um teto universal e seguro de concorrência de fragmentos para IPs de VPS.

Agendar transferências com systemd

Um temporizador do systemd ao nível do utilizador dá à tarefa um agendamento persistente e registos, sem meter um comando longo no cron. O atraso aleatório também evita que todas as fontes agendadas arranquem no mesmo segundo. Para não depender do PATH do gestor de utilizador, o serviço aponta o yt-dlp diretamente para o local de instalação predefinido do Deno.

Crie o serviço:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/yt-dlp-archive.service
[Unit]
Description=Archive a YouTube channel with yt-dlp

[Service]
Type=oneshot
ExecStart=%h/yt-dlp-venv/bin/yt-dlp --js-runtimes deno:%h/.deno/bin/deno --config-location %h/.config/yt-dlp/archive.conf https://www.youtube.com/@CHANNEL/videos

Crie o temporizador:

nano ~/.config/systemd/user/yt-dlp-archive.timer
[Unit]
Description=Run the yt-dlp archive daily

[Timer]
OnCalendar=*-*-* 04:00:00
RandomizedDelaySec=30m
Persistent=true

[Install]
WantedBy=timers.target

Ative o temporizador e permita que o serviço de utilizador corra quando não tem sessão iniciada:

systemctl --user daemon-reload
systemctl --user enable --now yt-dlp-archive.timer
sudo loginctl enable-linger "$USER"
systemctl --user list-timers
journalctl --user -u yt-dlp-archive.service -n 100 --no-pager

Para vários canais, crie uma instância de serviço por canal ou use temporizadores separados. Desfase-os em vez de lançar várias recolhas grandes ao mesmo tempo.

Ligar o arquivo ao Jellyfin

Monte ou exponha o mesmo diretório ~/archive ao Jellyfin e depois adicione-o como biblioteca. Para a estrutura em bruto de canal/data, a biblioteca Music Videos do Jellyfin aceita pastas aninhadas e nomes de ficheiro arbitrários, sem correspondência de metadados online. O rótulo não é perfeito para arquivos que não são de música, mas encaixa melhor na estrutura de ficheiros do que o tipo "Shows", que espera pastas de séries e temporadas com nomes de episódio SxxEyy. Evite Mixed Content, a não ser que aceite o aviso do Jellyfin de que os resultados de metadados podem não ser fiáveis.

As opções de metadados, miniatura e legendas na configuração do yt-dlp guardam informação útil ao lado de cada ficheiro ou dentro dele. Ainda assim, o Jellyfin pode precisar de ajustes manuais de metadados, porque um canal do YouTube não corresponde de forma limpa a uma base de dados de séries de televisão.

Se quer nomes de ficheiro e metadados à medida do Jellyfin com menos trabalho manual, o Pinchflat traz predefinições de media center para esse fluxo. Para a escolha mais alargada entre servidores de média, a nossa comparação entre Jellyfin e Plex aborda as contrapartidas de reprodução, acesso remoto e transcodificação.

Coloque o conjunto num servidor permanente

Assim que o fluxo funcionar num pequeno conjunto de teste, mude-o para O VPS Linux da Cloudzy , para que as transferências agendadas e a sua biblioteca de média fiquem online sem prender o seu computador do dia a dia. Também pode implementar o Jellyfin como aplicação de um clique e apontar a biblioteca dele para o diretório de saída do yt-dlp.

Ver planos Linux

Construa num VPS Linux com acesso root, NVMe e o poder do AMD EPYC.

Ver planos Linux

Perguntas frequentes

O yt-dlp precisa de GPU num VPS?

Não. O yt-dlp consegue transferir e fazer remux sem GPU. A GPU passa a ser relevante quando o Jellyfin ou outro servidor de média tem de transcodificar vídeo para clientes incompatíveis ou ligações com menos largura de banda; a reprodução direta não exige essa conversão.

O yt-dlp consegue retomar uma transferência interrompida?

Sim. O yt-dlp ativa por predefinição os ficheiros parciais e a continuação, pelo que uma execução posterior costuma retomar os fragmentos já transferidos em vez de os começar de novo. Não acrescente --no-continue, --no-part nem --force-overwrites se quiser esse comportamento.

O yt-dlp e o Jellyfin devem partilhar um VPS?

Podem partilhar um VPS quando o armazenamento, o CPU e o tráfego de saída chegam para as duas tarefas. Separe-os quando a reprodução ou a transcodificação competir com transferências grandes, quando precisar de janelas de manutenção independentes, ou quando o arquivo ficar melhor num armazenamento mais barato do que o servidor de streaming.

Partilhar

Mais do blogue

Continue a ler.

Pronto para implantar? A partir de $2,48/mês.

Cloud independente, desde 2008. AMD EPYC, NVMe, 40 Gbps. Reembolso em 14 dias.