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
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ção | Alocação inicial | Abordagem de armazenamento | Melhor Ajuste |
|---|---|---|---|
| yt-dlp puro com systemd | 2 vCPU, 2 GB RAM | Dimensionar a partir de uma amostra | Transferências agendadas sem interface |
| MeTube ou Pinchflat | 2 vCPU, 4 GB RAM | Dimensionar a partir de uma amostra | Fila no navegador ou subscrições de canais |
| Tube Archivist | 4 vCPU, 8 GB RAM | Disco local com folga para crescer | Arquivo 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:
- Abra uma única janela privada ou de navegação anónima e inicie sessão no YouTube.
- No mesmo separador, abra o ficheiro robots.txt do YouTube.
- Exporte apenas os cookies de youtube.com em formato Netscape, com uma das extensões listadas nas FAQ do yt-dlp.
- Feche a janela privada e não volte a abrir essa sessão.
- 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
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:
- Atualize o yt-dlp, o yt-dlp-ejs e o runtime de JavaScript.
- Reproduza a falha com --verbose e sem forçar qualquer cliente adicional.
- Acrescente cookies apenas se o vídeo exigir conta.
- 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ção | Implantação | Pontos fortes | Principal contrapartida |
|---|---|---|---|
| CLI pura | Sem interface | Scripts, ficheiros de configuração, systemd, controlo exato das opções | Sem interface no navegador |
| MeTube | Um único contentor Docker | Transferências pelo navegador, mais subscrições de canais e listas | Gestão de biblioteca limitada após a transferência |
| Pinchflat | Um único contentor Docker | Regras para canais e listas, RSS, retenção, saída para media center | Feito para gerir transferências, não para ver dentro da aplicação |
| Tube Archivist | Contentores da aplicação, Redis e Elasticsearch | Pesquisa, metadados, filas, páginas de canal e reprodução | Maior 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.
Construa num VPS Linux com acesso root, NVMe e o poder do AMD EPYC.
Ver planos LinuxPerguntas 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.
